]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
Revert prev commit, different fix
[openldap] / servers / slapd / config.c
index 3f650729c18f651d6ab6c745b325c68fb1efc695..93fdf1dc5f4ec645f666a75045283db34001fef2 100644 (file)
@@ -660,23 +660,29 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft)
        int rc;
        struct stat s;
 
-       if ( cf ) {
-               c = cf;
-       } else {
-               c = ch_calloc( 1, sizeof( ConfigArgs ) );
+       c = ch_calloc( 1, sizeof( ConfigArgs ) );
+       if ( c == NULL ) {
+               return 1;
+       }
 
-               c->valx = -1;
-               c->fname = fname;
-               init_config_argv( c );
+       if ( depth ) {
+               memcpy( c, cf, sizeof( ConfigArgs ) );
+       } else {
+               c->depth = depth; /* XXX */
+               c->bi = NULL;
+               c->be = NULL;
        }
 
+       c->valx = -1;
+       c->fname = fname;
+       init_config_argv( c );
+
        if ( stat( fname, &s ) != 0 ) {
                ldap_syslog = 1;
                Debug(LDAP_DEBUG_ANY,
                    "could not stat config file \"%s\": %s (%d)\n",
                    fname, strerror(errno), errno);
-               if ( !cf )
-                       ch_free( c );
+               ch_free( c );
                return(1);
        }
 
@@ -685,8 +691,7 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft)
                Debug(LDAP_DEBUG_ANY,
                    "regular file expected, got \"%s\"\n",
                    fname, 0, 0 );
-               if ( !cf )
-                       ch_free( c );
+               ch_free( c );
                return(1);
        }
 
@@ -696,8 +701,7 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft)
                Debug(LDAP_DEBUG_ANY,
                    "could not open config file \"%s\": %s (%d)\n",
                    fname, strerror(errno), errno);
-               if ( !cf )
-                       ch_free( c );
+               ch_free( c );
                return(1);
        }
 
@@ -839,12 +843,14 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft)
        rc = 0;
 
 done:
-       fclose(fp);
-       if ( !cf ) {
-               ch_free(c->tline);
-               ch_free(c->argv);
-               ch_free(c);
+       if ( cf ) {
+               cf->be = c->be;
+               cf->bi = c->bi;
        }
+       ch_free(c->tline);
+       fclose(fp);
+       ch_free(c->argv);
+       ch_free(c);
        return(rc);
 }