freebsd-ports/net-mgmt/arpwatch-devel/files/patch-ap
Kirill Ponomarev 486518fcaa This is a development fork of arpwatch. This has been
threaded in order to better deal with the requirements of
multi-interface routers. Information regarding MAC addresses
and interfaces is maintained by the program, and an alert is
issued should a device move between interfaces.  In addition,
event processing has been refactored, and some bugs have been
fixed.

PR:		59180
Submitted by:	Matthew George <mdg@secureworks.net>
Approved by:	portmgr
2004-01-19 23:34:48 +00:00

78 lines
1.9 KiB
Text

--- ../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 */