summaryrefslogtreecommitdiff
path: root/security
diff options
context:
space:
mode:
authorchristos <christos>2013-05-23 16:02:13 +0000
committerchristos <christos>2013-05-23 16:02:13 +0000
commit585080b989becd6954563e212b1612fc82b4c408 (patch)
tree055c7b7cebe9ad1bc7c267f29c0016dcea69117a /security
parente27e0ea2103a80faa90a7ac89619b20bc61c9b50 (diff)
downloadpkgsrc-585080b989becd6954563e212b1612fc82b4c408.tar.gz
and commit the actual patch
Diffstat (limited to 'security')
-rw-r--r--security/fragroute/patches/patch-fragroute.c78
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 ||