static struct node_status *lookup_byaddr_backend(char *addr, int *count) { int fd; struct in_addr ip; struct nmb_name nname; struct node_status *status; fd = wins_lookup_open_socket_in(); if (fd == -1) return NULL; make_nmb_name(&nname, "*", 0); ip = *interpret_addr2(addr); status = node_status_query(fd,&nname,ip, count, NULL); close(fd); return status; }
static struct node_status *lookup_byaddr_backend(TALLOC_CTX *mem_ctx, const char *addr, int *count) { struct sockaddr_storage ss; struct nmb_name nname; struct node_status *result; NTSTATUS status; make_nmb_name(&nname, "*", 0); if (!interpret_string_addr(&ss, addr, AI_NUMERICHOST)) { return NULL; } status = node_status_query(mem_ctx, &nname, &ss, &result, count, NULL); if (!NT_STATUS_IS_OK(status)) { return NULL; } return result; }
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 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"); }