X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fconfig.c;h=47b081a2860b1d172716fb1f8f403ef79f7824fb;hb=740f1b422edc48c9eeed8346c45872a63b683370;hp=e4d67fedde2e219a18faf43cd42232ae397fc327;hpb=68d561a97b9f634f033eae0f2d9c7453ea02c4c7;p=openldap diff --git a/servers/slapd/config.c b/servers/slapd/config.c index e4d67fedde..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,6 +223,14 @@ 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 ); @@ -227,6 +240,60 @@ read_config( char *fname ) 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; @@ -406,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 ); } @@ -416,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 ); } @@ -592,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*/