diff options
-rw-r--r-- | package/tcpdump/tcpdump-4.1.1-vfork.patch | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/package/tcpdump/tcpdump-4.1.1-vfork.patch b/package/tcpdump/tcpdump-4.1.1-vfork.patch new file mode 100644 index 000000000..8213f35f5 --- /dev/null +++ b/package/tcpdump/tcpdump-4.1.1-vfork.patch @@ -0,0 +1,127 @@ +https://sourceforge.net/tracker/?func=detail&aid=3120897&group_id=53066&atid=469575 + +From 6f8927c609d1f986a45010b7acae0eb570668642 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger <vapier@gentoo.org> +Date: Sat, 27 Nov 2010 17:18:05 -0500 +Subject: [PATCH] add support for nommu systems + +Rather than hardcode the WIN32 define, add proper fork checks to the +configure script and check those. This fixes building for nommu systems +which lack the fork function. + +While we're here though, add support for this functionality via vfork +so that it does work on nommu systems. And fix an old bug where we +exit properly in the forked child when the exec failed instead of just +returning to the calling code (which isn't expecting it). + +Signed-off-by: Mike Frysinger <vapier@gentoo.org> +--- + +--- tcpdump-4.0.0/config.h.in ++++ tcpdump-4.0.0/config.h.in +@@ -151,6 +151,9 @@ + /* Define to 1 if you have the <fcntl.h> header file. */ + #undef HAVE_FCNTL_H + ++/* Define to 1 if you have the `fork' function. */ ++#undef HAVE_FORK ++ + /* Define to 1 if you have the `getnameinfo' function. */ + #undef HAVE_GETNAMEINFO + +@@ -274,6 +277,9 @@ + /* Define to 1 if you have the <unistd.h> header file. */ + #undef HAVE_UNISTD_H + ++/* Define to 1 if you have the `vfork' function. */ ++#undef HAVE_VFORK ++ + /* Define to 1 if you have the `vfprintf' function. */ + #undef HAVE_VFPRINTF + +--- tcpdump-4.0.0/configure ++++ tcpdump-4.0.0/configure +@@ -7976,7 +7976,7 @@ done + + + +-for ac_func in strftime ++for ac_func in fork vfork strftime + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` + { echo "$as_me:$LINENO: checking for $ac_func" >&5 +diff --git a/tcpdump.c b/tcpdump.c +index c8da36b..abf3e69 100644 +--- a/tcpdump.c ++++ b/tcpdump.c +@@ -1250,8 +1250,10 @@ main(int argc, char **argv) + (void)setsignal(SIGPIPE, cleanup); + (void)setsignal(SIGTERM, cleanup); + (void)setsignal(SIGINT, cleanup); +- (void)setsignal(SIGCHLD, child_cleanup); + #endif /* WIN32 */ ++#if defined(HAVE_FORK) || defined(HAVE_VFORK) ++ (void)setsignal(SIGCHLD, child_cleanup); ++#endif + /* Cooperate with nohup(1) */ + #ifndef WIN32 + if ((oldhandler = setsignal(SIGHUP, cleanup)) != SIG_DFL) +@@ -1464,13 +1466,13 @@ cleanup(int signo _U_) + On windows, we do not use a fork, so we do not care less about + waiting a child processes to die + */ +-#ifndef WIN32 ++#if defined(HAVE_FORK) || defined(HAVE_VFORK) + static RETSIGTYPE + child_cleanup(int signo _U_) + { + wait(NULL); + } +-#endif /* WIN32 */ ++#endif /* HAVE_FORK || HAVE_VFORK */ + + static void + info(register int verbose) +@@ -1514,11 +1516,15 @@ info(register int verbose) + infoprint = 0; + } + +-#ifndef WIN32 ++#if defined(HAVE_FORK) || defined(HAVE_VFORK) + static void + compress_savefile(const char *filename) + { ++# ifdef HAVE_FORK + if (fork()) ++# else ++ if (vfork()) ++# endif + return; + /* + * Set to lowest priority so that this doesn't disturb the capture +@@ -1534,15 +1540,20 @@ compress_savefile(const char *filename) + zflag, + filename, + strerror(errno)); ++# ifdef HAVE_FORK ++ exit(1); ++# else ++ _exit(1); ++# endif + } +-#else /* WIN32 */ ++#else /* HAVE_FORK || HAVE_VFORK */ + static void + compress_savefile(const char *filename) + { + fprintf(stderr, +- "compress_savefile failed. Functionality not implemented under windows\n"); ++ "compress_savefile failed. Functionality not implemented under your system\n"); + } +-#endif /* WIN32 */ ++#endif /* HAVE_FORK || HAVE_VFORK */ + + static void + dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) +-- +1.7.3.1 |