From 19c97a12de188ea40f25e38fb2f6a48c09fcd92f Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Sat, 10 Aug 2002 00:12:58 +0000 Subject: [PATCH] Fix config mem leak --- servers/slapd/config.c | 12 ++++++++---- servers/slapd/tools/slapcommon.c | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/servers/slapd/config.c b/servers/slapd/config.c index 5362cbdb9e..0046551709 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -75,7 +75,7 @@ static char *strtok_quote(char *line, char *sep); static int load_ucdata(char *path); int -read_config( const char *fname ) +read_config( const char *fname, int depth ) { FILE *fp; char *line, *savefname, *saveline; @@ -90,8 +90,10 @@ read_config( const char *fname ) vals[1].bv_val = NULL; - cargv = ch_calloc( ARGS_STEP + 1, sizeof(*cargv) ); - cargv_size = ARGS_STEP + 1; + if ( depth == 0 ) { + cargv = ch_calloc( ARGS_STEP + 1, sizeof(*cargv) ); + cargv_size = ARGS_STEP + 1; + } if ( (fp = fopen( fname, "r" )) == NULL ) { ldap_syslog = 1; @@ -2012,7 +2014,7 @@ read_config( const char *fname ) savefname = ch_strdup( cargv[1] ); savelineno = lineno; - if ( read_config( savefname ) != 0 ) { + if ( read_config( savefname, depth+1 ) != 0 ) { return( 1 ); } @@ -2257,6 +2259,8 @@ read_config( const char *fname ) } fclose( fp ); + if ( depth == 0 ) ch_free( cargv ); + if ( load_ucdata( NULL ) < 0 ) return 1; return( 0 ); } diff --git a/servers/slapd/tools/slapcommon.c b/servers/slapd/tools/slapcommon.c index abe5b7abeb..27c6712724 100644 --- a/servers/slapd/tools/slapcommon.c +++ b/servers/slapd/tools/slapcommon.c @@ -195,7 +195,7 @@ slap_tool_init( exit( EXIT_FAILURE ); } - rc = read_config( conffile ); + rc = read_config( conffile, 0 ); if ( rc != 0 ) { fprintf( stderr, "%s: bad configuration file!\n", progname ); -- 2.39.5