s4-resolve: added resolve_name_multiple_recv()
authorAndrew Tridgell <tridge@samba.org>
Mon, 13 Sep 2010 13:08:28 +0000 (23:08 +1000)
committerAndrew Tridgell <tridge@samba.org>
Wed, 15 Sep 2010 05:39:35 +0000 (15:39 +1000)
this allows for multiple replies to a SRV lookup

Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

source4/libcli/resolve/resolve.c

index d9352b4226e23e49e080ed587c3964f1349133a1..c17e93a1f65aa9d0183d03738fc3785118a65e09 100644 (file)
@@ -266,6 +266,40 @@ NTSTATUS resolve_name_recv(struct composite_context *c,
        return status;
 }
 
+/*
+  receive multiple responses from resolve_name_send()
+ */
+NTSTATUS resolve_name_multiple_recv(struct composite_context *c,
+                                   TALLOC_CTX *mem_ctx,
+                                   const char ***reply_addrs)
+{
+       NTSTATUS status;
+       struct socket_address **addrs = NULL;
+       int i;
+
+       status = resolve_name_all_recv(c, mem_ctx, &addrs, NULL);
+       NT_STATUS_NOT_OK_RETURN(status);
+
+       /* count the addresses */
+       for (i=0; addrs[i]; i++) ;
+
+       *reply_addrs = talloc_array(mem_ctx, const char *, i+1);
+       NT_STATUS_HAVE_NO_MEMORY(*reply_addrs);
+
+       for (i=0; addrs[i]; i++) {
+               struct tsocket_address *t_addr = socket_address_to_tsocket_address(addrs, addrs[i]);
+               NT_STATUS_HAVE_NO_MEMORY(t_addr);
+
+               (*reply_addrs)[i] = tsocket_address_inet_addr_string(t_addr, *reply_addrs);
+               NT_STATUS_HAVE_NO_MEMORY((*reply_addrs)[i]);
+       }
+       (*reply_addrs)[i] = NULL;
+
+       talloc_free(addrs);
+
+       return status;
+}
+
 /*
   general name resolution - sync call
  */