diff options
author | Rich Megginson <rmeggins@redhat.com> | 2005-03-24 17:12:06 +0000 |
---|---|---|
committer | Rich Megginson <rmeggins@redhat.com> | 2005-03-24 17:12:06 +0000 |
commit | b6bff935c117b5042cd2a9809218607c01bea965 (patch) | |
tree | ff24a822b63d879254a679bad694b09d2454bc67 /ldap | |
parent | d80d9cceedbe18c97d240fca0ee6c20d01253423 (diff) | |
download | ds-b6bff935c117b5042cd2a9809218607c01bea965.tar.gz ds-b6bff935c117b5042cd2a9809218607c01bea965.tar.xz ds-b6bff935c117b5042cd2a9809218607c01bea965.zip |
Bug(s) fixed: 152030
Bug Description: Various valgrind reported problems. Mostly not serious, but a few which could cause bad leaks in certain situations.
Reviewed by: Rob and David (Thanks!)
Fix Description: Mostly added frees where needed, or moved things around to make sure the proper free was called. I also fixed the formatting/spacing.
Platforms tested: RHEL3
Flag Day: no
Doc impact: No.
QA impact: should be covered by regular nightly and manual testing
New Tests integrated into TET: none
Diffstat (limited to 'ldap')
-rw-r--r-- | ldap/servers/plugins/distrib/distrib.c | 2 | ||||
-rw-r--r-- | ldap/servers/plugins/replication/repl5_mtnode_ext.c | 1 | ||||
-rw-r--r-- | ldap/servers/plugins/syntaxes/value.c | 2 | ||||
-rw-r--r-- | ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c | 8 | ||||
-rw-r--r-- | ldap/servers/slapd/back-ldbm/monitor.c | 21 | ||||
-rw-r--r-- | ldap/servers/slapd/back-ldbm/vlv.c | 7 | ||||
-rw-r--r-- | ldap/servers/slapd/config.c | 3 | ||||
-rw-r--r-- | ldap/servers/slapd/daemon.c | 32 | ||||
-rw-r--r-- | ldap/servers/slapd/plugin.c | 14 | ||||
-rw-r--r-- | ldap/servers/slapd/pw.c | 5 | ||||
-rw-r--r-- | ldap/servers/slapd/pw_mgmt.c | 4 | ||||
-rw-r--r-- | ldap/servers/slapd/ssl.c | 16 |
12 files changed, 74 insertions, 41 deletions
diff --git a/ldap/servers/plugins/distrib/distrib.c b/ldap/servers/plugins/distrib/distrib.c index 8b40a06a..6baf1cea 100644 --- a/ldap/servers/plugins/distrib/distrib.c +++ b/ldap/servers/plugins/distrib/distrib.c @@ -74,6 +74,7 @@ int alpha_distribution(Slapi_PBlock *pb, Slapi_DN * target_dn, slapi_sdn_get_rdn(target_dn, rdn); slapi_rdn_get_first(rdn, &rdn_type, &rdn_value); c = rdn_value[0]; + slapi_rdn_free(&rdn); if (!(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) )) @@ -81,7 +82,6 @@ int alpha_distribution(Slapi_PBlock *pb, Slapi_DN * target_dn, return 0; } - slapi_rdn_free(&rdn); /* for entries with rdn starting with alphabetic characters * use the formula : (c - 'A') * be_count/26 diff --git a/ldap/servers/plugins/replication/repl5_mtnode_ext.c b/ldap/servers/plugins/replication/repl5_mtnode_ext.c index b6c01d6e..ca39dbd9 100644 --- a/ldap/servers/plugins/replication/repl5_mtnode_ext.c +++ b/ldap/servers/plugins/replication/repl5_mtnode_ext.c @@ -121,6 +121,7 @@ multimaster_mtnode_extension_destructor (void* ext, void *object, void *parent) object_release (mtnode_ext->replica); mtnode_ext->replica = NULL; } + slapi_ch_free((void **)&ext); } } diff --git a/ldap/servers/plugins/syntaxes/value.c b/ldap/servers/plugins/syntaxes/value.c index 4c201fd2..81ac113b 100644 --- a/ldap/servers/plugins/syntaxes/value.c +++ b/ldap/servers/plugins/syntaxes/value.c @@ -111,7 +111,7 @@ value_normalize( np = ldap_utf8next(s); if (np == NULL || np == s) break; sz = np - s; - memcpy(d,s,sz); + memmove(d,s,sz); d += sz; s += sz; } diff --git a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c index 01673b9e..4190fbf1 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c @@ -166,6 +166,8 @@ attrcrypt_keymgmt_store_key(ldbm_instance *li, attrcrypt_cipher_state *acs, SECK key_as_berval.bv_val = wrapped_symmetric_key.data; key_as_berval.bv_len = wrapped_symmetric_key.len; key_value = slapi_value_new_berval(&key_as_berval); + /* key_value is now a copy of key_as_berval - free wrapped_symmetric_key */ + slapi_ch_free(&wrapped_symmetric_key.data); slapi_entry_add_value(e, KEY_ATTRIBUTE_NAME, key_value); slapi_value_free(&key_value); /* Store the entry */ @@ -280,6 +282,9 @@ attrcrypt_fetch_public_key(SECKEYPublicKey **public_key) }else { ret = -1; } + if (cert_name != default_cert_name) { + slapi_ch_free_string(&cert_name); + } LDAPDebug(LDAP_DEBUG_TRACE,"<- attrcrypt_fetch_public_key\n", 0, 0, 0); return ret; } @@ -322,6 +327,9 @@ attrcrypt_fetch_private_key(SECKEYPrivateKey **private_key) } else { ret = -1; } + if (cert_name != default_cert_name) { + slapi_ch_free_string(&cert_name); + } LDAPDebug(LDAP_DEBUG_TRACE,"<- attrcrypt_fetch_private_key\n", 0, 0, 0); return ret; } diff --git a/ldap/servers/slapd/back-ldbm/monitor.c b/ldap/servers/slapd/back-ldbm/monitor.c index 81c86f12..e6583a81 100644 --- a/ldap/servers/slapd/back-ldbm/monitor.c +++ b/ldap/servers/slapd/back-ldbm/monitor.c @@ -40,6 +40,7 @@ int ldbm_back_monitor_instance_search(Slapi_PBlock *pb, Slapi_Entry *e, /* end of NPCTE fix for bugid 544365 */ DB_MPOOL_FSTAT **mpfstat = NULL; int i,j; + char *absolute_pathname = NULL; /* Get the LDBM Info structure for the ldbm backend */ if (inst->inst_be->be_database == NULL) { @@ -109,7 +110,6 @@ int ldbm_back_monitor_instance_search(Slapi_PBlock *pb, Slapi_Entry *e, #ifdef _WIN32 int fpos = 0; #endif - char *absolute_pathname = NULL; /* only print out stats on files used by this instance */ if (strlen(mpfstat[i]->file_name) < strlen(inst->inst_dir_name)) @@ -118,13 +118,11 @@ int ldbm_back_monitor_instance_search(Slapi_PBlock *pb, Slapi_Entry *e, strlen(inst->inst_dir_name)) != 0) continue; - /* Since the filenames are now relative, we need to construct an absolute version - * for the purpose of stat() etc below... - */ - if (absolute_pathname) { - slapi_ch_free_string(&absolute_pathname); - } - absolute_pathname = slapi_ch_smprintf("%s%c%s" , inst->inst_parent_dir_name, get_sep(inst->inst_parent_dir_name), mpfstat[i]->file_name ); + /* Since the filenames are now relative, we need to construct an absolute version + * for the purpose of stat() etc below... + */ + slapi_ch_free_string(&absolute_pathname); + absolute_pathname = slapi_ch_smprintf("%s%c%s" , inst->inst_parent_dir_name, get_sep(inst->inst_parent_dir_name), mpfstat[i]->file_name ); /* NPCTE fix for bugid 544365, esc 0. <P.R> <04-Jul-2001> */ /* Hide statistic of deleted files (mainly indexes) */ @@ -168,12 +166,11 @@ int ldbm_back_monitor_instance_search(Slapi_PBlock *pb, Slapi_Entry *e, sprintf(buf, "%u", mpfstat[i]->st_page_out); MSETF("dbFilePageOut-%d", i); - if (absolute_pathname) { - slapi_ch_free_string(&absolute_pathname); - } - + slapi_ch_free_string(&absolute_pathname); } + slapi_ch_free_string(&absolute_pathname); + #if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR + DB_VERSION_PATCH <= 3204 /* In DB 3.2.4 and earlier, we need to free each element */ for (i = 0; mpfstat[i]; i++) diff --git a/ldap/servers/slapd/back-ldbm/vlv.c b/ldap/servers/slapd/back-ldbm/vlv.c index ff3aa79a..32719817 100644 --- a/ldap/servers/slapd/back-ldbm/vlv.c +++ b/ldap/servers/slapd/back-ldbm/vlv.c @@ -1455,6 +1455,8 @@ vlv_trim_candidates_byvalue(backend *be, const IDList *candidates, const sort_sp */ Slapi_Value **csn_value = valueset_get_valuearray(&attr->a_present_values); struct berval **entry_value = /* xxxPINAKI needs modification attr->a_vals */NULL; + PRBool needFree = PR_FALSE; + if(sort_control->mr_pb!=NULL) { struct berval **tmp_entry_value = NULL; @@ -1466,6 +1468,7 @@ vlv_trim_candidates_byvalue(backend *be, const IDList *candidates, const sort_sp else { valuearray_get_bervalarray(csn_value,&entry_value); + needFree = PR_TRUE; /* entry_value is a copy */ } if(!sort_control->order) { @@ -1475,6 +1478,10 @@ vlv_trim_candidates_byvalue(backend *be, const IDList *candidates, const sort_sp { match= sort_attr_compare((struct berval**)typedown_value, entry_value, compare_fn); } + if (needFree) { + ber_bvecfree((struct berval**)entry_value); + entry_value = NULL; + } } else { diff --git a/ldap/servers/slapd/config.c b/ldap/servers/slapd/config.c index 0eabc408..29b5af51 100644 --- a/ldap/servers/slapd/config.c +++ b/ldap/servers/slapd/config.c @@ -304,6 +304,7 @@ slapd_bootstrap_config(const char *configdir) { LDAPDebug(LDAP_DEBUG_ANY, "The plugin entry [%s] in the configfile %s was invalid\n", slapi_entry_get_dn(e), configfile, 0); rc = 0; + slapi_sdn_done(&plug_dn); goto bail; } } @@ -324,6 +325,7 @@ slapd_bootstrap_config(const char *configdir) { LDAPDebug(LDAP_DEBUG_ANY, "The plugin entry [%s] in the configfile %s was invalid\n", slapi_entry_get_dn(e), configfile, 0); rc = 0; + slapi_sdn_done(&plug_dn); goto bail; } } @@ -454,6 +456,7 @@ slapd_bootstrap_config(const char *configdir) } bail: + slapi_ch_free((void **)&buf); return rc; } diff --git a/ldap/servers/slapd/daemon.c b/ldap/servers/slapd/daemon.c index 66088cbc..4e46095a 100644 --- a/ldap/servers/slapd/daemon.c +++ b/ldap/servers/slapd/daemon.c @@ -1834,14 +1834,15 @@ handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *pr_acceptfd, i *the commented code that follows each of the next two *blocks of code */ - struct lber_x_ext_io_fns *func_pointers = malloc(LBER_X_EXTIO_FNS_SIZE); - func_pointers->lbextiofn_size = LBER_X_EXTIO_FNS_SIZE; - func_pointers->lbextiofn_read = secure_read_function; - func_pointers->lbextiofn_write = secure_write_function; - func_pointers->lbextiofn_writev = NULL; - func_pointers->lbextiofn_socket_arg = (struct lextiof_socket_private *) pr_clonefd; + struct lber_x_ext_io_fns func_pointers; + memset(&func_pointers, 0, sizeof(func_pointers)); + func_pointers.lbextiofn_size = LBER_X_EXTIO_FNS_SIZE; + func_pointers.lbextiofn_read = secure_read_function; + func_pointers.lbextiofn_write = secure_write_function; + func_pointers.lbextiofn_writev = NULL; + func_pointers.lbextiofn_socket_arg = (struct lextiof_socket_private *) pr_clonefd; ber_sockbuf_set_option( conn->c_sb, - LBER_SOCKBUF_OPT_EXT_IO_FNS, func_pointers); + LBER_SOCKBUF_OPT_EXT_IO_FNS, &func_pointers); /* changed here by Cheston ber_sockbuf_set_option( conn->c_sb, @@ -1850,18 +1851,19 @@ handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *pr_acceptfd, i LBER_SOCKBUF_OPT_WRITE_FN, (void *)secure_write_function ); */ } else { - struct lber_x_ext_io_fns *func_pointers = malloc(LBER_X_EXTIO_FNS_SIZE); - func_pointers->lbextiofn_size = LBER_X_EXTIO_FNS_SIZE; - func_pointers->lbextiofn_read = read_function; - func_pointers->lbextiofn_write = write_function; - func_pointers->lbextiofn_writev = NULL; + struct lber_x_ext_io_fns func_pointers; + memset(&func_pointers, 0, sizeof(func_pointers)); + func_pointers.lbextiofn_size = LBER_X_EXTIO_FNS_SIZE; + func_pointers.lbextiofn_read = read_function; + func_pointers.lbextiofn_write = write_function; + func_pointers.lbextiofn_writev = NULL; #ifdef _WIN32 - func_pointers->lbextiofn_socket_arg = (struct lextiof_socket_private *) ns; + func_pointers.lbextiofn_socket_arg = (struct lextiof_socket_private *) ns; #else - func_pointers->lbextiofn_socket_arg = (struct lextiof_socket_private *) pr_clonefd; + func_pointers.lbextiofn_socket_arg = (struct lextiof_socket_private *) pr_clonefd; #endif ber_sockbuf_set_option( conn->c_sb, - LBER_SOCKBUF_OPT_EXT_IO_FNS, func_pointers); + LBER_SOCKBUF_OPT_EXT_IO_FNS, &func_pointers); /* ber_sockbuf_set_option( conn->c_sb, LBER_SOCKBUF_OPT_READ_FN, (void *)read_function ); diff --git a/ldap/servers/slapd/plugin.c b/ldap/servers/slapd/plugin.c index 42ded667..bd7c92ba 100644 --- a/ldap/servers/slapd/plugin.c +++ b/ldap/servers/slapd/plugin.c @@ -883,6 +883,11 @@ plugin_dependency_startall(int argc, char** argv, char *errmsg, int operation) * create an operation and include that in the pblock as well, * because these two items are stored in the operation parameters. */ + /* WARNING: memory leak here - op is only freed by a pblock_done, + and this only happens below if the plugin is enabled - a short + circuit goto bail may also cause a leak - however, since this + only happens a few times at startup, this is not a very serious + leak - just after the call to plugin_call_one */ Operation *op = internal_operation_new(SLAPI_OPERATION_ADD, 0); slapi_pblock_set(&(config[plugin_index].pb), SLAPI_OPERATION, op); slapi_pblock_set(&(config[plugin_index].pb), SLAPI_TARGET_DN, @@ -1164,16 +1169,16 @@ bail: if(config) { - /* index = 0; while(index < total_plugins) { +/* if(config[index].depends_named_list) { slapi_ch_free((void**)&(config[index].depends_named_list)); } - +*/ if(config[index].depends_type_list) { i = 0; @@ -1187,13 +1192,12 @@ bail: slapi_ch_free((void**)&(config[index].depends_type_list)); } - +/* slapi_ch_free((void**)&(config[index].name)); slapi_ch_free((void**)&(config[index].type)); - +*/ index++; } - */ slapi_ch_free((void**)&config); } diff --git a/ldap/servers/slapd/pw.c b/ldap/servers/slapd/pw.c index 76e6c5d6..a664f008 100644 --- a/ldap/servers/slapd/pw.c +++ b/ldap/servers/slapd/pw.c @@ -1343,7 +1343,12 @@ new_passwdPolicy(Slapi_PBlock *pb, char *dn) } } /* end of for() loop */ + if (pw_entry) { + slapi_entry_free(pw_entry); + } return pwdpolicy; + } else if ( e ) { + slapi_entry_free( e ); } } } diff --git a/ldap/servers/slapd/pw_mgmt.c b/ldap/servers/slapd/pw_mgmt.c index def09c02..ee102159 100644 --- a/ldap/servers/slapd/pw_mgmt.c +++ b/ldap/servers/slapd/pw_mgmt.c @@ -121,7 +121,8 @@ skip: pw_exp_date != NOT_FIRST_TIME && (diff_t = difftime ( pw_exp_date, parse_genTime ( cur_time_str ))) <= 0 ) { - + + slapi_ch_free_string(&cur_time_str); /* only need this above */ /* password has expired. Check the value of * passwordGraceUserTime and compare it * against the value of passwordGraceLimit */ @@ -175,7 +176,6 @@ skip: /* Apply current modifications */ pw_apply_mods(dn, &smods); slapi_mods_done(&smods); - slapi_ch_free((void **) &cur_time_str ); delete_passwdPolicy(&pwpolicy); return (-1); } diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c index 93a7ae94..5a9445b4 100644 --- a/ldap/servers/slapd/ssl.c +++ b/ldap/servers/slapd/ssl.c @@ -700,6 +700,7 @@ int slapd_ssl_init2(PRFileDesc **fd, int startTLS) SECKEYPrivateKey *key = NULL; char errorbuf[BUFSIZ]; char *val = NULL; + char *default_val = NULL; int nFamilies = 0; SECStatus sslStatus; int slapd_SSLclientAuth; @@ -888,8 +889,8 @@ int slapd_ssl_init2(PRFileDesc **fd, int startTLS) CERT_DestroyCertificate(cert); cert = NULL; } + slapi_ch_free((void **) &personality); if (SECSuccess != rv) { - slapi_ch_free((void **) &personality); freeConfigEntry( &e ); continue; } @@ -973,18 +974,19 @@ int slapd_ssl_init2(PRFileDesc **fd, int startTLS) configDN, errorCode, slapd_pr_strerror(errorCode)); switch( SLAPD_SSLCLIENTAUTH_DEFAULT ) { case SLAPD_SSLCLIENTAUTH_OFF: - val = "off"; + default_val = "off"; break; case SLAPD_SSLCLIENTAUTH_ALLOWED: - val = "allowed"; + default_val = "allowed"; break; case SLAPD_SSLCLIENTAUTH_REQUIRED: - val = "required"; + default_val = "required"; break; default: - val = "allowed"; + default_val = "allowed"; break; } + val = default_val; } if( config_set_SSLclientAuth( "nssslclientauth", val, errorbuf, CONFIG_APPLY ) != LDAP_SUCCESS ) { @@ -995,6 +997,9 @@ int slapd_ssl_init2(PRFileDesc **fd, int startTLS) "and \"required\". (" SLAPI_COMPONENT_NAME_NSPR " error %d - %s)", val, errorbuf, errorCode, slapd_pr_strerror(errorCode)); } + if (val != default_val) { + slapi_ch_free_string(&val); + } freeConfigEntry( &e ); @@ -1386,6 +1391,7 @@ char* slapd_get_tmp_dir() } PR_snprintf(tmp,sizeof(tmp),"%s/tmp",instanceDir); + slapi_ch_free_string(&instanceDir); #if defined( XP_WIN32 ) for(ilen=0;ilen < strlen(tmp); ilen++) |