]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
Add LDAPsubentry (without OID).
[openldap] / servers / slapd / config.c
index e4d67fedde2e219a18faf43cd42232ae397fc327..47b081a2860b1d172716fb1f8f403ef79f7824fb 100644 (file)
@@ -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 <dn>\" 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 <alias> <aliased_dn>\" line\n",
+                                       fname, lineno, 0 );
+                               return( 1 );
+                       } else if ( cargc < 3 ) {
+                               Debug( LDAP_DEBUG_ANY,
+"%s: line %d: missing aliased_dn in \"suffixAlias <alias> <aliased_dn>\" 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 <filename>\" 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*/