static bool do_node_status(const char *name, int type, struct sockaddr_storage *pss) { struct nmb_name nname; int count, i, j; 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(talloc_tos(), &nname, pss, &addrs, &count, &extra); if (NT_STATUS_IS_OK(status)) { for (i=0;i<count;i++) { 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,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"); TALLOC_FREE(addrs); return true; } else { d_printf("No reply from %s\n\n",addr); return false; } }
static void do_node_status(int fd, const char *name, int type, struct sockaddr_storage *pss) { struct nmb_name nname; int count, i, j; NODE_STATUS_STRUCT *status; struct node_status_extra extra; fstring cleanname; char addr[INET6_ADDRSTRLEN]; 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) { for (i=0;i<count;i++) { pull_ascii_fstring(cleanname, status[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)); } 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); } else { d_printf("No reply from %s\n\n",addr); } }
/* do a single node status */ static bool do_node_status(struct nbt_name_socket *nbtsock, const char *addr, uint16_t port) { struct nbt_name_status io; NTSTATUS status; io.in.name.name = "*"; io.in.name.type = NBT_NAME_CLIENT; io.in.name.scope = NULL; io.in.dest_addr = addr; io.in.dest_port = port; io.in.timeout = 1; io.in.retries = 2; status = nbt_name_status(nbtsock, nbtsock, &io); if (NT_STATUS_IS_OK(status)) { int i; printf("Node status reply from %s\n", io.out.reply_from); for (i=0;i<io.out.status.num_names;i++) { d_printf("\t%-16s <%02x> %s\n", clean_name(nbtsock, io.out.status.names[i].name), io.out.status.names[i].type, node_status_flags(nbtsock, io.out.status.names[i].nb_flags)); } printf("\n\tMAC Address = %02X-%02X-%02X-%02X-%02X-%02X\n", io.out.status.statistics.unit_id[0], io.out.status.statistics.unit_id[1], io.out.status.statistics.unit_id[2], io.out.status.statistics.unit_id[3], io.out.status.statistics.unit_id[4], io.out.status.statistics.unit_id[5]); return true; } return false; }
/**************************************************************************** do a node status query ****************************************************************************/ static void do_node_status(int fd, char *name, int type, struct in_addr ip) { struct nmb_name nname; int count, i, j; struct node_status *status; fstring cleanname; printf("Looking up status of %s\n",inet_ntoa(ip)); make_nmb_name(&nname, name, type); status = node_status_query(fd,&nname,ip, &count); if (status) { for (i=0;i<count;i++) { fstrcpy(cleanname, status[i].name); for (j=0;cleanname[j];j++) { if (!isprint((int)cleanname[j])) cleanname[j] = '.'; } printf("\t%-15s <%02x> - %s\n", cleanname,status[i].type, node_status_flags(status[i].flags)); } SAFE_FREE(status); } printf("\n"); }