X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=libraries%2Fliblutil%2Fpasswd.c;h=2ccad563b2047984233644c87cd6821118eb1b29;hb=10595e7e5877b224077ae388913f96dbf26e9138;hp=f7e73e7d921853203a1c6414b24bd93906573720;hpb=6cfcae11f27fec01944e272e712dacb438087108;p=openldap diff --git a/libraries/liblutil/passwd.c b/libraries/liblutil/passwd.c index f7e73e7d92..2ccad563b2 100644 --- a/libraries/liblutil/passwd.c +++ b/libraries/liblutil/passwd.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2007 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -42,7 +42,7 @@ #ifdef SLAPD_CRYPT # include -# if defined( HAVE_GETPWNAM ) && defined( HAVE_PW_PASSWD ) +# if defined( HAVE_GETPWNAM ) && defined( HAVE_STRUCT_PASSWD_PW_PASSWD ) # ifdef HAVE_SHADOW_H # include # endif @@ -73,6 +73,10 @@ static lutil_cryptfunc lutil_crypt; lutil_cryptfunc *lutil_cryptptr = lutil_crypt; #endif +/* KLUDGE: + * chk_fn is NULL iff name is {CLEARTEXT} + * otherwise, things will break + */ struct pw_scheme { struct berval name; LUTIL_PASSWD_CHK_FUNC *chk_fn; @@ -110,7 +114,7 @@ static LUTIL_PASSWD_HASH_FUNC hash_lanman; static LUTIL_PASSWD_CHK_FUNC chk_crypt; static LUTIL_PASSWD_HASH_FUNC hash_crypt; -#if defined( HAVE_GETPWNAM ) && defined( HAVE_PW_PASSWD ) +#if defined( HAVE_GETPWNAM ) && defined( HAVE_STRUCT_PASSWD_PW_PASSWD ) static LUTIL_PASSWD_CHK_FUNC chk_unix; #endif #endif @@ -140,14 +144,14 @@ static const struct pw_scheme pw_schemes_default[] = #ifdef SLAPD_CRYPT { BER_BVC("{CRYPT}"), chk_crypt, hash_crypt }, -# if defined( HAVE_GETPWNAM ) && defined( HAVE_PW_PASSWD ) +# if defined( HAVE_GETPWNAM ) && defined( HAVE_STRUCT_PASSWD_PW_PASSWD ) { BER_BVC("{UNIX}"), chk_unix, NULL }, # endif #endif #ifdef SLAPD_CLEARTEXT /* pseudo scheme */ - { {0, "{CLEARTEXT}"}, NULL, hash_clear }, + { BER_BVC("{CLEARTEXT}"), NULL, hash_clear }, #endif { BER_BVNULL, NULL, NULL } @@ -209,9 +213,7 @@ static const struct pw_scheme *get_scheme( bv.bv_val = (char *) scheme; for( pws=pw_schemes; pws; pws=pws->next ) { - if( bv.bv_len != pws->s.name.bv_len ) - continue; - if( strncasecmp(bv.bv_val, pws->s.name.bv_val, bv.bv_len ) == 0 ) { + if ( ber_bvstrcasecmp(&bv, &pws->s.name ) == 0 ) { return &(pws->s); } } @@ -307,8 +309,10 @@ lutil_passwd( * didn't recognize? Assume a scheme name is at least 1 character. */ if (( passwd->bv_val[0] == '{' ) && - ( strchr( passwd->bv_val, '}' ) > passwd->bv_val+1 )) + ( ber_bvchr( passwd, '}' ) > passwd->bv_val+1 )) + { return 1; + } if( is_allowed_scheme("{CLEARTEXT}", schemes ) ) { return ( passwd->bv_len == cred->bv_len ) ? memcmp( passwd->bv_val, cred->bv_val, passwd->bv_len ) @@ -815,7 +819,7 @@ static int chk_crypt( return lutil_cryptptr( cred->bv_val, passwd->bv_val, NULL ); } -# if defined( HAVE_GETPWNAM ) && defined( HAVE_PW_PASSWD ) +# if defined( HAVE_GETPWNAM ) && defined( HAVE_STRUCT_PASSWD_PW_PASSWD ) static int chk_unix( const struct berval *sc, const struct berval * passwd,