git-svn-id: file:///svnroot/pam-modules/trunk@62 56984be4-0537-0410-a56c-fcb268c96130
This commit is contained in:
Sergey Poznyakoff 2007-08-28 13:00:56 +00:00
parent cf85e27af5
commit f9f6f80133
2 changed files with 33 additions and 36 deletions

View file

@ -424,7 +424,7 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags,
int retval = PAM_AUTH_ERR; int retval = PAM_AUTH_ERR;
int rc; int rc;
char *confdir; char *confdir;
char *pwstr; char *pwstr = NULL;
/* parse arguments */ /* parse arguments */
if ((rc = _pam_parse(pamh, argc, argv)) != PAM_SUCCESS) if ((rc = _pam_parse(pamh, argc, argv)) != PAM_SUCCESS)

View file

@ -131,9 +131,9 @@ sql_expand_query (MYSQL *mysql,
static unsigned static unsigned
digit_to_number (char c) digit_to_number (char c)
{ {
return (unsigned) (c >= '0' && c <= '9' ? c-'0' : return (unsigned) (c >= '0' && c <= '9' ? c-'0' :
c >= 'A' && c <= 'Z' ? c-'A'+10 : c >= 'A' && c <= 'Z' ? c-'A'+10 :
c-'a'+10); c-'a'+10);
} }
/* Extract salt value from MySQL scrambled password. /* Extract salt value from MySQL scrambled password.
@ -146,51 +146,48 @@ digit_to_number (char c)
static void static void
get_salt_from_scrambled (unsigned long *res, const char *password) get_salt_from_scrambled (unsigned long *res, const char *password)
{ {
res[0] = res[1] = 0; res[0] = res[1] = 0;
while (*password) while (*password) {
{ unsigned long val = 0;
unsigned long val = 0; unsigned i;
unsigned i;
for (i = 0; i < 8 ; i++) for (i = 0; i < 8 ; i++)
val = (val << 4) + digit_to_number (*password++); val = (val << 4) + digit_to_number (*password++);
*res++ = val; *res++ = val;
} }
} }
/* Scramble a plaintext password */ /* Scramble a plaintext password */
static void static void
scramble_password (unsigned long *result, const char *password) scramble_password (unsigned long *result, const char *password)
{ {
unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L; unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;
unsigned long tmp; unsigned long tmp;
for (; *password ; password++) for (; *password ; password++) {
{ if (*password == ' ' || *password == '\t')
if (*password == ' ' || *password == '\t') continue;
continue; tmp = (unsigned long) (unsigned char) *password;
tmp = (unsigned long) (unsigned char) *password; nr ^= (((nr & 63) + add) * tmp)+ (nr << 8);
nr ^= (((nr & 63) + add) * tmp)+ (nr << 8); nr2 += (nr2 << 8) ^ nr;
nr2 += (nr2 << 8) ^ nr; add += tmp;
add += tmp; }
}
result[0] = nr & (((unsigned long) 1L << 31) -1L); result[0] = nr & (((unsigned long) 1L << 31) -1L);
result[1] = nr2 & (((unsigned long) 1L << 31) -1L); result[1] = nr2 & (((unsigned long) 1L << 31) -1L);
} }
static void static void
mu_octet_to_hex (char *to, const unsigned char *str, unsigned len) mu_octet_to_hex (char *to, const unsigned char *str, unsigned len)
{ {
const unsigned char *str_end= str + len; const unsigned char *str_end= str + len;
static char d[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static char d[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ( ; str != str_end; ++str) for ( ; str != str_end; ++str) {
{ *to++ = d[(*str & 0xF0) >> 4];
*to++ = d[(*str & 0xF0) >> 4]; *to++ = d[*str & 0x0F];
*to++ = d[*str & 0x0F]; }
} *to= '\0';
*to= '\0';
} }
#define SHA1_HASH_SIZE 20 #define SHA1_HASH_SIZE 20
@ -237,7 +234,7 @@ mu_check_mysql_3x_password (const char *scrambled, const char *message)
/* Check whether a plaintext password MESSAGE matches MySQL scrambled password /* Check whether a plaintext password MESSAGE matches MySQL scrambled password
PASSWORD */ PASSWORD */
int static int
mu_check_mysql_scrambled_password (const char *scrambled, const char *message) mu_check_mysql_scrambled_password (const char *scrambled, const char *message)
{ {
const char *p; const char *p;