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;
- NODE_STATUS_STRUCT *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);
}
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;
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;
}
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);
}
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;
}