From: Quanah Gibson-Mount Date: Tue, 4 Jan 2011 23:33:50 +0000 (+0000) Subject: ITS#6778 X-Git-Tag: OPENLDAP_REL_ENG_2_4_24~113 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=4e9e4814fb70c817c8a4a3120b77e66338039f89;p=openldap ITS#6778 --- diff --git a/CHANGES b/CHANGES index f921e93e06..c65013ff35 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ OpenLDAP 2.4.24 Engineering Added contrib/kinit for kerberos tickets Added contrib/noopsrch for entry counting (ITS#6598) Fixed client tools control logging (ITS#6775) + Fixed client tools one time leak (ITS#6778) Fixed liblber to not close invalid sockets (ITS#6585) Fixed liblber unmatched brace handling (ITS#6764) Fixed liblber error setting (ITS#6732) diff --git a/clients/tools/common.c b/clients/tools/common.c index 5eef356604..499f568ad7 100644 --- a/clients/tools/common.c +++ b/clients/tools/common.c @@ -253,20 +253,47 @@ tool_destroy( void ) if ( pr_cookie.bv_val != NULL ) { ber_memfree( pr_cookie.bv_val ); - pr_cookie.bv_val = NULL; - pr_cookie.bv_len = 0; + BER_BVZERO( &pr_cookie ); } if ( binddn != NULL ) { ber_memfree( binddn ); + binddn = NULL; } if ( passwd.bv_val != NULL ) { ber_memfree( passwd.bv_val ); + BER_BVZERO( &passwd ); } if ( infile != NULL ) { ber_memfree( infile ); + infile = NULL; + } + + if ( assertion ) { + ber_memfree( assertion ); + assertion = NULL; + } + + if ( authzid ) { + ber_memfree( authzid ); + authzid = NULL; + } + + if ( proxydn ) { + ber_memfree( proxydn ); + proxydn = NULL; + } + + if ( preread_attrs ) { + ber_memfree( preread_attrs ); + preread_attrs = NULL; + } + + if ( postread_attrs ) { + ber_memfree( postread_attrs ); + postread_attrs = NULL; } } @@ -427,7 +454,7 @@ tool_args( int argc, char **argv ) assertctl = 1 + crit; assert( assertion == NULL ); - assertion = cvalue; + assertion = ber_strdup( cvalue ); } else if ( strcasecmp( control, "authzid" ) == 0 ) { if( authzid != NULL ) { @@ -450,7 +477,7 @@ tool_args( int argc, char **argv ) } assert( authzid == NULL ); - authzid = cvalue; + authzid = ber_strdup( cvalue ); #ifdef LDAP_CONTROL_OBSOLETE_PROXY_AUTHZ } else if ( strcasecmp( control, "proxydn" ) == 0 ) { @@ -472,7 +499,7 @@ tool_args( int argc, char **argv ) } assert( proxydn == NULL ); - proxydn = cvalue; + proxydn = ber_strdup( cvalue ); #endif /* LDAP_CONTROL_OBSOLETE_PROXY_AUTHZ */ } else if ( ( strcasecmp( control, "relax" ) == 0 ) || @@ -542,7 +569,7 @@ tool_args( int argc, char **argv ) } preread = 1 + crit; - preread_attrs = cvalue; + preread_attrs = ber_strdup( cvalue ); } else if ( strcasecmp( control, "postread" ) == 0 ) { if( postread ) { @@ -551,7 +578,7 @@ tool_args( int argc, char **argv ) } postread = 1 + crit; - postread_attrs = cvalue; + postread_attrs = ber_strdup( cvalue ); #ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR } else if ( strcasecmp( control, "chaining" ) == 0 ) { @@ -642,6 +669,8 @@ tool_args( int argc, char **argv ) } unknown_ctrls = tmpctrls; ctrl.ldctl_oid = control; + /* don't free it */ + control = NULL; ctrl.ldctl_value.bv_val = NULL; ctrl.ldctl_value.bv_len = 0; ctrl.ldctl_iscritical = crit; @@ -676,6 +705,10 @@ tool_args( int argc, char **argv ) control ); usage(); } + if ( control ) { + ber_memfree( control ); + control = NULL; + } break; case 'f': /* read from file */ if( infile != NULL ) {