summaryrefslogtreecommitdiff
path: root/net/sdig/patches/patch-ab
blob: 5dc213a04aa3d14512872fc3d387531d06717100 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
$NetBSD: patch-ab,v 1.1.1.1 2002/01/10 14:06:31 bouyer Exp $

--- sdig.c.orig	Fri May 18 15:02:55 2001
+++ sdig.c	Sun Jan  6 18:45:02 2002
@@ -25,15 +25,19 @@
 #include <stdlib.h> 
 #include <string.h> 
 #include <unistd.h> 
-#include <arpa/inet.h> 
-#include <netinet/in.h> 
+#include <sys/types.h>
 #include <sys/socket.h>
+#include <netinet/in.h> 
+#include <arpa/inet.h> 
+#include <netdb.h> 
+#include <arpa/nameser.h> 
+#include <resolv.h> 
 
 #include "common.h"
 #include "version.h"
 
 #define PPS 32		/* 32 ports per switch */
-#define CONFIGFILE "/etc/sdig.conf"
+#define CONFIGFILE PREFIX "/etc/sdig.conf"
 
 	char	*wins = NULL, *nbname = NULL, *nmblookup = NULL, 
 		*snmpget = NULL, *mactable = NULL;
@@ -115,6 +119,7 @@
 char *findport (char *mac, char *swip, char *swpw)
 {
 	char	needle[64], oid[64], exec[256], *ptr, *ptr2, buf[256], *sp;
+	char	sep = ':';
 	char	*tmp;
 	FILE	*out;
 	int	i;
@@ -125,13 +130,22 @@
 		exit (1);
 	}
 
-	snprintf (needle, sizeof(needle), "17.4.3.1.2");
+	snprintf (needle, sizeof(needle), ".1.3.6.1.2.1.17.4.3.1.2");
 
-	ptr = strdup(mac);
+	if (strncmp(mac, " Hex: ", 6) == 0) {
+		sep = ' ';
+		ptr = strdup(mac + 6);
+		debug("MAC ptr with sep = ' ' is [%s]\n", ptr);
+	} else {
+		ptr = strdup(mac);
+		debug("MAC ptr with sep = ':' is [%s]\n", ptr);
+	}
 	for (i = 0; i < 6; i++) {
-		sp = strchr (ptr, ':');
+		sp = strchr (ptr, sep);
 		if (sp)
 			*sp = '\0';
+		else
+			break;
 
 		val = strtoul (ptr, NULL, 16);
 		if (i == 5)
@@ -145,7 +159,7 @@
 
 	debug("needle is [%s]\n", needle);
 
-	snprintf (exec, sizeof(exec), "%s %s %s %s 2>/dev/null", snmpget, swip, swpw, needle);
+	snprintf (exec, sizeof(exec), "%s -On %s %s %s 2>/dev/null", snmpget, swip, swpw, needle);
 
 	debug("popen: %s\n", exec);
 	out = popen (exec, "r");
@@ -472,6 +486,7 @@
 {
 	FILE	*macdb;
 	char	buf[256], *mac, *tmp, *ptr, *cp, macfind[16];
+	char	sep = ':';
 	int	i, num[3];
 
 	macdb = fopen (mactable, "r");
@@ -482,9 +497,16 @@
 
 	num[0] = num[1] = num[2] = 0;
 
-	ptr = mac = strdup(inmac);
+	if (strncmp(inmac, " Hex: ", 6) == 0) {
+		sep = ' ';
+		ptr = mac = strdup(inmac + 6);
+		debug("inMAC ptr with sep = ' ' is [%s]\n", ptr);
+	} else {
+		ptr = mac = strdup(inmac);
+		debug("inMAC ptr with sep = ':' is [%s]\n", ptr);
+	}
 	for (i = 0; i < 3; i++) {
-		cp = strchr (ptr, ':');
+		cp = strchr (ptr, sep);
 
 		if (!cp)
 			continue;
@@ -498,6 +520,7 @@
 	snprintf(macfind, sizeof(macfind), "%02x %02x %02x", 
 		num[0], num[1], num[2]);
 
+	debug("looking for MAC prefix [%s] in %s\n", macfind, mactable);
 	while (fgets(buf, sizeof(buf), macdb)) {
 		buf[strlen(buf) - 1] = '\0';