From 3a368567d8f1bcf4935151dfaf5759453c67d1e6 Mon Sep 17 00:00:00 2001 From: Leonardo Arena Date: Mon, 10 Apr 2017 14:38:03 +0000 Subject: main/netcat-openbsd: upgrade to 1.130, disable check(), modernize APKBUILD --- main/netcat-openbsd/0005-quit-timer.patch | 140 ++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 main/netcat-openbsd/0005-quit-timer.patch (limited to 'main/netcat-openbsd/0005-quit-timer.patch') diff --git a/main/netcat-openbsd/0005-quit-timer.patch b/main/netcat-openbsd/0005-quit-timer.patch new file mode 100644 index 0000000000..a4b3fa6bd8 --- /dev/null +++ b/main/netcat-openbsd/0005-quit-timer.patch @@ -0,0 +1,140 @@ +From: Aron Xu +Date: Mon, 13 Feb 2012 15:16:04 +0800 +Subject: quit timer + +--- + nc.1 | 5 +++++ + netcat.c | 52 +++++++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 48 insertions(+), 9 deletions(-) + +diff --git a/nc.1 b/nc.1 +index 746d3b6..1ee6887 100644 +--- a/nc.1 ++++ b/nc.1 +@@ -40,6 +40,7 @@ + .Op Fl O Ar length + .Op Fl P Ar proxy_username + .Op Fl p Ar source_port ++.Op Fl q Ar seconds + .Op Fl s Ar source + .Op Fl T Ar toskeyword + .Op Fl V Ar rtable +@@ -171,6 +172,15 @@ Proxy authentication is only supported for HTTP CONNECT proxies at present. + Specifies the source port + .Nm + should use, subject to privilege restrictions and availability. ++.It Fl q Ar seconds ++after EOF on stdin, wait the specified number of ++.Ar seconds ++and then quit. If ++.Ar seconds ++is negative, wait forever (default). Specifying a non-negative ++.Ar seconds ++implies ++.Fl N . + .It Fl r + Specifies that source and/or destination ports should be chosen randomly + instead of sequentially within a range or in the order that the system +diff --git a/netcat.c b/netcat.c +index 1c90145..7572bb2 100644 +--- a/netcat.c ++++ b/netcat.c +@@ -128,6 +128,7 @@ int Nflag; /* shutdown() network socket */ + int nflag; /* Don't do name look up */ + char *Pflag; /* Proxy username */ + char *pflag; /* Localport flag */ ++int qflag = -1; /* Quit after some secs */ + int rflag; /* Random ports flag */ + char *sflag; /* Source Address */ + int tflag; /* Telnet Emulation */ +@@ -171,6 +172,8 @@ ssize_t fillbuf(int, unsigned char *, size_t *); + static int connect_with_timeout(int fd, const struct sockaddr *sa, + socklen_t salen, int ctimeout); + ++static void quit(); ++ + int + main(int argc, char *argv[]) + { +@@ -195,7 +198,7 @@ main(int argc, char *argv[]) + signal(SIGPIPE, SIG_IGN); + + while ((ch = getopt(argc, argv, +- "46CDdFhI:i:klNnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) { ++ "46CDdFhI:i:klNnO:P:p:q:rSs:tT:UuV:vw:X:x:z")) != -1) { + switch (ch) { + case '4': + family = AF_INET; +@@ -248,6 +251,13 @@ main(int argc, char *argv[]) + case 'p': + pflag = optarg; + break; ++ case 'q': ++ qflag = strtonum(optarg, INT_MIN, INT_MAX, &errstr); ++ if (errstr) ++ errx(1, "quit timer %s: %s", errstr, optarg); ++ if (qflag >= 0) ++ Nflag = 1; ++ break; + case 'r': + rflag = 1; + break; +@@ -918,18 +928,26 @@ readwrite(int net_fd) + if (pfd[POLL_STDIN].fd == -1 && pfd[POLL_NETIN].fd == -1 + && stdinbufpos == 0 && netinbufpos == 0) { + close(net_fd); +- return; ++ if (qflag <= 0) ++ return; ++ goto delay_exit; + } + /* both outputs are gone, we can't continue */ + if (pfd[POLL_NETOUT].fd == -1 && pfd[POLL_STDOUT].fd == -1) { + close(net_fd); +- return; ++ if (qflag <= 0) ++ return; ++ goto delay_exit; + } + /* listen and net in gone, queues empty, done */ + if (lflag && pfd[POLL_NETIN].fd == -1 + && stdinbufpos == 0 && netinbufpos == 0) { + close(net_fd); +- return; ++ if (qflag <= 0) ++ return; ++delay_exit: ++ signal(SIGALRM, quit); ++ alarm(qflag); + } + + /* poll */ +@@ -1436,6 +1454,7 @@ help(void) + \t-O length TCP send buffer length\n\ + \t-P proxyuser\tUsername for proxy authentication\n\ + \t-p port\t Specify local port for remote connects\n\ ++ \t-q secs\t quit after EOF on stdin and delay of secs\n\ + \t-r Randomize remote ports\n\ + \t-S Enable the TCP MD5 signature option\n\ + \t-s addr\t Local source address\n\ +@@ -1458,9 +1477,18 @@ usage(int ret) + { + fprintf(stderr, + "usage: nc [-46CDdFhklNnrStUuvz] [-I length] [-i interval] [-O length]\n" +- "\t [-P proxy_username] [-p source_port] [-s source] [-T toskeyword]\n" +- "\t [-V rtable] [-w timeout] [-X proxy_protocol]\n" ++ "\t [-P proxy_username] [-p source_port] [-q seconds] [-s source]\n" ++ "\t [-T toskeyword] [-V rtable] [-w timeout] [-X proxy_protocol]\n" + "\t [-x proxy_address[:port]] [destination] [port]\n"); + if (ret) + exit(1); + } ++ ++/* ++ * quit() ++ * handler for a "-q" timeout (exit 0 instead of 1) ++ */ ++static void quit() ++{ ++ exit(0); ++} -- cgit v1.2.3