summaryrefslogtreecommitdiffstats
path: root/net-mgmt/arpwatch-devel/files/patch-an
diff options
context:
space:
mode:
Diffstat (limited to 'net-mgmt/arpwatch-devel/files/patch-an')
-rw-r--r--net-mgmt/arpwatch-devel/files/patch-an126
1 files changed, 126 insertions, 0 deletions
diff --git a/net-mgmt/arpwatch-devel/files/patch-an b/net-mgmt/arpwatch-devel/files/patch-an
new file mode 100644
index 0000000..b994a7f
--- /dev/null
+++ b/net-mgmt/arpwatch-devel/files/patch-an
@@ -0,0 +1,126 @@
+--- ../arpwatch.orig/report.c Sat Sep 30 19:41:10 2000
++++ ./report.c Fri Sep 12 18:57:04 2003
+@@ -45,6 +45,8 @@
+
+ #include <ctype.h>
+ #include <errno.h>
++#include <fcntl.h>
++#include <paths.h>
+ #include <signal.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -70,6 +72,8 @@
+
+ #define PLURAL(n) ((n) == 1 || (n) == -1 ? "" : "s")
+
++extern char *Watcher;
++
+ static int cdepth; /* number of outstanding children */
+
+ static char *fmtdate(time_t);
+@@ -232,15 +236,16 @@
+ }
+
+ void
+-report(register char *title, register u_int32_t a, register u_char *e1,
+- register u_char *e2, register time_t *t1p, register time_t *t2p)
++report(evt_type event, register u_int32_t a, register u_char *e1,
++ register u_char *e2, register time_t *t1p, register time_t *t2p,
++ register char *interface, register char *old_interface)
+ {
+ register char *cp, *hn;
+ register int fd, pid;
+ register FILE *f;
+ char tempfile[64], cpu[64], os[64];
+ char *fmt = "%20s: %s\n";
+- char *watcher = WATCHER;
++ char *watcher = Watcher ? Watcher : WATCHER;
+ char *watchee = WATCHEE;
+ char *sendmail = PATH_SENDMAIL;
+ char *unknown = "<unknown>";
+@@ -251,9 +256,15 @@
+ if (initializing)
+ return;
+
++ /* these types are sent to syslog instead of reported on.
++ * only continue if there are other events as well
++ */
++ if (event == NULL || (event & ~(IP_ETHER_REUSE | FLIPFLOP_DECNET) == 0))
++ return;
++
+ if (debug) {
+ if (debug > 1) {
+- dosyslog(LOG_NOTICE, title, a, e1, e2);
++ dosyslog(LOG_NOTICE, "event", a, e1, e2);
+ return;
+ }
+ f = stdout;
+@@ -270,7 +281,7 @@
+ }
+
+ /* Syslog this event too */
+- dosyslog(LOG_NOTICE, title, a, e1, e2);
++ dosyslog(LOG_NOTICE, "event", a, e1, e2);
+
+ /* Update child depth */
+ ++cdepth;
+@@ -304,12 +315,31 @@
+ (void)fprintf(f, "To: %s\n", watcher);
+ hn = gethname(a);
+ if (!isdigit(*hn))
+- (void)fprintf(f, "Subject: %s (%s)\n", title, hn);
++ (void)fprintf(f, "Subject: Arpwatch Event (%s)\n", hn);
+ else {
+- (void)fprintf(f, "Subject: %s\n", title);
++ (void)fprintf(f, "Subject: Arpwatch Event\n");
+ hn = unknown;
+ }
+ (void)putc('\n', f);
++
++ if (event & ETHER_NEW)
++ (void)fprintf(f, fmt, "event", "new ethernet device");
++ if (event & ETHER_IFCHG)
++ (void)fprintf(f, fmt, "event", "ethernet device changed interfaces");
++ if (event & ACTIVITY_NEW)
++ (void)fprintf(f, fmt, "event", "new activity");
++ if (event & IP_NEW)
++ (void)fprintf(f, fmt, "event", "new active IP address");
++ if (event & IP_ETHERCHG)
++ (void)fprintf(f, fmt, "event", "IP changed ethernet address");
++ if (event & FLIPFLOP)
++ (void)fprintf(f, fmt, "event", "flip flop");
++
++ (void)fprintf(f, fmt, "interface", interface);
++
++ if (old_interface != NULL)
++ (void)fprintf(f, fmt, "old interface", old_interface);
++
+ (void)fprintf(f, fmt, "hostname", hn);
+ (void)fprintf(f, fmt, "ip address", intoa(a));
+ (void)fprintf(f, fmt, "ethernet address", e2str(e1));
+@@ -344,6 +374,25 @@
+ exit(1);
+ }
+ /* XXX Need to freopen()? */
++
++ /*
++ * Open /dev/null as stdout and stderr so that sendmail 8.12.1 (and
++ * above ?) won't complain about missing file descriptors.
++ */
++ if ((fd = open(_PATH_DEVNULL, O_RDWR)) == -1) {
++ syslog(LOG_ERR, "Cannot open %s: %m", _PATH_DEVNULL);
++ exit(1);
++ }
++ if (dup2(fd, STDOUT_FILENO) == -1) {
++ syslog(LOG_ERR, "Cannot dup2 %s to stdout: %m", _PATH_DEVNULL);
++ exit(1);
++ }
++ if (dup2(fd, STDERR_FILENO) == -1) {
++ syslog(LOG_ERR, "Cannot dup2 %s to stderr: %m", _PATH_DEVNULL);
++ exit(1);
++ }
++ close(fd);
++
+ /* Always Deliver interactively (pause when child depth gets large) */
+ execl(sendmail, "sendmail", "-odi", watcher, NULL);
+ syslog(LOG_ERR, "execl: %s: %m", sendmail);
OpenPOWER on IntegriCloud