]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/ppolicy.c
Happy New Year!
[openldap] / servers / slapd / overlays / ppolicy.c
index 90838872969897c405e28897fb1c7777767df5f0..c651dc07dac269935e64fa5f672d5768b2021c27 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2004-2015 The OpenLDAP Foundation.
+ * Copyright 2004-2017 The OpenLDAP Foundation.
  * Portions Copyright 2004-2005 Howard Chu, Symas Corporation.
  * Portions Copyright 2004 Hewlett-Packard Company.
  * All rights reserved.
@@ -196,6 +196,7 @@ static struct schema_info pwd_UsSchema[] = {
        TAB(pwdCheckQuality),
        TAB(pwdMinLength),
        TAB(pwdMaxFailure),
+       TAB(pwdMaxRecordedFailure),
        TAB(pwdGraceAuthNLimit),
        TAB(pwdExpireWarning),
        TAB(pwdLockout),
@@ -467,6 +468,20 @@ add_passcontrol( Operation *op, SlapReply *rs, LDAPControl *ctrl )
        return oldctrls;
 }
 
+static void
+ppolicy_get_default( PassPolicy *pp )
+{
+       memset( pp, 0, sizeof(PassPolicy) );
+
+       pp->ad = slap_schema.si_ad_userPassword;
+
+       /* Users can change their own password by default */
+       pp->pwdAllowUserChange = 1;
+       if ( !pp->pwdMaxRecordedFailure )
+               pp->pwdMaxRecordedFailure = PPOLICY_DEFAULT_MAXRECORDED_FAILURE;
+}
+
+
 static void
 ppolicy_get( Operation *op, Entry *e, PassPolicy *pp )
 {
@@ -480,12 +495,7 @@ ppolicy_get( Operation *op, Entry *e, PassPolicy *pp )
        const char *text;
 #endif
 
-       memset( pp, 0, sizeof(PassPolicy) );
-
-       pp->ad = slap_schema.si_ad_userPassword;
-
-       /* Users can change their own password by default */
-       pp->pwdAllowUserChange = 1;
+       ppolicy_get_default( pp );
 
        if ((a = attr_find( e->e_attrs, ad_pwdPolicySubentry )) == NULL) {
                /*
@@ -575,8 +585,17 @@ ppolicy_get( Operation *op, Entry *e, PassPolicy *pp )
        return;
 
 defaultpol:
+       if ( pe ) {
+               op->o_bd->bd_info = (BackendInfo *)on->on_info;
+               be_entry_release_r( op, pe );
+               op->o_bd->bd_info = (BackendInfo *)on;
+       }
+
        Debug( LDAP_DEBUG_TRACE,
                "ppolicy_get: using default policy\n", 0, 0, 0 );
+
+       ppolicy_get_default( pp );
+
        return;
 }