Thread: Extending PostgreSQL Using C
Hi, Im writing a C function for PG to do one way encryption using crypt. Here is the source code #include <ctype.h> #include <unistd.h> #include "postgres.h" #include "utils/builtins.h" text *encrypt(text *string){ text *ret; int m; if ((string == (text *) NULL) || ((m = VARSIZE(string) - VARHDRSZ) <= 0)) return string; ret = (text *) palloc(20); ret = (text *) crypt(string,"AB"); return ret; } then I compile it like so: gcc -I/usr/src/postgresql-7.0.3/src/include \ -I/usr/src/postgresql-7.0.3/src/backend -O2 -Wall -Wmissing-prototypes \ -Wmissing-declarations \ -I/usr/src/postgresql-7.0.3/src/interfaces/libpq \ -I/usr/src/postgresql-7.0.3/src/include -fpic -c -o encrypt.o encrypt.c gcc -shared -o encrypt.so encrypt.o rm encrypt.o then in PG, I do the following test=> CREATE FUNCTION encrypt(text) test->RETURNS text test->AS '/[full path here]/encrypt.so' test->LANGUAGE 'C'; CREATE Now when I try test=> SELECT encrypt('Blah'); it gives me this error ERROR: Can't find function encrypt in file /[full path here]/encrypt.so Why do I get this error???? Any ideas? Regards, Boulat Khakimov -- Nothing Like the Sun
Boulat Khakimov <boulat@inet-interactif.com> writes: > ERROR: Can't find function encrypt in file /[full path here]/encrypt.so > Why do I get this error???? Offhand I see nothing wrong with your procedure. Try running 'nm' on the .so file to see what symbols it says the .so defines. What platform is this on, anyway? regards, tom lane
Tom Lane wrote: > > Boulat Khakimov <boulat@inet-interactif.com> writes: > > ERROR: Can't find function encrypt in file /[full path here]/encrypt.so > > Why do I get this error???? > > Offhand I see nothing wrong with your procedure. Try running 'nm' on > the .so file to see what symbols it says the .so defines. > > What platform is this on, anyway? Linux 2.2.18 #23 Tue Feb 6 13:21:15 EST 2001 i686 unknown Regards, Boulat -- Nothing Like the Sun
Hannu Krosing <hannu@tm.ee> writes: > Boulat Khakimov wrote: >> ERROR: Can't find function encrypt in file /[full path here]/encrypt.so > Can _postgres_ user read /[full path here]/encrypt.so ? Presumably so. If he were unable to load the .so file, he'd be getting a different error message. This message indicates that he got past the load step, but dl_sym is unable to resolve the symbol "encrypt". I asked about the symbol names shown by nm(1), but got no answer ... regards, tom lane
On Wed, 7 Mar 2001, Tom Lane wrote: > Hannu Krosing <hannu@tm.ee> writes: > > Boulat Khakimov wrote: > >> ERROR: Can't find function encrypt in file /[full path here]/encrypt.so > > > Can _postgres_ user read /[full path here]/encrypt.so ? > > Presumably so. If he were unable to load the .so file, he'd be getting > a different error message. This message indicates that he got past the > load step, but dl_sym is unable to resolve the symbol "encrypt". > > I asked about the symbol names shown by nm(1), but got no answer ... It should be noted that encrypt() is a function already declared in unistd.h, which the OP is including. Could that be causing some problem since the OP is using the same name? Nishad -- "Underneath the concrete, the dream is still alive" -- Talking Heads
Boulat Khakimov wrote: > Hi, > > Im writing a C function for PG to do one way encryption using crypt. > Here is the source code > > it gives me this error > > ERROR: Can't find function encrypt in file /[full path here]/encrypt.so > > > Why do I get this error???? > Any ideas? Can _postgres_ user read /[full path here]/encrypt.so ? --------------- Hannu