]> git.sur5r.net Git - openldap/commitdiff
ITS#3137 defer schema loading until overlay configuration
authorHoward Chu <hyc@openldap.org>
Thu, 13 May 2004 00:38:24 +0000 (00:38 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 13 May 2004 00:38:24 +0000 (00:38 +0000)
servers/slapd/overlays/ppolicy.c

index 9814a85a3c9379a750dfe491a4c6de3baa608b25..453e194831f04c7e11bf23abf66a3077f56aeff9 100644 (file)
@@ -1784,6 +1784,41 @@ ppolicy_db_init(
 {
        slap_overinst *on = (slap_overinst *) be->bd_info;
 
+       /* Has schema been initialized yet? */
+       if ( !ad_pwdMinAge ) {
+               LDAPAttributeType *at;
+               const char *err;
+               int i, code;
+
+               for (i=0; pwd_OpSchema[i].def; i++) {
+                       at = ldap_str2attributetype( pwd_OpSchema[i].def, &code, &err,
+                               LDAP_SCHEMA_ALLOW_ALL );
+                       if ( !at ) {
+                               fprintf( stderr, "AttributeType Load failed %s %s\n",
+                                       ldap_scherr2str(code), err );
+                               return code;
+                       }
+                       code = at_add( at, &err );
+                       if ( !code ) {
+                               slap_str2ad( at->at_names[0], pwd_OpSchema[i].ad, &err );
+                       }
+                       ldap_memfree( at );
+                       if ( code ) {
+                               fprintf( stderr, "AttributeType Load failed %s %s\n",
+                                       scherr2str(code), err );
+                               return code;
+                       }
+               }
+
+               for (i=0; pwd_UsSchema[i].def; i++) {
+                       code = slap_str2ad( pwd_UsSchema[i].def, pwd_UsSchema[i].ad, &err );
+                       if ( code ) {
+                               fprintf( stderr, "User Schema Load failed %d: %s\n", code, err );
+                               return code;
+                       }
+               }
+       }
+
        on->on_bi.bi_private = ch_calloc( sizeof(pp_info), 1 );
 
        if ( dtblsize && !pwcons )
@@ -1856,38 +1891,7 @@ static slap_overinst ppolicy;
 
 int ppolicy_init()
 {
-       LDAPAttributeType *at;
        int code;
-       const char *err;
-       int i;
-
-       for (i=0; pwd_OpSchema[i].def; i++) {
-               at = ldap_str2attributetype( pwd_OpSchema[i].def, &code, &err,
-                       LDAP_SCHEMA_ALLOW_ALL );
-               if ( !at ) {
-                       fprintf( stderr, "AttributeType Load failed %s %s\n",
-                               ldap_scherr2str(code), err );
-                       return code;
-               }
-               code = at_add( at, &err );
-               if ( !code ) {
-                       slap_str2ad( at->at_names[0], pwd_OpSchema[i].ad, &err );
-               }
-               ldap_memfree( at );
-               if ( code ) {
-                       fprintf( stderr, "AttributeType Load failed %s %s\n",
-                               scherr2str(code), err );
-                       return code;
-               }
-       }
-
-       for (i=0; pwd_UsSchema[i].def; i++) {
-               code = slap_str2ad( pwd_UsSchema[i].def, pwd_UsSchema[i].ad, &err );
-               if ( code ) {
-                       fprintf( stderr, "User Schema Load failed %d: %s\n", code, err );
-                       return code;
-               }
-       }
 
        code = register_supported_control( LDAP_CONTROL_PASSWORDPOLICYREQUEST,
                SLAP_CTRL_ADD|SLAP_CTRL_BIND|SLAP_CTRL_MODIFY, extops,