]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
Another concurrency typo.
[openldap] / servers / slapd / config.c
index 2b13bdca59c4914270ffb119ea8489011b06a763..06d5c4f3c43ba616dd19ea10c5f702024a6c330e 100644 (file)
@@ -24,14 +24,25 @@ char                *replogfile;
 int            global_lastmod;
 char           *ldap_srvtab = "";
 
+char   *slapd_pid_file  = NULL;
+char   *slapd_args_file = NULL;
+
 static char    *fp_getline(FILE *fp, int *lineno);
 static void    fp_getline_init(int *lineno);
 static void    fp_parse_line(char *line, int *argcp, char **argv);
 
 static char    *strtok_quote(char *line, char *sep);
 
+/*  the old interface for tools  */
 void
 read_config( char *fname, Backend **bep, FILE *pfp )
+{
+       read_config_env( fname, bep, pfp, 0 );
+}
+
+/*  the new interface for slapd  */
+void
+read_config_env( char *fname, Backend **bep, FILE *pfp, int startup )
 {
        FILE    *fp;
        char    *line, *savefname;
@@ -83,6 +94,28 @@ read_config( char *fname, Backend **bep, FILE *pfp )
                /* assign a default depth limit for alias deref */
                be->be_maxDerefDepth = SLAPD_DEFAULT_MAXDEREFDEPTH; 
 
+               /* get pid file name */
+               } else if ( strcasecmp( cargv[0], "pidfile" ) == 0 ) {
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+           "%s: line %d: missing file name in \"pidfile <file>\" line\n",
+                                   fname, lineno, 0 );
+                               exit( 1 );
+                       }
+
+                       slapd_pid_file = ch_strdup( cargv[1] );
+
+               /* get args file name */
+               } else if ( strcasecmp( cargv[0], "argsfile" ) == 0 ) {
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+           "%s: line %d: missing file name in \"argsfile <file>\" line\n",
+                                   fname, lineno, 0 );
+                               exit( 1 );
+                       }
+
+                       slapd_args_file = ch_strdup( cargv[1] );
+
                /* set size limit */
                } else if ( strcasecmp( cargv[0], "sizelimit" ) == 0 ) {
                        if ( cargc < 2 ) {
@@ -129,7 +162,7 @@ read_config( char *fname, Backend **bep, FILE *pfp )
                                    fname, lineno, 0 );
                        } else {
                                char *dn = ch_strdup( cargv[1] );
-                               (void) dn_normalize( dn );
+                               (void) dn_normalize_case( dn );
                                charray_add( &be->be_suffix, dn );
                        }
 
@@ -155,13 +188,28 @@ read_config( char *fname, Backend **bep, FILE *pfp )
 "%s: line %d: suffixAlias line must appear inside a database definition (ignored)\n",
                                     fname, lineno, 0 );
                         } else {
-                                char *dn = ch_strdup( cargv[1] );
-                                (void) dn_normalize( dn );
-                                charray_add( &be->be_suffixAlias, dn );
+                                char *alias, *aliased_dn;
+
+                                                               alias = ch_strdup( cargv[1] );
+                                (void) dn_normalize( alias );
+
+                                aliased_dn = ch_strdup( cargv[2] );
+                                (void) dn_normalize( aliased_dn );
 
-                                dn = ch_strdup( cargv[2] );
-                                (void) dn_normalize( dn );
-                                charray_add( &be->be_suffixAlias, dn );
+
+                                                               if ( strcasecmp( alias, aliased_dn) == 0 ) {
+                                       Debug( LDAP_DEBUG_ANY,
+"%s: line %d: suffixAlias %s is not different from aliased dn (ignored)\n",
+                                    fname, lineno, alias );
+                                                               } else {
+                                       (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 */
@@ -242,7 +290,7 @@ read_config( char *fname, Backend **bep, FILE *pfp )
                                    fname, lineno, 0 );
                                exit( 1 );
                        }
-                       default_referral = (char *) malloc( strlen( cargv[1] )
+                       default_referral = (char *) ch_malloc( strlen( cargv[1] )
                            + sizeof("Referral:\n") + 1 );
                        strcpy( default_referral, "Referral:\n" );
                        strcat( default_referral, cargv[1] );
@@ -431,6 +479,8 @@ read_config( char *fname, Backend **bep, FILE *pfp )
                }
        }
        fclose( fp );
+
+       if ( startup ) be_startup();
 }
 
 static void