s3: libsmb: Cleanup the code to do one address return given an IP address to _interna...
authorJeremy Allison <jra@samba.org>
Wed, 26 Aug 2020 22:26:54 +0000 (15:26 -0700)
committerNoel Power <npower@samba.org>
Mon, 7 Sep 2020 13:23:42 +0000 (13:23 +0000)
Will make easier to move to talloc later.

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

index 688e62d64fc1902db9428704018edecb45c8c88d..ba103f6c7fc28d224349a932c4520396f06c8e7f 100644 (file)
@@ -3198,31 +3198,33 @@ static NTSTATUS _internal_resolve_name(const char *name,
                name, name_type, sitename ? sitename : "(null)");
 
        if (is_ipaddress(name)) {
-               *return_iplist = SMB_MALLOC_P(struct ip_service);
-               if (*return_iplist == NULL) {
-                       DBG_ERR("malloc fail !\n");
-                       TALLOC_FREE(frame);
-                       return NT_STATUS_NO_MEMORY;
-               }
-
-               /* ignore the port here */
-               (*return_iplist)->port = PORT_NONE;
+               struct ip_service *iplist = NULL;
+               struct sockaddr_storage ss;
 
                /* if it's in the form of an IP address then get the lib to interpret it */
-               ok = interpret_string_addr(&(*return_iplist)->ss,
-                                       name, AI_NUMERICHOST);
+               ok = interpret_string_addr(&ss, name, AI_NUMERICHOST);
                if (!ok) {
                        DBG_WARNING("interpret_string_addr failed on %s\n",
                                name);
-                       SAFE_FREE(*return_iplist);
                        TALLOC_FREE(frame);
                        return NT_STATUS_INVALID_PARAMETER;
                }
-               if (is_zero_addr(&(*return_iplist)->ss)) {
-                       SAFE_FREE(*return_iplist);
+               if (is_zero_addr(&ss)) {
                        TALLOC_FREE(frame);
                        return NT_STATUS_UNSUCCESSFUL;
                }
+
+               iplist = SMB_MALLOC_P(struct ip_service);
+               if (iplist == NULL) {
+                       TALLOC_FREE(frame);
+                       return NT_STATUS_NO_MEMORY;
+               }
+
+               iplist[0].ss = ss;
+               /* ignore the port here */
+               iplist[0].port = PORT_NONE;
+
+               *return_iplist = iplist;
                *return_count = 1;
                TALLOC_FREE(frame);
                return NT_STATUS_OK;