From befc39955506cb319ba97f15eef6380e273ee4bb Mon Sep 17 00:00:00 2001 From: Ales Ledvinka Date: Oct 15 2012 14:15:49 +0000 Subject: fix devlookup to start when -i interface specified --- diff --git a/arpwatch-2.1a15-lookupiselect.patch b/arpwatch-2.1a15-lookupiselect.patch new file mode 100644 index 0000000..cc3a5bd --- /dev/null +++ b/arpwatch-2.1a15-lookupiselect.patch @@ -0,0 +1,98 @@ +diff -up ./arpwatch.c.iselect ./arpwatch.c +--- ./arpwatch.c.iselect 2012-10-15 16:01:24.701335291 +0200 ++++ ./arpwatch.c 2012-10-15 16:07:18.626322639 +0200 +@@ -162,50 +162,52 @@ void dropprivileges(const char* user) + } + + char * +-get_first_dev(pcap_t **pd, int *linktype, char *errbuf) ++try_dev(char *interface, pcap_t **pd, int *linktype, char *errbuf) + { +- static char interface[IF_NAMESIZE + 1]; + register int snaplen, timeout; +- pcap_if_t *alldevs; +- pcap_if_t *dev; +- char *ret = NULL; + + snaplen = max(sizeof(struct ether_header), + sizeof(struct fddi_header)) + sizeof(struct ether_arp); + timeout = 1000; + +- if (pcap_findalldevs(&alldevs, errbuf) == -1) { +- (void)fprintf(stderr, "%s: lookup_device: %s\n", +- prog, errbuf); +- exit(1); ++ *pd = pcap_open_live(interface, snaplen, 1, timeout, errbuf); ++ if (NULL == pd) { ++ syslog(LOG_ERR, "pcap open %s: %s", interface, errbuf); ++ return NULL; + } ++ *linktype = pcap_datalink(*pd); ++ /* Must be ethernet or fddi */ ++ if (*linktype != DLT_EN10MB && *linktype != DLT_FDDI) { ++ syslog(LOG_ERR, "(%s) Link layer type %d not ethernet or fddi", ++ interface, *linktype); ++ pcap_close(*pd); ++ return NULL; ++ } ++ return interface; ++} + +- for (dev = alldevs; dev; dev = dev->next) { +- strncpy(interface, dev->name, strlen(dev->name)+1); +- +- *pd = pcap_open_live(interface, snaplen, 1, timeout, errbuf); +- if (*pd == NULL) { +- syslog(LOG_ERR, "pcap open %s: %s, trying next...", interface, errbuf); +- continue; +- /* exit(1); */ +- } ++char * ++iterate_dev(char *arginterface, pcap_t **pd, int *linktype, char *errbuf) ++{ ++ static char interface[IF_NAMESIZE + 1]; ++ pcap_if_t *alldevs; ++ pcap_if_t *dev; + +- *linktype = pcap_datalink(*pd); +- /* Must be ethernet or fddi */ +- if (*linktype != DLT_EN10MB && *linktype != DLT_FDDI) { +- syslog(LOG_ERR, "(%s) Link layer type %d not ethernet or fddi, trying next...", +- interface, *linktype); +- pcap_close(*pd); ++ if (NULL != arginterface) { ++ return try_dev(arginterface, pd, linktype, errbuf); ++ } else { ++ if (pcap_findalldevs(&alldevs, errbuf) == -1) { ++ (void)fprintf(stderr, "%s: lookup_device: %s\n", ++ prog, errbuf); ++ exit(1); + } +- else { +- /* First match, use it */ +- ret = interface; +- break; ++ for (dev = alldevs; dev && (arginterface == NULL); dev = dev->next) { ++ strncpy(interface, dev->name, strlen(dev->name)+1); ++ arginterface = try_dev(interface, pd, linktype, errbuf); + } +- ++ pcap_freealldevs(alldevs); ++ return arginterface; + } +- pcap_freealldevs(alldevs); +- return (ret); + } + + int +@@ -315,8 +317,8 @@ main(int argc, char **argv) + } else { + + /* Determine interface if not specified */ +- if (interface == NULL && +- (interface = get_first_dev(&pd, &linktype, errbuf)) == NULL) { ++ interface = iterate_dev(interface, &pd, &linktype, errbuf); ++ if (interface == NULL) { + (void)fprintf(stderr, "%s: lookup_device: no suitable interface found\n", + prog); + exit(1); diff --git a/arpwatch.spec b/arpwatch.spec index 1fcc43d..285c8fe 100644 --- a/arpwatch.spec +++ b/arpwatch.spec @@ -3,7 +3,7 @@ Name: arpwatch Epoch: 14 Version: 2.1a15 -Release: 23%{?dist} +Release: 24%{?dist} Summary: Network monitoring tools for tracking IP addresses on a network Group: Applications/System License: BSD with advertising @@ -35,6 +35,7 @@ Patch10: arpwatch-2.1a15-extraman.patch Patch11: arpwatch-exitcode.patch Patch12: arpwatch-2.1a15-dropgroup.patch Patch13: arpwatch-2.1a15-devlookup.patch +Patch14: arpwatch-2.1a15-lookupiselect.patch %description The arpwatch package contains arpwatch and arpsnmp. Arpwatch and @@ -62,6 +63,7 @@ network. %patch11 -p1 -b .exitcode %patch12 -p1 -b .dropgroup %patch13 -p1 -b .devlookup +%patch14 -p1 -b .iselect %build %configure @@ -139,6 +141,9 @@ fi %attr(-,arpwatch,arpwatch) %verify(not md5 size mtime) %config(noreplace) %{_vararpwatch}/ethercodes.dat %changelog +* Mon Oct 15 2012 Ales Ledvinka - 14:2.1a15-24 +- fix devlookup to start with -i interface specified (#842660) + * Wed Aug 22 2012 Jan Synáček - 14:2.1a15-23 - Add system-rpm macros (#850032)