]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/passwd.c
use back-config if supported
[openldap] / servers / slapd / passwd.c
index a722ef9d7c91753e3070ca1c0ef48cfd729a3fe6..d22686a9649ea61f1165a203c1213cbf6ff6d5cb 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2009 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -503,14 +503,17 @@ slap_passwd_check(
        int                     result = 1;
        struct berval           *bv;
        AccessControlState      acl_state = ACL_STATE_INIT;
+       char            credNul = cred->bv_val[cred->bv_len];
 
 #ifdef SLAPD_SPASSWD
        void            *old_authctx = NULL;
 
-       ldap_pvt_thread_pool_setkey_x( op->o_threadctx, slap_sasl_bind,
-               op->o_conn->c_sasl_authctx, NULL, &old_authctx, NULL );
+       ldap_pvt_thread_pool_setkey( op->o_threadctx, (void *)slap_sasl_bind,
+               op->o_conn->c_sasl_authctx, 0, &old_authctx, NULL );
 #endif
 
+       if ( credNul ) cred->bv_val[cred->bv_len] = 0;
+
        for ( bv = a->a_vals; bv->bv_val != NULL; bv++ ) {
                /* if e is provided, check access */
                if ( e && access_allowed( op, e, a->a_desc, bv,
@@ -525,9 +528,11 @@ slap_passwd_check(
                }
        }
 
+       if ( credNul ) cred->bv_val[cred->bv_len] = credNul;
+
 #ifdef SLAPD_SPASSWD
-       ldap_pvt_thread_pool_setkey( op->o_threadctx, slap_sasl_bind,
-               old_authctx, NULL );
+       ldap_pvt_thread_pool_setkey( op->o_threadctx, (void *)slap_sasl_bind,
+               old_authctx, 0, NULL, NULL );
 #endif
 
        return result;