diff --git a/src/server/person.c b/src/server/person.c index a90fad78bbb20be7ab0f0b358a838ee2cb5488ed..d791bea6157b8b4523cbe15ed7631e10edfe2aea 100644 --- a/src/server/person.c +++ b/src/server/person.c @@ -4,7 +4,7 @@ * All atomic calls that deals with persons. */ -static char *rcsid = "$Id: person.c,v 0.8 1991/09/11 23:03:48 ceder Exp $"; +static char *rcsid = "$Id: person.c,v 0.9 1991/09/12 16:35:15 ceder Exp $"; #include <m-config.h> #include <time.h> @@ -26,13 +26,21 @@ static char *rcsid = "$Id: person.c,v 0.8 1991/09/11 23:03:48 ceder Exp $"; #include "connections.h" #include "send-async.h" #include <debug.h> + /* * Static functions. */ + static Bool legal_passwd(const String pwd) { - return TRUE; /* ??? */ + int i; + + for (i = 0; i < s_strlen(pwd); i++) + if (pwd.string[i] == '\0') + return FALSE; + + return TRUE; } static Success @@ -43,6 +51,7 @@ do_set_passwd( Password pwd, char salt[3]; static char crypt_seed[] = ("abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"); + char *password; if ( !legal_passwd(new_pwd) ) return FAILURE; @@ -50,8 +59,16 @@ do_set_passwd( Password pwd, salt[0] = crypt_seed [rand() % sizeof (crypt_seed)]; salt[1] = crypt_seed [rand() % sizeof (crypt_seed)]; salt[2] = '\0'; - - strcpy((char *)pwd, (const char *)crypt((char *)new_pwd.string, salt)); + + password = s_crea_c_str(new_pwd); + if (password == NULL) + return FAILURE; + else + { + strcpy((char *)pwd, (const char *)crypt(password, salt)); + sfree(password); + return OK; + } #else @@ -63,9 +80,9 @@ do_set_passwd( Password pwd, strncpy(pwd, (const char *)new_pwd.string, min( PASSWD_LEN-1, new_pwd.len )); -#endif - return OK; + +#endif } @@ -307,13 +324,23 @@ chk_passwd (Password pwd, const String try) { #ifdef ENCRYPT_PASSWORDS + char *c_try; + c_try = s_crea_c_str(try); + if (c_try == NULL) + return FAILURE; + if (strcmp ((const char *)pwd, - (const char *)crypt((const char *)&try.string[2], - (const char *)try.string))) + (const char *)crypt(c_try, (const char *)pwd)) != 0) + { + sfree(c_try); return FAILURE; + } else + { + sfree(c_try); return OK; + } #else