r248: Add support for printing out the MAC address on nmblookup.
authorRichard Sharpe <sharpe@samba.org>
Fri, 16 Apr 2004 03:57:30 +0000 (03:57 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:51:16 +0000 (10:51 -0500)
(This used to be commit bf9f02be5fc1d09c8c08c78c3f2df23b2099ba4f)

source3/include/smb.h
source3/libsmb/namequery.c
source3/nsswitch/winbindd_wins.c
source3/nsswitch/wins.c
source3/utils/nmblookup.c

index aab61deaabbac67e3ca26c676947bfeee4c544bc..30eb82ddf56465671b7d210454fe8c43181172a1 100644 (file)
@@ -1526,6 +1526,12 @@ struct node_status {
        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;
index b9bc4e11664da2b06f8eb8f7a6b6fe996a0cbf4a..2bb7359e742e2cbf779fa65936d9d1cfa8217ee9 100644 (file)
@@ -45,7 +45,7 @@ static int generate_trn_id(void)
  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;
@@ -68,6 +68,12 @@ static struct node_status *parse_node_status(char *p, int *num_names)
                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;
 }
 
@@ -78,7 +84,8 @@ static struct node_status *parse_node_status(char *p, int *num_names)
 **************************************************************************/
 
 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;
@@ -149,7 +156,7 @@ struct node_status *node_status_query(int fd,struct nmb_name *name,
                                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;
                }
@@ -190,7 +197,7 @@ BOOL name_status_find(const char *q_name, int q_type, int type, struct in_addr t
 
        /* 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;
index a1eef159c0a8d1a13df9d270fb2a494b9302d560..59d600d1eaa971af892dc808870e690eda97728a 100644 (file)
@@ -78,7 +78,7 @@ static struct node_status *lookup_byaddr_backend(char *addr, int *count)
 
        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;
index 100a103924caa3f1909a632fad831270ac0f1915..88c65b767f54653f50377893effb4bba1e91b563 100644 (file)
@@ -145,7 +145,7 @@ static struct node_status *lookup_byaddr_backend(char *addr, int *count)
 
        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;
index 3c5a22841eacda18f5bbc2e4dd6118d34d38d108..7285712c0b7b7e63a0953c11f15eb19490f83108 100644 (file)
@@ -102,11 +102,12 @@ static void do_node_status(int fd, const char *name, int type, struct in_addr ip
        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);
@@ -119,6 +120,9 @@ static void do_node_status(int fd, const char *name, int type, struct in_addr ip
                }
                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");
 }