From: Howard Chu Date: Fri, 14 Dec 2007 02:48:11 +0000 (+0000) Subject: Revert prev commit, different fix X-Git-Tag: OPENLDAP_REL_ENG_2_4_9~20^2~319 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=3d632e79d83d38af0b1706d2f7d73e675bb453e4;hp=e9ab15ba872c50fc1a811a847d4bc6435f757fe8;p=openldap Revert prev commit, different fix --- diff --git a/servers/slapd/config.c b/servers/slapd/config.c index 3f650729c1..93fdf1dc5f 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -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); }