]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tcpdump.c
CI: Copy build_common.sh from tcpslice. [skip ci]
[tcpdump] / tcpdump.c
index 08e038963ec02920bc42b3e2bf88bc8f98dc5fd8..b0d3aa5bd6deb1de1edf579b8fbb4f5ac6494ada 100644 (file)
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -38,7 +38,7 @@
 #endif
 
 /*
- * Some older versions of Mac OS X may ship pcap.h from libpcap 0.6 with a
+ * Some older versions of Mac OS X ship pcap.h from libpcap 0.6 with a
  * libpcap based on 0.8.  That means it has pcap_findalldevs() but the
  * header doesn't define pcap_if_t, meaning that we can't actually *use*
  * pcap_findalldevs().
@@ -916,6 +916,7 @@ capdns_setup(void)
        if (cap_dns_type_limit(capdnsloc, types, 1) < 0)
                error("unable to limit access to system.dns service");
        families[0] = AF_INET;
+       /* Casper is a feature of FreeBSD, which defines AF_INET6. */
        families[1] = AF_INET6;
        if (cap_dns_family_limit(capdnsloc, families, 2) < 0)
                error("unable to limit access to system.dns service");
@@ -2711,6 +2712,8 @@ DIAG_ON_ASSIGN_ENUM
                                         */
                                        dlt = new_dlt;
                                        ndo->ndo_if_printer = get_if_printer(dlt);
+                                       /* Free the old filter */
+                                       pcap_freecode(&fcode);
                                        if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0)
                                                error("%s", pcap_geterr(pd));
                                }
@@ -2833,7 +2836,7 @@ cleanup(int signo _U_)
 static void
 child_cleanup(int signo _U_)
 {
-  wait(NULL);
+  while (waitpid(-1, NULL, WNOHANG) >= 0);
 }
 #endif /* HAVE_FORK && HAVE_VFORK */