diff options
Diffstat (limited to 'ldap/servers/slapd/pw.c')
-rw-r--r-- | ldap/servers/slapd/pw.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/ldap/servers/slapd/pw.c b/ldap/servers/slapd/pw.c index 4e3c0d8c..a2b42c47 100644 --- a/ldap/servers/slapd/pw.c +++ b/ldap/servers/slapd/pw.c @@ -319,7 +319,7 @@ int pw_encodevals( Slapi_Value **vals ) { int i; - char *enc; + char *enc = NULL; slapdFrontendConfig_t * slapdFrontendConfig = getFrontendConfig(); @@ -331,11 +331,17 @@ pw_encodevals( Slapi_Value **vals ) for ( i = 0; vals[ i ] != NULL; ++i ) { struct pw_scheme *pwsp; if ( (pwsp=pw_val2scheme( (char*)slapi_value_get_string(vals[ i ]), NULL, 0)) != NULL ) { /* JCM Innards */ - free_pw_scheme( pwsp ); - continue; /* don't touch pre-encoded values */ + /* If the value already specifies clear storage, call the + * clear storage plug-in */ + if (strcasecmp( pwsp->pws_name, "clear" ) == 0) { + enc = (*pwsp->pws_enc)( (char*)slapi_value_get_string(vals[ i ]) ); + } else { + free_pw_scheme( pwsp ); + continue; /* don't touch pre-encoded values */ + } } - if (( enc = (*slapdFrontendConfig->pw_storagescheme->pws_enc)( (char*)slapi_value_get_string(vals[ i ]) )) /* JCM Innards */ - == NULL ) { + if ((!enc) && (( enc = (*slapdFrontendConfig->pw_storagescheme->pws_enc)( (char*)slapi_value_get_string(vals[ i ]) )) /* JCM Innards */ + == NULL )) { free_pw_scheme( pwsp ); return( -1 ); } |