X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=blobdiff_plain;f=source3%2Futils%2Fnmblookup.c;h=bd150df74131c82ef1417316b279e030e9323d20;hp=e5cfe218060c53eadb7f1788a8645c9719c8c5fd;hb=5d8ada549e629cfe53ed973d66f5fcf0a3bd0a8c;hpb=e1ab3c3470a7f1159d52ed0c1eacf4a5a7b6bc2b diff --git a/source3/utils/nmblookup.c b/source3/utils/nmblookup.c index e5cfe218060..bd150df7413 100644 --- a/source3/utils/nmblookup.c +++ b/source3/utils/nmblookup.c @@ -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 - %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; }