diff options
Diffstat (limited to 'security')
-rw-r--r-- | security/fragroute/patches/patch-fragroute.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/security/fragroute/patches/patch-fragroute.c b/security/fragroute/patches/patch-fragroute.c new file mode 100644 index 00000000000..f8dc691ade5 --- /dev/null +++ b/security/fragroute/patches/patch-fragroute.c @@ -0,0 +1,78 @@ +$NetBSD: patch-fragroute.c,v 1.1 2013/05/23 16:02:13 christos Exp $ +In the unix case, don't use the obsolete libevent signal interface + +--- fragroute.c.orig 2002-04-07 18:55:20.000000000 -0400 ++++ fragroute.c 2013-05-23 11:59:52.000000000 -0400 +@@ -36,10 +36,6 @@ + + static struct fr_ctx ctx; + +-/* XXX - these should be in event.h */ +-extern int (*event_sigcb)(void); +-extern int event_gotsig; +- + static void + usage(void) + { +@@ -136,6 +132,10 @@ + } + + #ifdef WIN32 ++/* XXX - these should be in event.h */ ++extern int (*event_sigcb)(void); ++extern int event_gotsig; ++ + static BOOL CALLBACK + fragroute_signal(DWORD sig) + { +@@ -144,12 +144,25 @@ + return (TRUE); + } + #else ++ + static void +-fragroute_signal(int sig) ++fragroute_signal(evutil_socket_t fd, short what, void *arg) + { ++ int sig; ++ recv(fd, &sig, sizeof(sig), 0); + warnx("exiting on signal %d", sig); +- event_gotsig++; ++ exit(sig); + } ++ ++static void ++addsignal(int sig) { ++ struct event sig_ev; ++ int got; ++ ++ evsignal_set(&sig_ev, sig, fragroute_signal, &got); ++ evsignal_add(&sig_ev, NULL); ++} ++ + #endif + + static void +@@ -165,9 +178,6 @@ + err(1, "couldn't initialize Winsock"); + + SetConsoleCtrlHandler(fragroute_signal, TRUE); +-#else +- signal(SIGINT, fragroute_signal); +- signal(SIGTERM, fragroute_signal); + #endif + if (addr_aton(dst, &ctx.dst) < 0) + err(1, "destination address invalid"); +@@ -178,7 +188,12 @@ + pkt_init(128); + + event_init(); ++#ifdef WIN32 + event_sigcb = fragroute_close; ++#else ++ addsignal(SIGINT); ++ addsignal(SIGTERM); ++#endif + + if ((ctx.arp = arp_open()) == NULL || + (ctx.intf = intf_open()) == NULL || |