X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fconfig.c;h=47b081a2860b1d172716fb1f8f403ef79f7824fb;hb=740f1b422edc48c9eeed8346c45872a63b683370;hp=873f2d16c23a411e3c7dad2304142cf976bc5c2c;hpb=170836751a1fde72bc53325da4d45919c3850fdf;p=openldap diff --git a/servers/slapd/config.c b/servers/slapd/config.c index 873f2d16c2..47b081a286 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -1,4 +1,8 @@ /* config.c - configuration file handling routines */ +/* + * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ #include "portable.h" @@ -24,7 +28,7 @@ int deftime = SLAPD_DEFAULT_TIMELIMIT; AccessControl *global_acl = NULL; int global_default_access = ACL_READ; char *replogfile; -int global_lastmod; +int global_lastmod = ON; int global_idletimeout = 0; char *global_realm = NULL; char *ldap_srvtab = ""; @@ -204,6 +208,7 @@ read_config( char *fname ) /* set database suffix */ } else if ( strcasecmp( cargv[0], "suffix" ) == 0 ) { + Backend *tmp_be; if ( cargc < 2 ) { Debug( LDAP_DEBUG_ANY, "%s: line %d: missing dn in \"suffix \" line\n", @@ -218,15 +223,77 @@ read_config( char *fname ) Debug( LDAP_DEBUG_ANY, "%s: line %d: suffix line must appear inside a database definition (ignored)\n", fname, lineno, 0 ); + } else if ( ( tmp_be = select_backend( cargv[1] ) ) == be ) { + Debug( LDAP_DEBUG_ANY, +"%s: line %d: suffix already served by this backend (ignored)\n", + fname, lineno, 0 ); + } else if ( tmp_be != NULL ) { + Debug( LDAP_DEBUG_ANY, +"%s: line %d: suffix already served by a preceeding backend \"%s\" (ignored)\n", + fname, lineno, tmp_be->be_suffix[0] ); } else { char *dn = ch_strdup( cargv[1] ); (void) dn_normalize( dn ); charray_add( &be->be_suffix, dn ); - (void) dn_upcase( dn ); + (void) str2upper( dn ); charray_add( &be->be_nsuffix, dn ); free( dn ); } + /* set database suffixAlias */ + } else if ( strcasecmp( cargv[0], "suffixAlias" ) == 0 ) { + Backend *tmp_be; + if ( cargc < 2 ) { + Debug( LDAP_DEBUG_ANY, +"%s: line %d: missing alias and aliased_dn in \"suffixAlias \" line\n", + fname, lineno, 0 ); + return( 1 ); + } else if ( cargc < 3 ) { + Debug( LDAP_DEBUG_ANY, +"%s: line %d: missing aliased_dn in \"suffixAlias \" line\n", + fname, lineno, 0 ); + return( 1 ); + } else if ( cargc > 3 ) { + Debug( LDAP_DEBUG_ANY, + "%s: line %d: extra cruft in suffixAlias line (ignored)\n", + fname, lineno, 0 ); + } + + if ( be == NULL ) { + Debug( LDAP_DEBUG_ANY, + "%s: line %d: suffixAlias line" + " must appear inside a database definition (ignored)\n", + fname, lineno, 0 ); + } else if ( (tmp_be = select_backend( cargv[1] )) != NULL ) { + Debug( LDAP_DEBUG_ANY, + "%s: line %d: suffixAlias served by" + " a preceeding backend \"%s\" (ignored)\n", + fname, lineno, tmp_be->be_suffix[0] ); + + } else if ( (tmp_be = select_backend( cargv[2] )) != NULL ) { + Debug( LDAP_DEBUG_ANY, + "%s: line %d: suffixAlias derefs to differnet backend" + " a preceeding backend \"%s\" (ignored)\n", + fname, lineno, tmp_be->be_suffix[0] ); + + } else { + char *alias, *aliased_dn; + + alias = ch_strdup( cargv[1] ); + (void) dn_normalize( alias ); + + aliased_dn = ch_strdup( cargv[2] ); + (void) dn_normalize( aliased_dn ); + + (void) dn_normalize_case( alias ); + (void) dn_normalize_case( aliased_dn ); + charray_add( &be->be_suffixAlias, alias ); + charray_add( &be->be_suffixAlias, aliased_dn ); + + free(alias); + free(aliased_dn); + } + /* set max deref depth */ } else if ( strcasecmp( cargv[0], "maxDerefDepth" ) == 0 ) { int i; @@ -240,7 +307,7 @@ read_config( char *fname ) Debug( LDAP_DEBUG_ANY, "%s: line %d: depth line must appear inside a database definition (ignored)\n", fname, lineno, 0 ); - } else if ((i = atoi(cargv[i])) < 0) { + } else if ((i = atoi(cargv[1])) < 0) { Debug( LDAP_DEBUG_ANY, "%s: line %d: depth must be positive (ignored)\n", fname, lineno, 0 ); @@ -264,7 +331,16 @@ read_config( char *fname ) fname, lineno, 0 ); } else { be->be_root_dn = ch_strdup( cargv[1] ); - be->be_root_ndn = dn_normalize_case( ch_strdup( cargv[1] ) ); + be->be_root_ndn = ch_strdup( cargv[1] ); + + if( dn_normalize_case( be->be_root_ndn ) == NULL ) { + free( be->be_root_dn ); + free( be->be_root_ndn ); + Debug( LDAP_DEBUG_ANY, +"%s: line %d: rootdn DN is invalid\n", + fname, lineno, 0 ); + return( 1 ); + } } /* set super-secret magic database password */ @@ -397,7 +473,7 @@ read_config( char *fname ) str2access(cargv[1]))) ) { Debug( LDAP_DEBUG_ANY, -"%s: line %d: bad access \"%s\" expecting [self]{none|compare|read|write}\n", +"%s: line %d: bad access \"%s\" expecting [self]{none|auth|compare|search|read|write}\n", fname, lineno, cargv[1] ); return( 1 ); } @@ -407,7 +483,7 @@ read_config( char *fname ) { Debug( LDAP_DEBUG_ANY, "%s: line %d: bad access \"%s\", " - "expecting [self]{none|compare|search|read|write}\n", + "expecting [self]{none|auth|compare|search|read|write}\n", fname, lineno, cargv[1] ); return( 1 ); } @@ -465,7 +541,12 @@ read_config( char *fname ) fname, lineno, 0 ); } else { be->be_update_ndn = ch_strdup( cargv[1] ); - (void) dn_normalize_case( be->be_update_ndn ); + if( dn_normalize_case( be->be_update_ndn ) == NULL ) { + Debug( LDAP_DEBUG_ANY, +"%s: line %d: updatedn DN is invalid\n", + fname, lineno, 0 ); + return 1; + } } } else if ( strcasecmp( cargv[0], "updateref" ) == 0 ) { @@ -578,13 +659,13 @@ read_config( char *fname ) Debug( LDAP_DEBUG_ANY, "%s: line %d: missing filename in \"loadmodule \" line\n", fname, lineno, 0 ); - exit( 1 ); + exit( EXIT_FAILURE ); } - if (!load_module(cargv[1], cargc - 2, (cargc > 2) ? cargv + 2 : NULL)) { + if (load_module(cargv[1], cargc - 2, (cargc > 2) ? cargv + 2 : NULL)) { Debug( LDAP_DEBUG_ANY, "%s: line %d: failed to load or initialize module %s\n", fname, lineno, cargv[1]); - exit( 1 ); + exit( EXIT_FAILURE ); } #endif /*SLAPD_MODULES*/ @@ -631,6 +712,12 @@ read_config( char *fname ) cargv[1] ); if ( rc ) return rc; + } else if ( !strcasecmp( cargv[0], "TLSVerifyClient" ) ) { + rc = ldap_pvt_tls_set_option( NULL, + LDAP_OPT_X_TLS_REQUIRE_CERT, + cargv[1] ); + if ( rc ) + return rc; #endif