Struggling with c functions - Mailing list pgsql-hackers

From Olivier PRENANT
Subject Struggling with c functions
Date
Msg-id Pine.UW2.4.21.0104282344360.12890-100000@server.pyrenet.fr
Whole thread Raw
List pgsql-hackers
Hi all,

I'm rewriting my OLD crypt (Thanks to Henrique) C_fonction to version 0
forms :

I have this C file compiled OK to a shared library:

/*
*
*  Henrique Pantarotto (scanner@cepa.com.br)
*  Funcao para encriptar senhas (Function to encrypt passwords)
*  September 1999
*
*  PS: Note that all crypted passwords are created with salt "HP" (my name
*  initials..) You can change that, or if you know C, you can do in a way
*  that it will pick two random characters (the way it should really be).
*
*/

#include <strings.h>
#include <unistd.h>

#include <postgres.h>

text *post_crypt(text *user)
{text *password;char * crypt();long now=time((long *) 0);int len;char salt[7]="PY", *crypted;/*strcpy(salt,l64a(now));
salt[3]='\0';*/crypted=crypt(VARDATA(user),salt);len=strlen(crypted);password= palloc((int32) 13 +
VARHDRSZ);VARATT_SIZEP(password)=(int32) VARHDRSZ + 13;memcpy(VARDATA(password),crypted,len);return password;
 
}

text *sql_crypt(text *user,text *salt)
{ text *password; char * crypt(), *crypted; int len; char s[3]; strncpy(s,VARDATA(salt),2); s[2]='\0';
crypted=crypt(VARDATA(user),s);len=strlen(crypted); password=palloc((int32) 13 + VARHDRSZ);
VARATT_SIZEP(password)=(int32)13 + VARHDRSZ; memcpy(VARDATA(password),crypted,len); return password;
 
}


/*
Compile using something like this:

gcc -I/home/postgres/postgresql-6.5.1/src/include -I/home/postgres/postgresql-6.5.1/src/backend -O2 -Wall
-Wmissing-prototypes-fpic -I/home/postgres/postgresql-6.5.1/src/include -c -o encrypt.o encrypt.c
 
gcc -shared -o encrypt.so encrypt.o

And last, you create the trigger in PostgreSQL using this:

create function encrypt(text)
returns text as '/usr/local/pgsql/lib/encrypt.so' language 'c';

If everything is okay, you'll probably have: select encrypt('secret') working
and showing:

encrypt
------------
HPK1Jt2NX21G.
(1 row)
*/

I have defined to SQL function:

CREATE FUNCTION post_crypt(text) RETURNS text AS 'xxxx/encrypt.so'
CREATE FUNCTION sql_cypt(text,text) RETURNS text AS 'xxxx/encrypt.so';

WHY on earth does

SELECT post_crypt('test'),sql_crypt('test','PY') 
NOT GIVE the same result???

Please help, 

This is most urgent (My customer can't use this function anymore); it
worked OK with 7.0.3!!

Regards,
-- 
Olivier PRENANT             Tel:    +33-5-61-50-97-00 (Work)
Quartier d'Harraud Turrou           +33-5-61-50-97-01 (Fax)
31190 AUTERIVE                      +33-6-07-63-80-64 (GSM)
FRANCE                      Email: ohp@pyrenet.fr
------------------------------------------------------------------------------
Make your life a dream, make your dream a reality. (St Exupery)



pgsql-hackers by date:

Previous
From: "ÆøÇò"
Date:
Subject: after changing login password (local), CPU always 100% !!
Next
From: "Magnus Naeslund\(f\)"
Date:
Subject: PQftype()