X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fconfig.c;h=ec599721838d9b991d8b65e63296881f625ffc71;hb=8558b8808e7e8deba617908eed99a8213f1bc405;hp=0046551709c614c046b8e1d63b292dd47bc37855;hpb=554311a4c88a847f9f65055af72b5a761b5b8a49;p=openldap diff --git a/servers/slapd/config.c b/servers/slapd/config.c index 0046551709..ec59972183 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -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 \" line.\n", fname, lineno, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "%s: line %d: missing dn in \"schemadn \" 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 \" line.\n", - fname, lineno, cargv[1] ); + LDAP_LOG( CONFIG, CRIT, "%s: line %d: " + "unknown feature %s in \"allow \" line.\n", + fname, lineno, cargv[1] ); #else - Debug( LDAP_DEBUG_ANY, - "%s: line %d: unknown feature %s in \"allow \" line\n", - fname, lineno, cargv[i] ); + Debug( LDAP_DEBUG_ANY, "%s: line %d: " + "unknown feature %s in \"allow \" 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 );