aboutsummaryrefslogtreecommitdiff
path: root/net/arpwatch-devel/files/patch-ap
blob: 15b73b730d5edd3ba64a48562901d366f7b69ccb (plain) (blame)
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
--- ../arpwatch.orig/util.c	Fri Oct 13 18:49:03 2000
+++ ./util.c	Wed Sep 10 13:03:27 2003
@@ -53,6 +53,7 @@

 char *arpdir = ARPDIR;
 char *arpfile = ARPFILE;
+char *etherfile = ETHERFILE;
 char *ethercodes = ETHERCODES;

 /* Broadcast ethernet addresses */
@@ -105,7 +106,7 @@
 dump(void)
 {
 	register int fd;
-	char oldarpfile[256], newarpfile[256];
+	char oldarpfile[256], newarpfile[256], *oldetherfile, *newetherfile;

 	(void)sprintf(oldarpfile, "%s-", arpfile);
 	(void)sprintf(newarpfile, "%s.new", arpfile);
@@ -130,6 +131,32 @@
 		syslog(LOG_ERR, "rename %s -> %s: %m", newarpfile, arpfile);
 		return(0);
 	}
+
+	/* ether info */
+	(void)asprintf(&oldetherfile, "%s-", etherfile);
+	(void)asprintf(&newetherfile, "%s.new", etherfile);
+
+	if ((fd = creat(newetherfile, 0644)) < 0) {
+		syslog(LOG_ERR, "creat(%s): %m", newetherfile);
+		return(0);
+	}
+	if ((dumpf = fdopen(fd, "w")) == NULL) {
+		syslog(LOG_ERR, "fdopen(%s): %m", newetherfile);
+		return(0);
+	}
+
+	fwrite(einfo_table, sizeof(struct einfo), et_cnt, dumpf);
+
+	(void)fclose(dumpf);
+	if (rename(etherfile, oldetherfile) < 0) {
+		syslog(LOG_ERR, "rename %s -> %s: %m", etherfile, oldetherfile);
+		return(0);
+	}
+	if (rename(newetherfile, etherfile) < 0) {
+		syslog(LOG_ERR, "rename %s -> %s: %m", newetherfile, etherfile);
+		return(0);
+	}
+
 	return(1);
 }

@@ -138,7 +165,9 @@
 readdata(void)
 {
 	register FILE *f;
+	char line[1024];

+	/* arp.dat */
 	if ((f = fopen(arpfile, "r")) == NULL) {
 		syslog(LOG_ERR, "fopen(%s): %m", arpfile);
 		return(0);
@@ -147,6 +176,15 @@
 		(void)fclose(f);
 		return(0);
 	}
+	(void)fclose(f);
+
+	/* ether.dat */
+	if ((f = fopen(etherfile, "r")) == NULL) {
+	        syslog(LOG_ERR, "fopen(%s): %m", etherfile);
+		return(0);
+	}
+
+	et_cnt = fread(einfo_table, sizeof(struct einfo), HASHSIZE, f);
 	(void)fclose(f);

 	/* It's not fatal if we can't open the ethercodes file */