s3-masktest: Fix cli_errstr() usage (part of bug #7864)
[ira/wip.git] / source3 / utils / nmblookup.c
index e5cfe218060c53eadb7f1788a8645c9719c8c5fd..bd150df74131c82ef1417316b279e030e9323d20 100644 (file)
@@ -106,40 +106,41 @@ static char *query_flags(int flags)
  Do a node status query.
 ****************************************************************************/
 
-static void do_node_status(int fd,
-               const char *name,
+static void do_node_status(const char *name,
                int type,
                struct sockaddr_storage *pss)
 {
        struct nmb_name nname;
        int count, i, j;
-       struct node_status *status;
+       struct node_status *addrs;
        struct node_status_extra extra;
        fstring cleanname;
        char addr[INET6_ADDRSTRLEN];
+       NTSTATUS status;
 
        print_sockaddr(addr, sizeof(addr), pss);
        d_printf("Looking up status of %s\n",addr);
        make_nmb_name(&nname, name, type);
-       status = node_status_query(fd, &nname, pss, &count, &extra);
-       if (status) {
+       status = node_status_query(talloc_tos(), &nname, pss,
+                                  &addrs, &count, &extra);
+       if (NT_STATUS_IS_OK(status)) {
                for (i=0;i<count;i++) {
-                       pull_ascii_fstring(cleanname, status[i].name);
+                       pull_ascii_fstring(cleanname, addrs[i].name);
                        for (j=0;cleanname[j];j++) {
                                if (!isprint((int)cleanname[j])) {
                                        cleanname[j] = '.';
                                }
                        }
                        d_printf("\t%-15s <%02x> - %s\n",
-                              cleanname,status[i].type,
-                              node_status_flags(status[i].flags));
+                              cleanname,addrs[i].type,
+                              node_status_flags(addrs[i].flags));
                }
                d_printf("\n\tMAC Address = %02X-%02X-%02X-%02X-%02X-%02X\n",
                                extra.mac_addr[0], extra.mac_addr[1],
                                extra.mac_addr[2], extra.mac_addr[3],
                                extra.mac_addr[4], extra.mac_addr[5]);
                d_printf("\n");
-               SAFE_FREE(status);
+               TALLOC_FREE(addrs);
        } else {
                d_printf("No reply from %s\n\n",addr);
        }
@@ -152,16 +153,19 @@ static void do_node_status(int fd,
 
 static bool query_one(const char *lookup, unsigned int lookup_type)
 {
-       int j, count, flags = 0;
+       int j, count;
+       uint8_t flags;
        struct sockaddr_storage *ip_list=NULL;
+       NTSTATUS status = NT_STATUS_NOT_FOUND;
 
        if (got_bcast) {
                char addr[INET6_ADDRSTRLEN];
                print_sockaddr(addr, sizeof(addr), &bcast_addr);
                d_printf("querying %s on %s\n", lookup, addr);
-               ip_list = name_query(ServerFD,lookup,lookup_type,use_bcast,
-                                    use_bcast?true:recursion_desired,
-                                    &bcast_addr, &count, &flags, NULL);
+               status = name_query(lookup,lookup_type,use_bcast,
+                                   use_bcast?true:recursion_desired,
+                                   &bcast_addr, talloc_tos(),
+                                   &ip_list, &count, &flags);
        } else {
                const struct in_addr *bcast;
                for (j=iface_count() - 1;
@@ -178,14 +182,15 @@ static bool query_one(const char *lookup, unsigned int lookup_type)
                        print_sockaddr(addr, sizeof(addr), &bcast_ss);
                        d_printf("querying %s on %s\n",
                               lookup, addr);
-                       ip_list = name_query(ServerFD,lookup,lookup_type,
-                                            use_bcast,
-                                            use_bcast?True:recursion_desired,
-                                            &bcast_ss,&count, &flags, NULL);
+                       status = name_query(lookup,lookup_type,
+                                           use_bcast,
+                                           use_bcast?True:recursion_desired,
+                                           &bcast_ss, talloc_tos(),
+                                           &ip_list, &count, &flags);
                }
        }
 
-       if (!ip_list) {
+       if (!NT_STATUS_IS_OK(status)) {
                return false;
        }
 
@@ -213,14 +218,13 @@ static bool query_one(const char *lookup, unsigned int lookup_type)
                   was valid - ie. name_query returned true.
                 */
                if (find_status) {
-                       do_node_status(ServerFD, lookup,
-                                       lookup_type, &ip_list[j]);
+                       do_node_status(lookup, lookup_type, &ip_list[j]);
                }
        }
 
-       free(ip_list);
+       TALLOC_FREE(ip_list);
 
-       return (ip_list != NULL);
+       return NT_STATUS_IS_OK(status);
 }
 
 
@@ -334,7 +338,7 @@ int main(int argc,char *argv[])
                        ip = interpret_addr2(lookup);
                        in_addr_to_sockaddr_storage(&ss, ip);
                        fstrcpy(lookup,"*");
-                       do_node_status(ServerFD, lookup, lookup_type, &ss);
+                       do_node_status(lookup, lookup_type, &ss);
                        continue;
                }