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