unsigned char flags;
};
+/* The extra info from a NetBIOS node status query */
+struct node_status_extra {
+ unsigned char mac_addr[6];
+ /* There really is more here ... */
+};
+
struct pwd_info
{
BOOL null_pwd;
Parse a node status response into an array of structures.
****************************************************************************/
-static struct node_status *parse_node_status(char *p, int *num_names)
+static struct node_status *parse_node_status(char *p, int *num_names, struct node_status_extra *extra)
{
struct node_status *ret;
int i;
DEBUG(10, ("%s#%02x: flags = 0x%02x\n", ret[i].name,
ret[i].type, ret[i].flags));
}
+ /*
+ * Also, pick up the MAC address ...
+ */
+ if (extra) {
+ memcpy(&extra->mac_addr, p, 6); /* Fill in the mac addr */
+ }
return ret;
}
**************************************************************************/
struct node_status *node_status_query(int fd,struct nmb_name *name,
- struct in_addr to_ip, int *num_names)
+ struct in_addr to_ip, int *num_names,
+ struct node_status_extra *extra)
{
BOOL found=False;
int retries = 2;
continue;
}
- ret = parse_node_status(&nmb2->answers->rdata[0], num_names);
+ ret = parse_node_status(&nmb2->answers->rdata[0], num_names, extra);
free_packet(p2);
return ret;
}
/* W2K PDC's seem not to respond to '*'#0. JRA */
make_nmb_name(&nname, q_name, q_type);
- status = node_status_query(sock, &nname, to_ip, &count);
+ status = node_status_query(sock, &nname, to_ip, &count, NULL);
close(sock);
if (!status)
goto done;
make_nmb_name(&nname, "*", 0);
ip = *interpret_addr2(addr);
- status = node_status_query(fd,&nname,ip, count);
+ status = node_status_query(fd,&nname,ip, count, NULL);
close(fd);
return status;
make_nmb_name(&nname, "*", 0);
ip = *interpret_addr2(addr);
- status = node_status_query(fd,&nname,ip, count);
+ status = node_status_query(fd,&nname,ip, count, NULL);
close(fd);
return status;
struct nmb_name nname;
int count, i, j;
struct node_status *status;
+ struct node_status_extra extra;
fstring cleanname;
d_printf("Looking up status of %s\n",inet_ntoa(ip));
make_nmb_name(&nname, name, type);
- status = node_status_query(fd,&nname,ip, &count);
+ status = node_status_query(fd,&nname,ip, &count, &extra);
if (status) {
for (i=0;i<count;i++) {
pull_ascii_fstring(cleanname, status[i].name);
}
SAFE_FREE(status);
}
+ 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");
}