]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: libsmb: Make discover_dc_netbios() use internal_resolve_name_talloc().
authorJeremy Allison <jra@samba.org>
Wed, 26 Aug 2020 20:47:55 +0000 (13:47 -0700)
committerNoel Power <npower@samba.org>
Mon, 7 Sep 2020 13:23:42 +0000 (13:23 +0000)
No more external users of internal_resolve_name().

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Noel Power <npower@samba.org>
source3/libsmb/dsgetdcname.c

index 9d7d430c92139ed359126bfb2699ad74ce4e9f6b..1f0ff66ac4978670e5bc1708a41aa7db86d8d824 100644 (file)
@@ -444,9 +444,9 @@ static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx,
        NTSTATUS status;
        enum nbt_name_type name_type = NBT_NAME_LOGON;
        struct ip_service *iplist = NULL;
-       int i;
+       size_t i;
        struct ip_service_name *dclist = NULL;
-       int count;
+       size_t count;
        static const char *resolve_order[] = { "lmhosts", "wins", "bcast", NULL };
 
        *returned_dclist = NULL;
@@ -456,9 +456,13 @@ static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx,
                name_type = NBT_NAME_PDC;
        }
 
-       status = internal_resolve_name(domain_name, name_type, NULL,
-                                      &iplist, &count,
-                                      resolve_order);
+       status = internal_resolve_name_talloc(mem_ctx,
+                                       domain_name,
+                                       name_type,
+                                       NULL,
+                                       &iplist,
+                                       &count,
+                                       resolve_order);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(10,("discover_dc_netbios: failed to find DC\n"));
                return status;
@@ -466,7 +470,7 @@ static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx,
 
        dclist = talloc_zero_array(mem_ctx, struct ip_service_name, count);
        if (!dclist) {
-               SAFE_FREE(iplist);
+               TALLOC_FREE(iplist);
                return NT_STATUS_NO_MEMORY;
        }
 
@@ -480,13 +484,13 @@ static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx,
 
                ok = sockaddr_storage_to_samba_sockaddr(&r->sa, &iplist[i].ss);
                if (!ok) {
-                       SAFE_FREE(iplist);
+                       TALLOC_FREE(iplist);
                        TALLOC_FREE(dclist);
                        return NT_STATUS_INVALID_PARAMETER;
                }
                r->hostname = talloc_strdup(mem_ctx, addr);
                if (!r->hostname) {
-                       SAFE_FREE(iplist);
+                       TALLOC_FREE(iplist);
                        TALLOC_FREE(dclist);
                        return NT_STATUS_NO_MEMORY;
                }
@@ -495,7 +499,15 @@ static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx,
 
        *returned_dclist = dclist;
        *returned_count = count;
-       SAFE_FREE(iplist);
+       TALLOC_FREE(iplist);
+
+       /* Paranoia in casting size_t -> int. */
+       if (*returned_count < 0) {
+               TALLOC_FREE(dclist);
+               *returned_dclist = NULL;
+               *returned_count = 0;
+               return NT_STATUS_INVALID_PARAMETER;
+       }
 
        return NT_STATUS_OK;
 }