summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-06-05 14:27:26 -0700
committerJeremy Allison <jra@samba.org>2008-06-05 14:27:26 -0700
commit48a2a3780b051d3c9f87949f091c791aa95e6e5a (patch)
treec3f79b9461d68108a2a99a20ac945cbe64f06616
parent66a5cbaf8be9de66d40660cfb57df553b651d75d (diff)
downloadsamba-48a2a3780b051d3c9f87949f091c791aa95e6e5a.tar.gz
samba-48a2a3780b051d3c9f87949f091c791aa95e6e5a.tar.bz2
samba-48a2a3780b051d3c9f87949f091c791aa95e6e5a.zip
More correct fix (hopefully :-) for any memory leaks.
Jerry promised to check :-). Vl also please review. Jeremy. (This used to be commit 8abc6e742147486a62b4a3f9845e34062845d8ea)
-rw-r--r--source3/libsmb/namequery.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c
index c987890e69..24d7ee1a9c 100644
--- a/source3/libsmb/namequery.c
+++ b/source3/libsmb/namequery.c
@@ -1835,6 +1835,9 @@ static NTSTATUS get_dc_list(const char *domain,
NTSTATUS status;
TALLOC_CTX *ctx = talloc_init("get_dc_list");
+ *ip_list = NULL;
+ *count = 0;
+
if (!ctx) {
return NT_STATUS_NO_MEMORY;
}
@@ -1914,7 +1917,7 @@ static NTSTATUS get_dc_list(const char *domain,
p = pserver;
while (next_token_talloc(ctx, &p, &name, LIST_SEP)) {
- if (strequal(name, "*")) {
+ if (!done_auto_lookup && strequal(name, "*")) {
status = internal_resolve_name(domain, 0x1C, sitename,
&auto_ip_list,
&auto_count,
@@ -2055,6 +2058,12 @@ static NTSTATUS get_dc_list(const char *domain,
out:
+ if (!NT_STATUS_IS_OK(status)) {
+ SAFE_FREE(return_iplist);
+ *ip_list = NULL;
+ *count = 0;
+ }
+
SAFE_FREE(auto_ip_list);
TALLOC_FREE(ctx);
return status;
@@ -2074,6 +2083,9 @@ NTSTATUS get_sorted_dc_list( const char *domain,
NTSTATUS status;
enum dc_lookup_type lookup_type = DC_NORMAL_LOOKUP;
+ *ip_list = NULL;
+ *count = 0;
+
DEBUG(8,("get_sorted_dc_list: attempting lookup "
"for name %s (sitename %s) using [%s]\n",
domain,
@@ -2087,6 +2099,8 @@ NTSTATUS get_sorted_dc_list( const char *domain,
status = get_dc_list(domain, sitename, ip_list,
count, lookup_type, &ordered);
if (!NT_STATUS_IS_OK(status)) {
+ SAFE_FREE(*ip_list);
+ *count = 0;
return status;
}
@@ -2117,6 +2131,8 @@ NTSTATUS get_kdc_list( const char *realm,
count, DC_KDC_ONLY, &ordered);
if (!NT_STATUS_IS_OK(status)) {
+ SAFE_FREE(*ip_list);
+ *count = 0;
return status;
}