]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
actually, get_perms is needed by ldapi:// rgeardless of -DSLAP_X_LISTENER_MOD
[openldap] / servers / slapd / config.c
index 0046551709c614c046b8e1d63b292dd47bc37855..ec599721838d9b991d8b65e63296881f625ffc71 100644 (file)
@@ -52,6 +52,8 @@ char  **cargv;
 struct berval default_search_base = { 0, NULL };
 struct berval default_search_nbase = { 0, NULL };
 unsigned               num_subordinates = 0;
+struct berval global_schemadn = { 0, NULL };
+struct berval global_schemandn = { 0, NULL };
 
 ber_len_t sockbuf_max_incoming = SLAP_SB_MAX_INCOMING_DEFAULT;
 ber_len_t sockbuf_max_incoming_auth= SLAP_SB_MAX_INCOMING_AUTH;
@@ -564,6 +566,41 @@ read_config( const char *fname, int depth )
                                return 1;
 #endif /* HAVE_CYRUS_SASL */
 
+               } else if ( strcasecmp( cargv[0], "schemadn" ) == 0 ) {
+                       struct berval dn;
+                       if ( cargc < 2 ) {
+#ifdef NEW_LOGGING
+                               LDAP_LOG( CONFIG, CRIT, 
+                                          "%s: line %d: missing dn in "
+                                          "\"schemadn <dn>\" line.\n", fname, lineno, 0  );
+#else
+                               Debug( LDAP_DEBUG_ANY,
+           "%s: line %d: missing dn in \"schemadn <dn>\" line\n",
+                                   fname, lineno, 0 );
+#endif
+                               return 1 ;
+                       }
+                       ber_str2bv( cargv[1], 0, 0, &dn );
+                       if ( be ) {
+                               rc = dnPrettyNormal( NULL, &dn, &be->be_schemadn,
+                                       &be->be_schemandn );
+                       } else {
+                               rc = dnPrettyNormal( NULL, &dn, &global_schemadn,
+                                       &global_schemandn );
+                       }
+                       if ( rc != LDAP_SUCCESS ) {
+#ifdef NEW_LOGGING
+                               LDAP_LOG( CONFIG, CRIT, 
+                                       "%s: line %d: schemadn DN is invalid.\n",
+                                       fname, lineno , 0 );
+#else
+                               Debug( LDAP_DEBUG_ANY,
+                                       "%s: line %d: schemadn DN is invalid\n",
+                                       fname, lineno, 0 );
+#endif
+                               return 1;
+                       }
+
                /* set UCDATA path */
                } else if ( strcasecmp( cargv[0], "ucdata-path" ) == 0 ) {
                        int err;
@@ -1220,16 +1257,18 @@ read_config( const char *fname, int depth )
                                } else if( strcasecmp( cargv[i], "bind_anon_dn" ) == 0 ) {
                                        allows |= SLAP_ALLOW_BIND_ANON_DN;
 
+                               } else if( strcasecmp( cargv[i], "update_anon" ) == 0 ) {
+                                       allows |= SLAP_ALLOW_UPDATE_ANON;
+
                                } else if( strcasecmp( cargv[i], "none" ) != 0 ) {
 #ifdef NEW_LOGGING
-                                       LDAP_LOG( CONFIG, CRIT, 
-                                                  "%s: line %d: unknown feature %s in "
-                                                  "\"allow <features>\" line.\n",
-                                                  fname, lineno, cargv[1] );
+                                       LDAP_LOG( CONFIG, CRIT, "%s: line %d: "
+                                               "unknown feature %s in \"allow <features>\" line.\n",
+                                               fname, lineno, cargv[1] );
 #else
-                                       Debug( LDAP_DEBUG_ANY,
-                   "%s: line %d: unknown feature %s in \"allow <features>\" line\n",
-                                           fname, lineno, cargv[i] );
+                                       Debug( LDAP_DEBUG_ANY, "%s: line %d: "
+                                               "unknown feature %s in \"allow <features>\" line\n",
+                                               fname, lineno, cargv[i] );
 #endif
 
                                        return( 1 );
@@ -1280,9 +1319,6 @@ read_config( const char *fname, int depth )
                                } else if( strcasecmp( cargv[i], "bind_simple" ) == 0 ) {
                                        disallows |= SLAP_DISALLOW_BIND_SIMPLE;
 
-                               } else if( strcasecmp( cargv[i], "bind_simple_unprotected" ) == 0 ) {
-                                       disallows |= SLAP_DISALLOW_BIND_SIMPLE_UNPROTECTED;
-
                                } else if( strcasecmp( cargv[i], "bind_krbv4" ) == 0 ) {
                                        disallows |= SLAP_DISALLOW_BIND_KRBV4;
 
@@ -1443,6 +1479,12 @@ read_config( const char *fname, int depth )
                                        set->sss_update_sasl =
                                                atoi( &cargv[i][sizeof("update_sasl")] );
 
+                               } else if( strncasecmp( cargv[i], "simple_bind=",
+                                       sizeof("simple_bind") ) == 0 )
+                               {
+                                       set->sss_simple_bind =
+                                               atoi( &cargv[i][sizeof("simple_bind")] );
+
                                } else {
 #ifdef NEW_LOGGING
                                        LDAP_LOG( CONFIG, CRIT, 
@@ -1537,9 +1579,9 @@ read_config( const char *fname, int depth )
 
                /* specify an objectclass */
                } else if ( strcasecmp( cargv[0], "objectclass" ) == 0 ) {
-                       if ( *cargv[1] == '(' ) {
+                       if ( *cargv[1] == '('  /*')'*/) {
                                char * p;
-                               p = strchr(saveline,'(');
+                               p = strchr(saveline,'(' /*')'*/);
                                rc = parse_oc( fname, lineno, p, cargv );
                                if( rc ) return rc;
 
@@ -1555,13 +1597,21 @@ read_config( const char *fname, int depth )
 #endif
                        }
 
+#ifdef SLAP_EXTENDED_SCHEMA
+               } else if ( strcasecmp( cargv[0], "ditcontentrule" ) == 0 ) {
+                       char * p;
+                       p = strchr(saveline,'(' /*')'*/);
+                       rc = parse_cr( fname, lineno, p, cargv );
+                       if( rc ) return rc;
+#endif
+
                /* specify an attribute type */
                } else if (( strcasecmp( cargv[0], "attributetype" ) == 0 )
                        || ( strcasecmp( cargv[0], "attribute" ) == 0 ))
                {
-                       if ( *cargv[1] == '(' ) {
+                       if ( *cargv[1] == '(' /*')'*/) {
                                char * p;
-                               p = strchr(saveline,'(');
+                               p = strchr(saveline,'(' /*')'*/);
                                rc = parse_at( fname, lineno, p, cargv );
                                if( rc ) return rc;
 
@@ -2261,6 +2311,12 @@ read_config( const char *fname, int depth )
 
        if ( depth == 0 ) ch_free( cargv );
 
+       if ( !global_schemadn.bv_val ) {
+               ber_str2bv( SLAPD_SCHEMA_DN, sizeof(SLAPD_SCHEMA_DN)-1, 1,
+                       &global_schemadn );
+               dnNormalize2( NULL, &global_schemadn, &global_schemandn );
+       }
+
        if ( load_ucdata( NULL ) < 0 ) return 1;
        return( 0 );
 }
@@ -2480,6 +2536,8 @@ void
 config_destroy( )
 {
        ucdata_unload( UCDATA_ALL );
+       free( global_schemandn.bv_val );
+       free( global_schemadn.bv_val );
        free( line );
        if ( slapd_args_file )
                free ( slapd_args_file );