Author: jra Date: 2007-03-01 01:17:36 +0000 (Thu, 01 Mar 2007) New Revision: 21608
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21608 Log: Fix a couple of memleaks in error code paths before Coverity finds them :-) Jeremy. Modified: branches/SAMBA_3_0/source/libads/ldap.c branches/SAMBA_3_0/source/passdb/pdb_ldap.c branches/SAMBA_3_0/source/utils/net_ads.c branches/SAMBA_3_0_25/source/libads/ldap.c branches/SAMBA_3_0_25/source/passdb/pdb_ldap.c branches/SAMBA_3_0_25/source/utils/net_ads.c Changeset: Modified: branches/SAMBA_3_0/source/libads/ldap.c =================================================================== --- branches/SAMBA_3_0/source/libads/ldap.c 2007-03-01 00:50:56 UTC (rev 21607) +++ branches/SAMBA_3_0/source/libads/ldap.c 2007-03-01 01:17:36 UTC (rev 21608) @@ -1635,7 +1635,7 @@ char *samAccountName, *controlstr; TALLOC_CTX *ctx; ADS_MODLIST mods; - char *machine_escaped; + char *machine_escaped = NULL; char *new_dn; const char *objectClass[] = {"top", "person", "organizationalPerson", "user", "computer", NULL}; @@ -1681,6 +1681,7 @@ ret = ads_gen_add(ads, new_dn, mods); done: + SAFE_FREE(machine_escaped); ads_msgfree(ads, res); talloc_destroy(ctx); Modified: branches/SAMBA_3_0/source/passdb/pdb_ldap.c =================================================================== --- branches/SAMBA_3_0/source/passdb/pdb_ldap.c 2007-03-01 00:50:56 UTC (rev 21607) +++ branches/SAMBA_3_0/source/passdb/pdb_ldap.c 2007-03-01 01:17:36 UTC (rev 21608) @@ -2436,6 +2436,7 @@ filter = talloc_asprintf_append(filter, "(uid=%s)", escape_memberuid); if (filter == NULL) { + SAFE_FREE(escape_memberuid); ret = NT_STATUS_NO_MEMORY; goto done; } Modified: branches/SAMBA_3_0/source/utils/net_ads.c =================================================================== --- branches/SAMBA_3_0/source/utils/net_ads.c 2007-03-01 00:50:56 UTC (rev 21607) +++ branches/SAMBA_3_0/source/utils/net_ads.c 2007-03-01 01:17:36 UTC (rev 21608) @@ -1819,7 +1819,7 @@ TALLOC_CTX *mem_ctx = talloc_init("net_ads_printer_publish"); ADS_MODLIST mods = ads_init_mods(mem_ctx); char *prt_dn, *srv_dn, **srv_cn; - char *srv_cn_escaped, *printername_escaped; + char *srv_cn_escaped = NULL, *printername_escaped = NULL; LDAPMessage *res = NULL; if (!ADS_ERR_OK(ads_startup(True, &ads))) { @@ -1874,6 +1874,8 @@ srv_cn_escaped = escape_rdn_val_string_alloc(srv_cn[0]); printername_escaped = escape_rdn_val_string_alloc(printername); if (!srv_cn_escaped || !printername_escaped) { + SAFE_FREE(srv_cn_escaped); + SAFE_FREE(printername_escaped); d_fprintf(stderr, "Internal error, out of memory!"); ads_destroy(&ads); return -1; @@ -1881,16 +1883,21 @@ asprintf(&prt_dn, "cn=%s-%s,%s", srv_cn_escaped, printername_escaped, srv_dn); + SAFE_FREE(srv_cn_escaped); + SAFE_FREE(printername_escaped); + pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SPOOLSS, &nt_status); if (!pipe_hnd) { d_fprintf(stderr, "Unable to open a connnection to the spoolss pipe on %s\n", servername); + SAFE_FREE(prt_dn); ads_destroy(&ads); return -1; } if (!W_ERROR_IS_OK(get_remote_printer_publishing_data(pipe_hnd, mem_ctx, &mods, printername))) { + SAFE_FREE(prt_dn); ads_destroy(&ads); return -1; } @@ -1898,11 +1905,13 @@ rc = ads_add_printer_entry(ads, prt_dn, mem_ctx, &mods); if (!ADS_ERR_OK(rc)) { d_fprintf(stderr, "ads_publish_printer: %s\n", ads_errstr(rc)); + SAFE_FREE(prt_dn); ads_destroy(&ads); return -1; } d_printf("published printer\n"); + SAFE_FREE(prt_dn); ads_destroy(&ads); return 0; Modified: branches/SAMBA_3_0_25/source/libads/ldap.c =================================================================== --- branches/SAMBA_3_0_25/source/libads/ldap.c 2007-03-01 00:50:56 UTC (rev 21607) +++ branches/SAMBA_3_0_25/source/libads/ldap.c 2007-03-01 01:17:36 UTC (rev 21608) @@ -1635,7 +1635,7 @@ char *samAccountName, *controlstr; TALLOC_CTX *ctx; ADS_MODLIST mods; - char *machine_escaped; + char *machine_escaped = NULL; char *new_dn; const char *objectClass[] = {"top", "person", "organizationalPerson", "user", "computer", NULL}; @@ -1681,6 +1681,7 @@ ret = ads_gen_add(ads, new_dn, mods); done: + SAFE_FREE(machine_escaped); ads_msgfree(ads, res); talloc_destroy(ctx); Modified: branches/SAMBA_3_0_25/source/passdb/pdb_ldap.c =================================================================== --- branches/SAMBA_3_0_25/source/passdb/pdb_ldap.c 2007-03-01 00:50:56 UTC (rev 21607) +++ branches/SAMBA_3_0_25/source/passdb/pdb_ldap.c 2007-03-01 01:17:36 UTC (rev 21608) @@ -2436,6 +2436,7 @@ filter = talloc_asprintf_append(filter, "(uid=%s)", escape_memberuid); if (filter == NULL) { + SAFE_FREE(escape_memberuid); ret = NT_STATUS_NO_MEMORY; goto done; } Modified: branches/SAMBA_3_0_25/source/utils/net_ads.c =================================================================== --- branches/SAMBA_3_0_25/source/utils/net_ads.c 2007-03-01 00:50:56 UTC (rev 21607) +++ branches/SAMBA_3_0_25/source/utils/net_ads.c 2007-03-01 01:17:36 UTC (rev 21608) @@ -1819,7 +1819,7 @@ TALLOC_CTX *mem_ctx = talloc_init("net_ads_printer_publish"); ADS_MODLIST mods = ads_init_mods(mem_ctx); char *prt_dn, *srv_dn, **srv_cn; - char *srv_cn_escaped, *printername_escaped; + char *srv_cn_escaped = NULL, *printername_escaped = NULL; LDAPMessage *res = NULL; if (!ADS_ERR_OK(ads_startup(True, &ads))) { @@ -1874,6 +1874,8 @@ srv_cn_escaped = escape_rdn_val_string_alloc(srv_cn[0]); printername_escaped = escape_rdn_val_string_alloc(printername); if (!srv_cn_escaped || !printername_escaped) { + SAFE_FREE(srv_cn_escaped); + SAFE_FREE(printername_escaped); d_fprintf(stderr, "Internal error, out of memory!"); ads_destroy(&ads); return -1; @@ -1881,16 +1883,21 @@ asprintf(&prt_dn, "cn=%s-%s,%s", srv_cn_escaped, printername_escaped, srv_dn); + SAFE_FREE(srv_cn_escaped); + SAFE_FREE(printername_escaped); + pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SPOOLSS, &nt_status); if (!pipe_hnd) { d_fprintf(stderr, "Unable to open a connnection to the spoolss pipe on %s\n", servername); + SAFE_FREE(prt_dn); ads_destroy(&ads); return -1; } if (!W_ERROR_IS_OK(get_remote_printer_publishing_data(pipe_hnd, mem_ctx, &mods, printername))) { + SAFE_FREE(prt_dn); ads_destroy(&ads); return -1; } @@ -1898,11 +1905,13 @@ rc = ads_add_printer_entry(ads, prt_dn, mem_ctx, &mods); if (!ADS_ERR_OK(rc)) { d_fprintf(stderr, "ads_publish_printer: %s\n", ads_errstr(rc)); + SAFE_FREE(prt_dn); ads_destroy(&ads); return -1; } d_printf("published printer\n"); + SAFE_FREE(prt_dn); ads_destroy(&ads); return 0;
