Package: arpwatch / 2.1a15-8

24from_field Patch series | download
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
106
107
108
109
110
111
112
113
114
115
116
117
118
Description: include host name in From: field

--- a/Makefile.in
+++ b/Makefile.in
@@ -65,7 +65,7 @@
 	@rm -f $@
 	$(CC) $(CFLAGS) -c $(srcdir)/$*.c
 
-CSRC =	db.c dns.c ec.c file.c intoa.c machdep.c util.c report.c setsignal.c
+CSRC =	db.c dns.c ec.c file.c intoa.c machdep.c util.c report.c localhost.c setsignal.c
 WSRC =	arpwatch.c
 SSRC =	arpsnmp.c
 GENSRC = version.c
@@ -77,7 +77,7 @@
 OBJ =	$(WSRC:.c=.o) $(SSRC:.c=.o) $(CSRC:.c=.o) $(GENSRC:.c=.o) @LIBOBJS@
 WOBJ =	$(WSRC:.c=.o) $(CSRC:.c=.o) $(GENSRC:.c=.o) @LIBOBJS@
 SOBJ =	$(SSRC:.c=.o) $(CSRC:.c=.o) $(GENSRC:.c=.o) @LIBOBJS@
-HDR =	arpwatch.h db.h dns.h ec.h file.h machdep.h report.h setsignal.h
+HDR =	arpwatch.h db.h dns.h ec.h file.h machdep.h report.h localhost.h setsignal.h
 
 TAGHDR = \
 	/usr/include/net/if.h \
--- /dev/null
+++ b/localhost.c
@@ -0,0 +1,70 @@
+/* A slightly more convenient wrapper for gethostname
+
+   Copyright (C) 1996 Free Software Foundation, Inc.
+
+   Written by Miles Bader <miles@gnu.ai.mit.edu>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <unistd.h>
+#include <malloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "localhost.h"
+/* Return the name of the localhost.  This is just a wrapper for gethostname,
+   which takes care of allocating a big enough buffer, and caches the result
+   after the first call (so the result should be copied before modification).
+   If something goes wrong, 0 is returned, and errno set.  */
+char *
+localhost (void)
+{
+	static char *buf = 0;
+	static size_t buf_len = 0;
+	int myerror = 0;
+
+	if (! buf) {
+		do {
+			errno = 0;
+			if (buf) {
+				buf_len += buf_len;
+				buf = realloc (buf, buf_len);
+			} else {
+				buf_len = 128;        /* Initial guess */
+				buf = malloc (buf_len);
+			}
+			if (! buf) {
+				errno = ENOMEM;
+				return 0;
+			}
+		} while ( (
+			 	(myerror = gethostname(buf, buf_len)) == 0
+					&& !memchr (buf, '\0', buf_len))
+				|| errno == ENAMETOOLONG
+			);
+
+		if (myerror) {
+			/* gethostname failed, abort.  */
+			free (buf);
+			buf = "(unknown host)";
+		}
+	}
+	return buf;
+}
--- /dev/null
+++ b/localhost.h
@@ -0,0 +1 @@
+char * localhost(void);
--- a/report.c
+++ b/report.c
@@ -67,6 +67,7 @@
 #include "report.h"
 #include "setsignal.h"
 #include "util.h"
+#include "localhost.h"
 
 #define PLURAL(n) ((n) == 1 || (n) == -1 ? "" : "s")
 
@@ -306,7 +307,7 @@
 			syslog(LOG_ERR, "unlink(%s): %m", tempfile);
 	}
 
-	(void)fprintf(f, "From: %s\n", watchee);
+	(void)fprintf(f, "From: arpwatch (Arpwatch %s)\n", localhost());
 	(void)fprintf(f, "To: %s\n", watcher);
 	if (interface == NULL) interface = ""; /* shouldn't happen */
 	hn = gethname(a);