summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd/pw.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/slapd/pw.c')
-rw-r--r--ldap/servers/slapd/pw.c16
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 );
}