]> git.pld-linux.org Git - packages/arpwatch.git/blob - arpwatch-debian_13opt_allsubnets.patch
- release 2
[packages/arpwatch.git] / arpwatch-debian_13opt_allsubnets.patch
1 Index: arpwatch/arpsnmp.c
2 diff -u arpwatch/arpsnmp.c:1.1.1.1.2.2 arpwatch/arpsnmp.c:1.1.1.1.2.1.6.2
3 --- arpwatch/arpsnmp.c:1.1.1.1.2.2      Tue Aug 10 11:14:13 2004
4 +++ arpwatch/arpsnmp.c  Fri Aug 13 02:17:33 2004
5 @@ -63,7 +63,7 @@
6  /* Forwards */
7  int    main(int, char **);
8  int    readsnmp(char *);
9 -int    snmp_add(u_int32_t, u_char *, time_t, char *);
10 +int    snmp_add(u_int32_t, u_char *, time_t, char *, char *);
11  __dead void usage(void) __attribute__((volatile));
12  
13  char *prog;
14 @@ -143,22 +143,24 @@
15  static time_t now;
16  
17  int
18 -snmp_add(register u_int32_t a, register u_char *e, time_t t, register char *h)
19 +snmp_add(register u_int32_t a, register u_char *e, time_t t, register char *h,
20 +    char *interface)
21  {
22         /* Watch for ethernet broadcast */
23         if (MEMCMP(e, zero, 6) == 0 || MEMCMP(e, allones, 6) == 0) {
24 -               dosyslog(LOG_INFO, "ethernet broadcast", a, e, NULL);
25 +               dosyslog(LOG_INFO, "ethernet broadcast", a, e, NULL,
26 +                        interface);
27                 return (1);
28         }
29  
30         /* Watch for some ip broadcast addresses */
31         if (a == 0 || a == 1) {
32 -               dosyslog(LOG_INFO, "ip broadcast", a, e, NULL);
33 +               dosyslog(LOG_INFO, "ip broadcast", a, e, NULL, interface);
34                 return (1);
35         }
36  
37         /* Use current time (although it would be nice to subtract idle time) */
38 -       return (ent_add(a, e, now, h));
39 +       return (ent_add(a, e, now, h, interface));
40  }
41  
42  /* Process an snmp file */
43 Index: arpwatch/arpwatch.8
44 diff -u arpwatch/arpwatch.8:1.1.1.1.2.2 arpwatch/arpwatch.8:1.1.1.1.8.5
45 --- arpwatch/arpwatch.8:1.1.1.1.2.2     Thu Aug 12 22:31:09 2004
46 +++ arpwatch/arpwatch.8 Fri Aug 13 01:54:24 2004
47 @@ -63,6 +63,13 @@
48  ]
49  .\" **
50  .\" **
51 +.br
52 +.ti +8
53 +[
54 +.B -a
55 +]
56 +.\" **
57 +.\" **
58  .ad
59  .SH DESCRIPTION
60  .B Arpwatch
61 @@ -127,6 +134,20 @@
62  .\" **
63  .\" **
64  .LP
65 +(Debian) 
66 +.B -a
67 +By default,
68 +.B arpwatch
69 +reports bogons (unless
70 +.B -N
71 +is given) for IP addresses that are in the same subnet than the
72 +first IP address of the default interface.  If this option is
73 +specified,
74 +.B arpwatch
75 +will report bogons about every IP addresses.
76 +.\" **
77 +.\" **
78 +.LP
79  Note that an empty
80  .I arp.dat
81  file must be created before the first time you run
82 Index: arpwatch/arpwatch.c
83 diff -u arpwatch/arpwatch.c:1.1.1.1.2.5 arpwatch/arpwatch.c:1.1.1.1.2.1.6.11
84 --- arpwatch/arpwatch.c:1.1.1.1.2.5     Sat Aug 14 02:33:07 2004
85 +++ arpwatch/arpwatch.c Sat Aug 14 02:34:27 2004
86 @@ -141,6 +141,8 @@
87  int    sanity_fddi(struct fddi_header *, struct ether_arp *, int);
88  __dead void usage(void) __attribute__((volatile));
89  
90 +static char *interface;
91 +
92  int
93  main(int argc, char **argv)
94  {
95 @@ -150,7 +152,7 @@
96         register int fd;
97  #endif
98         register pcap_t *pd;
99 -       register char *interface, *rfilename;
100 +       register char *rfilename;
101         struct bpf_program code;
102         char errbuf[PCAP_ERRBUF_SIZE];
103         char options[] =
104 @@ -172,6 +174,9 @@
105                 "r:"
106                 /**/
107                 /**/
108 +               "a"
109 +               /**/
110 +               /**/
111         ;
112  
113         if (argv[0] == NULL)
114 @@ -193,6 +198,10 @@
115         while ((op = getopt(argc, argv, options)) != EOF)
116                 switch (op) {
117  
118 +               case 'a':
119 +                       ++allsubnets;
120 +                       break;
121 +
122                 case 'd':
123                         ++debug;
124  #ifndef DEBUG
125 @@ -401,29 +410,31 @@
126  
127         /* Watch for bogons */
128         if (isbogon(sia)) {
129 -               dosyslog(LOG_INFO, "bogon", sia, sea, sha);
130 -               return;
131 +               dosyslog(LOG_INFO, "bogon", sia, sea, sha, interface);
132 +               if (!allsubnets) return;
133         }
134  
135         /* Watch for ethernet broadcast */
136         if (MEMCMP(sea, zero, 6) == 0 || MEMCMP(sea, allones, 6) == 0 ||
137             MEMCMP(sha, zero, 6) == 0 || MEMCMP(sha, allones, 6) == 0) {
138 -               dosyslog(LOG_INFO, "ethernet broadcast", sia, sea, sha);
139 +               dosyslog(LOG_INFO, "ethernet broadcast", sia, sea, sha,
140 +                        interface);
141                 return;
142         }
143  
144         /* Double check ethernet addresses */
145         if (MEMCMP(sea, sha, 6) != 0) {
146 -               dosyslog(LOG_INFO, "ethernet mismatch", sia, sea, sha);
147 +               dosyslog(LOG_INFO, "ethernet mismatch", sia, sea, sha,
148 +                        interface);
149                 return;
150         }
151  
152         /* Got a live one */
153         t = h->ts.tv_sec;
154         can_checkpoint = 0;
155 -       if (!ent_add(sia, sea, t, NULL))
156 -               syslog(LOG_ERR, "ent_add(%s, %s, %ld) failed",
157 -                   intoa(sia), e2str(sea), t);
158 +       if (!ent_add(sia, sea, t, NULL, interface))
159 +               syslog(LOG_ERR, "ent_add(%s, %s, %ld, %s) failed",
160 +                   intoa(sia), e2str(sea), t, interface);
161         can_checkpoint = 1;
162  }
163  
164 @@ -550,29 +561,31 @@
165  
166         /* Watch for bogons */
167         if (isbogon(sia)) {
168 -               dosyslog(LOG_INFO, "bogon", sia, sea, sha);
169 -               return;
170 +               dosyslog(LOG_INFO, "bogon", sia, sea, sha, interface);
171 +               if (!allsubnets) return;
172         }
173  
174         /* Watch for ethernet broadcast */
175         if (MEMCMP(sea, zero, 6) == 0 || MEMCMP(sea, allones, 6) == 0 ||
176             MEMCMP(sha, zero, 6) == 0 || MEMCMP(sha, allones, 6) == 0) {
177 -               dosyslog(LOG_INFO, "ethernet broadcast", sia, sea, sha);
178 +               dosyslog(LOG_INFO, "ethernet broadcast", sia, sea, sha,
179 +                        interface);
180                 return;
181         }
182  
183         /* Double check ethernet addresses */
184         if (MEMCMP(sea, sha, 6) != 0) {
185 -               dosyslog(LOG_INFO, "ethernet mismatch", sia, sea, sha);
186 +               dosyslog(LOG_INFO, "ethernet mismatch", sia, sea, sha,
187 +                        interface);
188                 return;
189         }
190  
191         /* Got a live one */
192         t = h->ts.tv_sec;
193         can_checkpoint = 0;
194 -       if (!ent_add(sia, sea, t, NULL))
195 -               syslog(LOG_ERR, "ent_add(%s, %s, %ld) failed",
196 -                   intoa(sia), e2str(sea), t);
197 +       if (!ent_add(sia, sea, t, NULL, interface))
198 +               syslog(LOG_ERR, "ent_add(%s, %s, %ld, %s) failed",
199 +                   intoa(sia), e2str(sea), t, interface);
200         can_checkpoint = 1;
201  }
202  
203 @@ -785,6 +798,9 @@
204                 "[-r file] "
205                 /**/
206                 /**/
207 +               "[-a] "
208 +               /**/
209 +               /**/
210                 "\n"
211         ;
212  
213 Index: arpwatch/db.c
214 diff -u arpwatch/db.c:1.1.1.1 arpwatch/db.c:1.1.1.1.8.1
215 --- arpwatch/db.c:1.1.1.1       Tue Apr 17 13:31:36 2001
216 +++ arpwatch/db.c       Fri Aug 13 02:17:33 2004
217 @@ -64,6 +64,7 @@
218         u_char e[6];            /* ether address */
219         char h[34];             /* simple hostname */
220         time_t t;               /* timestamp */
221 +       char i[16];             /* interface */
222  };
223  
224  /* Address info */
225 @@ -80,13 +81,14 @@
226  
227  static void alist_alloc(struct ainfo *);
228  int cmpeinfo(const void *, const void *);
229 -static struct einfo *elist_alloc(u_int32_t, u_char *, time_t, char *);
230 +static struct einfo *elist_alloc(u_int32_t, u_char *, time_t, char *, char *);
231  static struct ainfo *ainfo_find(u_int32_t);
232  static void check_hname(struct ainfo *);
233  struct ainfo *newainfo(void);
234  
235  int
236 -ent_add(register u_int32_t a, register u_char *e, time_t t, register char *h)
237 +ent_add(register u_int32_t a, register u_char *e, time_t t, register char *h,
238 +       char *interface)
239  {
240         register struct ainfo *ap;
241         register struct einfo *ep;
242 @@ -103,7 +105,8 @@
243                 ep = ap->elist[0];
244                 if (MEMCMP(e, ep->e, 6) == 0) {
245                         if (t - ep->t > NEWACTIVITY_DELTA) {
246 -                               report("new activity", a, e, NULL, &t, &ep->t);
247 +                               report("new activity", a, e, NULL, &t, &ep->t,
248 +                                      interface);
249                                 check_hname(ap);
250                         }
251                         ep->t = t;
252 @@ -114,8 +117,8 @@
253         /* Check for a virgin ainfo record */
254         if (ap->ecount == 0) {
255                 ap->ecount = 1;
256 -               ap->elist[0] = elist_alloc(a, e, t, h);
257 -               report("new station", a, e, NULL, &t, NULL);
258 +               ap->elist[0] = elist_alloc(a, e, t, h, interface);
259 +               report("new station", a, e, NULL, &t, NULL, interface);
260                 return (1);
261         }
262  
263 @@ -133,9 +136,11 @@
264                         if (t - t2 < FLIPFLIP_DELTA &&
265                             (isdecnet(e) || isdecnet(e2)))
266                                 dosyslog(LOG_INFO,
267 -                                   "suppressed DECnet flip flop", a, e, e2);
268 +                                   "suppressed DECnet flip flop", a, e, e2,
269 +                                   interface);
270                         else
271 -                               report("flip flop", a, e, e2, &t, &t2);
272 +                               report("flip flop", a, e, e2, &t, &t2,
273 +                                      interface);
274                         ap->elist[1] = ap->elist[0];
275                         ap->elist[0] = ep;
276                         ep->t = t;
277 @@ -151,7 +156,7 @@
278                         e2 = ap->elist[0]->e;
279                         t2 = ap->elist[0]->t;
280                         dosyslog(LOG_NOTICE, "reused old ethernet address",
281 -                           a, e, e2);
282 +                           a, e, e2, interface);
283                         /* Shift entries down */
284                         len = i * sizeof(ap->elist[0]);
285                         BCOPY(&ap->elist[0], &ap->elist[1], len);
286 @@ -165,12 +170,12 @@
287         /* New ether address */
288         e2 = ap->elist[0]->e;
289         t2 = ap->elist[0]->t;
290 -       report("changed ethernet address", a, e, e2, &t, &t2);
291 +       report("changed ethernet address", a, e, e2, &t, &t2, interface);
292         /* Make room at head of list */
293         alist_alloc(ap);
294         len = ap->ecount * sizeof(ap->elist[0]);
295         BCOPY(&ap->elist[0], &ap->elist[1], len);
296 -       ap->elist[0] = elist_alloc(a, e, t, h);
297 +       ap->elist[0] = elist_alloc(a, e, t, h, interface);
298         ++ap->ecount;
299         return (1);
300  }
301 @@ -227,7 +232,7 @@
302                 for (ap = &ainfo_table[i]; ap != NULL; ap = ap->next)
303                         for (j = 0; j < ap->ecount; ++j) {
304                                 ep = ap->elist[j];
305 -                               (*fn)(ap->a, ep->e, ep->t, ep->h);
306 +                               (*fn)(ap->a, ep->e, ep->t, ep->h, ep->i);
307                                 ++n;
308                         }
309         return (n);
310 @@ -259,7 +264,7 @@
311  /* Allocate and initialize a elist struct */
312  static struct einfo *
313  elist_alloc(register u_int32_t a, register u_char *e, register time_t t,
314 -    register char *h)
315 +    register char *h, char *interface)
316  {
317         register struct einfo *ep;
318         register u_int size;
319 @@ -286,6 +291,8 @@
320         if (h != NULL && !isdigit((int)*h))
321                 strcpy(ep->h, h);
322         ep->t = t;
323 +       if (interface != NULL)
324 +               strncpy(ep->i, interface, 16);
325         return (ep);
326  }
327  
328 Index: arpwatch/db.h
329 diff -u arpwatch/db.h:1.1.1.1 arpwatch/db.h:1.1.1.1.8.1
330 --- arpwatch/db.h:1.1.1.1       Tue Apr 17 13:31:36 2001
331 +++ arpwatch/db.h       Fri Aug 13 02:17:33 2004
332 @@ -1,10 +1,10 @@
333  /* @(#) $Header$ (LBL) */
334  
335 -typedef void (*ent_process)(u_int32_t, u_char *, time_t, char *);
336 +typedef void (*ent_process)(u_int32_t, u_char *, time_t, char *, char *);
337  
338  #ifdef DEBUG
339  void   debugdump(void);
340  #endif
341 -int    ent_add(u_int32_t, u_char *, time_t, char *);
342 +int    ent_add(u_int32_t, u_char *, time_t, char *, char *);
343  int    ent_loop(ent_process);
344  void   sorteinfo(void);
345 Index: arpwatch/file.c
346 diff -u arpwatch/file.c:1.1.1.1 arpwatch/file.c:1.1.1.1.8.1
347 --- arpwatch/file.c:1.1.1.1     Tue Apr 17 13:31:37 2001
348 +++ arpwatch/file.c     Fri Aug 13 02:17:33 2004
349 @@ -69,6 +69,7 @@
350         u_int32_t a;
351         register time_t t;
352         register struct hostent *hp;
353 +       char *interface;
354         char line[1024];
355         u_char e[6];
356  
357 @@ -117,6 +118,7 @@
358                 if (cp2 == NULL) {
359                         t = 0;
360                         h = NULL;
361 +                       interface = NULL;
362                 } else {
363                         t = atoi(cp2);
364                         h = strchr(cp2, '\t');
365 @@ -126,11 +128,18 @@
366                                 while (*cp2 != '\n' && *cp2 != '\t' &&
367                                     *cp2 != '\0')
368                                         ++cp2;
369 +                               if (*cp2 == '\t') {
370 +                                   *cp2++ = '\0';
371 +                                   while (*cp2 != '\n' && *cp2 != '\t' &&
372 +                                          *cp2 != '\0') ++cp2;
373 +                               } else {
374 +                                   interface = NULL;
375 +                               }
376                                 *cp2 = '\0';
377                         }
378                 }
379  
380 -               if (!(*fn)(a, e, t, h))
381 +               if (!(*fn)(a, e, t, h, interface))
382                         return(0);
383         }
384  
385 Index: arpwatch/file.h
386 diff -u arpwatch/file.h:1.1.1.1 arpwatch/file.h:1.1.1.1.8.1
387 --- arpwatch/file.h:1.1.1.1     Tue Apr 17 13:31:37 2001
388 +++ arpwatch/file.h     Fri Aug 13 02:17:33 2004
389 @@ -1,5 +1,5 @@
390  /* @(#) $Header$ (LBL) */
391  
392 -typedef int (*file_process)(u_int32_t, u_char *, time_t, char *);
393 +typedef int (*file_process)(u_int32_t, u_char *, time_t, char *, char *);
394  
395  int file_loop(FILE *, file_process, const char *);
396 Index: arpwatch/report.c
397 diff -u arpwatch/report.c:1.1.1.1 arpwatch/report.c:1.1.1.1.8.1
398 --- arpwatch/report.c:1.1.1.1   Tue Apr 17 13:31:37 2001
399 +++ arpwatch/report.c   Fri Aug 13 02:17:33 2004
400 @@ -233,7 +233,8 @@
401  
402  void
403  report(register char *title, register u_int32_t a, register u_char *e1,
404 -    register u_char *e2, register time_t *t1p, register time_t *t2p)
405 +    register u_char *e2, register time_t *t1p, register time_t *t2p,
406 +    char *interface)
407  {
408         register char *cp, *hn;
409         register int fd, pid;
410 @@ -253,7 +254,7 @@
411  
412         if (debug) {
413                 if (debug > 1) {
414 -                       dosyslog(LOG_NOTICE, title, a, e1, e2);
415 +                       dosyslog(LOG_NOTICE, title, a, e1, e2, interface);
416                         return;
417                 }
418                 f = stdout;
419 @@ -270,7 +271,7 @@
420                 }
421  
422                 /* Syslog this event too */
423 -               dosyslog(LOG_NOTICE, title, a, e1, e2);
424 +               dosyslog(LOG_NOTICE, title, a, e1, e2, interface);
425  
426                 /* Update child depth */
427                 ++cdepth;
428 @@ -302,16 +303,19 @@
429  
430         (void)fprintf(f, "From: %s\n", watchee);
431         (void)fprintf(f, "To: %s\n", watcher);
432 +       if (interface == NULL) interface = ""; /* shouldn't happen */
433         hn = gethname(a);
434         if (!isdigit(*hn))
435 -               (void)fprintf(f, "Subject: %s (%s)\n", title, hn);
436 +               (void)fprintf(f, "Subject: %s (%s) %s\n", title, hn,
437 +                             interface);
438         else {
439 -               (void)fprintf(f, "Subject: %s\n", title);
440 +               (void)fprintf(f, "Subject: %s %s\n", title, interface);
441                 hn = unknown;
442         }
443         (void)putc('\n', f);
444         (void)fprintf(f, fmt, "hostname", hn);
445         (void)fprintf(f, fmt, "ip address", intoa(a));
446 +       (void)fprintf(f, fmt, "interface", interface);
447         (void)fprintf(f, fmt, "ethernet address", e2str(e1));
448         if ((cp = ec_find(e1)) == NULL)
449                 cp = unknown;
450 Index: arpwatch/report.h
451 diff -u arpwatch/report.h:1.1.1.1 arpwatch/report.h:1.1.1.1.8.1
452 --- arpwatch/report.h:1.1.1.1   Tue Apr 17 13:31:37 2001
453 +++ arpwatch/report.h   Fri Aug 13 02:17:33 2004
454 @@ -1,3 +1,3 @@
455  /* @(#) $Header$ (LBL) */
456  
457 -void report(char *, u_int32_t, u_char *, u_char *, time_t *, time_t *);
458 +void report(char *, u_int32_t, u_char *, u_char *, time_t *, time_t *, char *);
459 Index: arpwatch/util.c
460 diff -u arpwatch/util.c:1.1.1.1.2.2 arpwatch/util.c:1.1.1.1.8.5
461 --- arpwatch/util.c:1.1.1.1.2.2 Fri Aug 13 00:06:49 2004
462 +++ arpwatch/util.c     Fri Aug 13 02:17:33 2004
463 @@ -63,11 +63,14 @@
464  int initializing = 1;                  /* true if initializing */
465  /**/
466  /**/
467 +int allsubnets = 0;                    /* watch all attached subnets */
468 +/**/
469 +/**/
470  
471  /* syslog() helper routine */
472  void
473  dosyslog(register int p, register char *s, register u_int32_t a,
474 -    register u_char *ea, register u_char *ha)
475 +    register u_char *ea, register u_char *ha, char *interface)
476  {
477         char xbuf[64];
478  
479 @@ -84,23 +87,21 @@
480         }
481  
482         if (debug)
483 -               fprintf(stderr, "%s: %s %s %s\n", prog, s, intoa(a), xbuf);
484 +               fprintf(stderr, "%s: %s %s %s %s\n", prog, s, intoa(a),
485 +                       xbuf, interface);
486         else
487 -               syslog(p, "%s %s %s", s, intoa(a), xbuf);
488 +               syslog(p, "%s %s %s %s", s, intoa(a), xbuf, interface);
489  }
490  
491  static FILE *dumpf;
492  
493  void
494  dumpone(register u_int32_t a, register u_char *e, register time_t t,
495 -    register char *h)
496 +    register char *h, char *interface)
497  {
498 -       (void)fprintf(dumpf, "%s\t%s", e2str(e), intoa(a));
499 -       if (t != 0 || h != NULL)
500 -               (void)fprintf(dumpf, "\t%u", (u_int32_t)t);
501 -       if (h != NULL && *h != '\0')
502 -               (void)fprintf(dumpf, "\t%s", h);
503 -       (void)putc('\n', dumpf);
504 +       (void)fprintf(dumpf, "%s\t%s\t%u\t%s\t%s\n", e2str(e), intoa(a),
505 +                     (u_int32_t)t, ((h != NULL)?h:""),
506 +                     ((interface != NULL)?interface:""));
507  }
508  
509  int
510 Index: arpwatch/util.h
511 diff -u arpwatch/util.h:1.1.1.1.2.1 arpwatch/util.h:1.1.1.1.8.4
512 --- arpwatch/util.h:1.1.1.1.2.1 Fri Aug 13 00:06:49 2004
513 +++ arpwatch/util.h     Fri Aug 13 02:17:33 2004
514 @@ -1,8 +1,8 @@
515  /* @(#) $Header$ (LBL) */
516  
517 -void   dosyslog(int, char *, u_int32_t, u_char *, u_char *);
518 +void   dosyslog(int, char *, u_int32_t, u_char *, u_char *, char *);
519  int    dump(void);
520 -void   dumpone(u_int32_t, u_char *, time_t, char *);
521 +void   dumpone(u_int32_t, u_char *, time_t, char *, char *);
522  int    readdata(void);
523  char   *savestr(const char *);
524  
525 @@ -19,3 +19,6 @@
526  extern int initializing;
527  /**/
528  /**/
529 +extern int allsubnets;
530 +/**/
531 +/**/
This page took 0.586798 seconds and 3 git commands to generate.