summaryrefslogtreecommitdiff
path: root/network/netcat-openbsd/patches/0007-udp-scan-timeout.patch
diff options
context:
space:
mode:
Diffstat (limited to 'network/netcat-openbsd/patches/0007-udp-scan-timeout.patch')
-rw-r--r--network/netcat-openbsd/patches/0007-udp-scan-timeout.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/network/netcat-openbsd/patches/0007-udp-scan-timeout.patch b/network/netcat-openbsd/patches/0007-udp-scan-timeout.patch
new file mode 100644
index 0000000000..c63775a495
--- /dev/null
+++ b/network/netcat-openbsd/patches/0007-udp-scan-timeout.patch
@@ -0,0 +1,60 @@
+From: Aron Xu <aron@debian.org>
+Date: Mon, 13 Feb 2012 15:29:37 +0800
+Subject: udp scan timeout
+
+---
+ netcat.c | 25 ++++++++++++++++---------
+ 1 file changed, 16 insertions(+), 9 deletions(-)
+
+diff --git a/netcat.c b/netcat.c
+index 29ecf1a..baab909 100644
+--- a/netcat.c
++++ b/netcat.c
+@@ -111,6 +111,8 @@
+ #define CONNECTION_FAILED 1
+ #define CONNECTION_TIMEOUT 2
+
++#define UDP_SCAN_TIMEOUT 3 /* Seconds */
++
+ /* Command Line Options */
+ int Cflag = 0; /* CRLF line-ending */
+ int dflag; /* detached, no stdin */
+@@ -497,7 +499,7 @@ main(int argc, char *argv[])
+ continue;
+
+ ret = 0;
+- if (vflag || zflag) {
++ if (vflag) {
+ /* For UDP, make sure we are connected. */
+ if (uflag) {
+ if (udptest(s) == -1) {
+@@ -1057,15 +1059,20 @@ build_ports(char *p)
+ int
+ udptest(int s)
+ {
+- int i, ret;
+-
+- for (i = 0; i <= 3; i++) {
+- if (write(s, "X", 1) == 1)
+- ret = 1;
+- else
+- ret = -1;
++ int i, t;
++
++ if ((write(s, "X", 1) != 1) ||
++ ((write(s, "X", 1) != 1) && (errno == ECONNREFUSED)))
++ return -1;
++
++ /* Give the remote host some time to reply. */
++ for (i = 0, t = (timeout == -1) ? UDP_SCAN_TIMEOUT : (timeout / 1000);
++ i < t; i++) {
++ sleep(1);
++ if ((write(s, "X", 1) != 1) && (errno == ECONNREFUSED))
++ return -1;
+ }
+- return (ret);
++ return 1;
+ }
+
+ void
+--