summaryrefslogtreecommitdiffstats
path: root/source/n/nc/nc-110-21.diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--source/n/nc/nc-110-21.diff787
1 files changed, 787 insertions, 0 deletions
diff --git a/source/n/nc/nc-110-21.diff b/source/n/nc/nc-110-21.diff
new file mode 100644
index 000000000..ad5ae8ad6
--- /dev/null
+++ b/source/n/nc/nc-110-21.diff
@@ -0,0 +1,787 @@
+--- netcat-1.10.orig/Makefile
++++ netcat-1.10/Makefile
+@@ -14,8 +14,8 @@
+ XLIBS = # xtra libs if necessary?
+ # -Bstatic for sunos, -static for gcc, etc. You want this, trust me.
+ STATIC =
+-CC = cc $(CFLAGS)
+-LD = $(CC) -s # linker; defaults to stripped executables
++CC = gcc $(CFLAGS)
++LD = $(CC) # linker; defaults to unstripped executables
+ o = o # object extension
+
+ ALL = nc
+--- netcat-1.10.orig/debian/nc.1
++++ netcat-1.10/debian/nc.1
+@@ -0,0 +1,146 @@
++.TH NC 1
++.SH NAME
++nc \- TCP/IP swiss army knife
++.SH SYNOPSIS
++.B nc
++.I "[-options] hostname port[s] [ports] ..."
++.br
++.B nc
++.I "-l -p port [-options] [hostname] [port]"
++.SH "DESCRIPTION"
++.B netcat
++is a simple unix utility which reads and writes data across network
++connections, using TCP or UDP protocol. It is designed to be a
++reliable "back-end" tool that can be used directly or easily driven by
++other programs and scripts. At the same time, it is a feature-rich
++network debugging and exploration tool, since it can create almost any
++kind of connection you would need and has several interesting built-in
++capabilities. Netcat, or "nc" as the actual program is named, should
++have been supplied long ago as another one of those cryptic but
++standard Unix tools.
++.P
++In the simplest usage, "nc host port" creates a TCP connection to the
++given port on the given target host. Your standard input is then sent
++to the host, and anything that comes back across the connection is
++sent to your standard output. This continues indefinitely, until the
++network side of the connection shuts down. Note that this behavior is
++different from most other applications which shut everything down and
++exit after an end-of-file on the standard input.
++.P
++Netcat can also function as a server, by listening for inbound
++connections on arbitrary ports and then doing the same reading and
++writing. With minor limitations, netcat doesn't really care if it
++runs in "client" or "server" mode -- it still shovels data back and
++forth until there isn't any more left. In either mode, shutdown can be
++forced after a configurable time of inactivity on the network side.
++.P
++And it can do this via UDP too, so netcat is possibly the "udp
++telnet-like" application you always wanted for testing your UDP-mode
++servers. UDP, as the "U" implies, gives less reliable data
++transmission than TCP connections and some systems may have trouble
++sending large amounts of data that way, but it's still a useful
++capability to have.
++.P
++You may be asking "why not just use telnet to connect to arbitrary
++ports?" Valid question, and here are some reasons. Telnet has the
++"standard input EOF" problem, so one must introduce calculated delays
++in driving scripts to allow network output to finish. This is the
++main reason netcat stays running until the *network* side closes.
++Telnet also will not transfer arbitrary binary data, because certain
++characters are interpreted as telnet options and are thus removed from
++the data stream. Telnet also emits some of its diagnostic messages to
++standard output, where netcat keeps such things religiously separated
++from its *output* and will never modify any of the real data in
++transit unless you *really* want it to. And of course telnet is
++incapable of listening for inbound connections, or using UDP instead.
++Netcat doesn't have any of these limitations, is much smaller and
++faster than telnet, and has many other advantages.
++.SH OPTIONS
++.TP 13
++.I \-g gateway
++source-routing hop point[s], up to 8
++.TP 13
++.I \-G num
++source-routing pointer: 4, 8, 12, ...
++.TP 13
++.I \-h
++display help
++.TP 13
++.I \-i secs
++delay interval for lines sent, ports scanned
++.TP 13
++.I \-l
++listen mode, for inbound connects
++.TP 13
++.I \-n
++numeric-only IP addresses, no DNS
++.TP 13
++.I \-o file
++hex dump of traffic
++.TP 13
++.I \-p port
++local port number (port numbers can be individual or ranges: lo-hi
++[inclusive])
++.TP 13
++.I \-q seconds
++after EOF is detected, wait the specified number of seconds and then
++quit.
++.TP 13
++.I \-b
++allow UDP broadcasts
++.TP 13
++.I \-r
++randomize local and remote ports
++.TP 13
++.I \-s addr
++local source address
++.TP 13
++.I \-t
++enable telnet negotiation
++.TP 13
++.I \-e prog
++specify program to exec after connect (use with caution)
++.TP 13
++.I \-u
++UDP mode
++.TP 13
++.I \-v
++verbose [use twice to be more verbose]
++.TP 13
++.I \-w secs
++timeout for connects and final net reads
++.TP 13
++.I \-z
++zero-I/O mode [used for scanning]
++.SH COPYRIGHT
++Netcat is entirely my own creation, although plenty of other code was
++used as examples. It is freely given away to the Internet community
++in the hope that it will be useful, with no restrictions except giving
++credit where it is due. No GPLs, Berkeley copyrights or any of that
++nonsense. The author assumes NO responsibility for how anyone uses
++it. If netcat makes you rich somehow and you're feeling generous,
++mail me a check. If you are affiliated in any way with Microsoft
++Network, get a life. Always ski in control. Comments, questions, and
++patches to hobbit@avian.org.
++.SH BUGS
++Efforts have been made to have netcat "do the right thing" in all its
++various modes. If you believe that it is doing the wrong thing under
++whatever circumstances, please notify me and tell me how you think it
++should behave. If netcat is not able to do some task you think up,
++minor tweaks to the code will probably fix that. It provides a basic
++and easily-modified template for writing other network applications,
++and I certainly encourage people to make custom mods and send in any
++improvements they make to it. Continued feedback from the Internet
++community is always welcome!
++.P
++Some port names in /etc/services contain hyphens -- netcat currently
++will not correctly parse those, so specify ranges using numbers if you
++can.
++.SH "SEE ALSO"
++/usr/share/doc/netcat/README.gz
++.SH AUTHOR
++This manual page was written by Joey Hess <joeyh@debian.org> and
++Robert Woodcock <rcw@debian.org>, cribbing heavily from Netcat's
++README file.
++.P
++Netcat was written by a guy we know as the Hobbit <hobbit@avian.org>.
+--- netcat-1.10.orig/debian/control
++++ netcat-1.10/debian/control
+@@ -0,0 +1,18 @@
++Source: netcat
++Section: net
++Priority: optional
++Maintainer: Decklin Foster <decklin@red-bean.com>
++Standards-Version: 3.5.6
++Build-Depends: debhelper (>= 3.0.0)
++
++Package: netcat
++Architecture: any
++Depends: ${shlibs:Depends}
++Description: TCP/IP swiss army knife
++ A simple Unix utility which reads and writes data across network
++ connections using TCP or UDP protocol. It is designed to be a reliable
++ "back-end" tool that can be used directly or easily driven by other
++ programs and scripts. At the same time it is a feature-rich network
++ debugging and exploration tool, since it can create almost any kind of
++ connection you would need and has several interesting built-in
++ capabilities.
+--- netcat-1.10.orig/debian/netcat.examples
++++ netcat-1.10/debian/netcat.examples
+@@ -0,0 +1,2 @@
++data/
++scripts/
+--- netcat-1.10.orig/debian/rules
++++ netcat-1.10/debian/rules
+@@ -0,0 +1,64 @@
++#!/usr/bin/make -f
++# Sample debian/rules that uses debhelper.
++# This file is public domain software, originally written by Joey Hess.
++
++# Uncomment this to turn on verbose mode.
++#export DH_VERBOSE=1
++
++# This is the debhelper compatibility version to use.
++export DH_COMPAT=3
++
++DEB_CFLAGS = -O2
++ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
++DEB_CFLAGS += -g
++endif
++
++build: build-stamp
++build-stamp:
++ dh_testdir
++ $(MAKE) linux CFLAGS='$(DEB_CFLAGS)' STATIC='' \
++ DFLAGS='-DLINUX -DTELNET -DGAPING_SECURITY_HOLE'
++ touch build-stamp
++
++clean:
++ dh_testdir
++ dh_testroot
++ rm -f build-stamp
++ # Add here commands to clean up after the build process.
++ -$(MAKE) clean
++ dh_clean
++
++install:
++ dh_testdir
++ dh_testroot
++ dh_clean -k
++ dh_installdirs
++ install -m 0755 nc debian/netcat/usr/bin
++ ln -s nc debian/netcat/usr/bin/netcat
++
++# Build architecture-independent files here.
++binary-indep: build install
++# We have nothing to do by default.
++
++# Build architecture-dependent files here.
++binary-arch: build install
++ dh_testdir
++ dh_testroot
++ dh_installdocs
++ dh_installexamples
++# dh_installmenu
++ dh_installman
++ ln -s nc.1.gz debian/netcat/usr/share/man/man1/netcat.1.gz
++ dh_installchangelogs Changelog
++ dh_link
++ dh_strip
++ dh_compress -Xexamples
++ dh_fixperms
++ dh_installdeb
++ dh_shlibdeps
++ dh_gencontrol
++ dh_md5sums
++ dh_builddeb
++
++binary: binary-indep binary-arch
++.PHONY: build clean binary-indep binary-arch binary install
+--- netcat-1.10.orig/debian/netcat.copyright
++++ netcat-1.10/debian/netcat.copyright
+@@ -0,0 +1,12 @@
++The netcat Debian package was originally created by Michael Shields
++<shields@crosslink.net>. It is currently maintained by Decklin Foster
++<decklin@red-bean.com>.
++
++Netcat was written by *Hobbit* <hobbit@avian.org>, and can be
++downloaded from <URL:ftp://avian.org/src/hacks/>.
++
++The following permission statement is excerpted from `netcat.blurb':
++
++ Netcat and the associated package is a product of Avian Research,
++ and is freely available in full source form with no restrictions
++ save an obligation to give credit where due.
+--- netcat-1.10.orig/debian/changelog
++++ netcat-1.10/debian/changelog
+@@ -0,0 +1,157 @@
++netcat (1.10-21) unstable; urgency=low
++
++ * Documented -e in man page. (Closes: #131269)
++
++ -- Decklin Foster <decklin@red-bean.com> Tue, 29 Jan 2002 16:30:30 -0500
++
++netcat (1.10-20) unstable; urgency=low
++
++ * Moved around shutdown call in -q patch to be more compatible with standard
++ nc. Thanks to Dmitry Chernyak <cdl@inkasbank.ru> for pointing this out.
++ * Applied UDP broadcast patch from NetBSD (Closes: #108182)
++ - Updated man page to document this option
++ - Also applied patch to use inet_aton instead of IADDR_NONE (which is
++ obsolete), so that it will work.
++ * Bumped Standards-Version to 3.5.6
++
++ -- Decklin Foster <decklin@red-bean.com> Tue, 9 Oct 2001 18:08:24 -0400
++
++netcat (1.10-19) unstable; urgency=low
++
++ * Reupload source package (my typo fix was lost due to a misconfigured
++ dput). This should really fix #97583.
++
++ -- Decklin Foster <decklin@red-bean.com> Fri, 1 Jun 2001 18:18:17 -0400
++
++netcat (1.10-18) unstable; urgency=low
++
++ * Applied patch from Joe Pepin <jdp@ll.mit.edu> to fix multiple timeouts
++ (Closes: #97583)
++ * Lookup services with getservbyname even if resolving hostnames with DNS is
++ disabled (Closes: #98902)
++ * Install a symlink to the nc binary called 'netcat'. (Closes: #97625)
++
++ -- Decklin Foster <decklin@red-bean.com> Fri, 1 Jun 2001 13:13:25 -0400
++
++netcat (1.10-17) unstable; urgency=low
++
++ * Added include for <resolv.h>, which is needed to compile with recent
++ versions of glibc.
++ * Added patch to always print "connection refused" messages, without having
++ to turn on the other junk that -v prints. (Closes: #65413)
++ * Upgraded to debhelper 3 and policy 3.5.2.0.
++ * Added DEB_BUILD_OPTIONS =~ /debug/ support.
++
++ -- Decklin Foster <decklin@red-bean.com> Wed, 28 Feb 2001 16:53:33 -0500
++
++netcat (1.10-16) unstable; urgency=low
++
++ * Rebuild with dpkg 1.8.1.2 to fix bad .diff.gz
++
++ -- Decklin Foster <decklin@red-bean.com> Mon, 8 Jan 2001 14:54:48 -0500
++
++netcat (1.10-15) unstable; urgency=low
++
++ * Add shutdown() patch back in (Closes: #81384)
++ * updated /usr/doc -> /usr/share/doc in man page.
++
++ -- Decklin Foster <decklin@red-bean.com> Sat, 6 Jan 2001 08:58:21 -0500
++
++netcat (1.10-14) unstable; urgency=low
++
++ * Ship with -e turned on. (Closes: #66355)
++ * Fix debian/copyright typo.
++
++ -- Decklin Foster <decklin@red-bean.com> Sat, 30 Dec 2000 13:27:33 -0500
++
++netcat (1.10-13) unstable; urgency=low
++
++ * New maintainer. (Closes: #80305)
++ * Updated debhelper rules to v2. Also cleaned up/moved some targets and dh_*
++ options.
++ * Bumped Standards-Version to 3.2.1.0.
++ * Compress README file, as per policy.
++ * Applied -q patch properly (Closes: #62402). I think that this is also what
++ caused #71616, but I'll hold off on closing that one.
++ * Added README.Debian explanation about -e. This is possibly the problem
++ behind #66355, so maybe I can close that as well.
++
++ -- Decklin Foster <decklin@red-bean.com> Thu, 28 Dec 2000 19:02:56 -0500
++
++netcat (1.10-12.1) frozen unstable; urgency=low
++
++ * Non-maintained upload.
++ * Rename arm() to arm_timer() (Closes: #56390)
++
++ -- Edward Brocklesby <ejb@styx.uucp.openprojects.net> Tue, 22 Feb 2000 12:59:12 +0000
++
++netcat (1.10-12) unstable; urgency=low
++
++ * Fixed bugs #45669 and #45675 (removed extraneous sleep(1) command and also
++ removed the "punt!" message; added -q feature)
++
++ -- Robert S. Edmonds <stu@novare.net> Wed, 22 Sep 1999 19:29:47 -0400
++
++netcat (1.10-11) unstable; urgency=low
++
++ * Applied patch from Graham Stoney <greyham@research.canon.com.au> that
++ fixes deadlock if the server doesn't close its end until it reads EOF on
++ the connection
++
++ -- Robert S. Edmonds <stu@novare.net> Mon, 13 Sep 1999 21:53:59 -0400
++
++netcat (1.10-10) unstable; urgency=low
++
++ * Man page fixed (/usr/doc/netcat/README.gz). Fixes bug #35811
++
++ -- Robert S. Edmonds <edmonds@freewwweb.com> Sat, 12 Jun 1999 15:21:31 -0400
++
++netcat (1.10-9) unstable; urgency=low
++
++ * Compiled with -DTELNET.
++
++ -- Robert S. Edmonds <edmonds@freewwweb.com> Wed, 4 Nov 1998 09:27:40 -0500
++
++netcat (1.10-8) unstable frozen; urgency=low
++
++ * At the request of many users (and a few bug reports) the binary is now
++ going to be called "nc" as it always was.
++
++ -- Robert S. Edmonds <edmonds@freewwweb.com> Sun, 26 Apr 1998 19:36:00 -0400
++
++netcat (1.10-7) unstable; urgency=low
++
++ * Fixed lintian error possible-name-space-pollution. (binary nc -> netcat)
++
++ -- Robert S. Edmonds <edmonds@freewwweb.com> Mon, 30 Mar 1998 19:11:49 -0500
++
++netcat (1.10-6) unstable; urgency=low
++
++ * Upgraded to Standards-Version 2.4.0.0.
++
++ -- Robert S. Edmonds <edmonds@freewwweb.com> Tue, 17 Feb 1998 13:06:22 -0500
++
++netcat (1.10-5) unstable; urgency=low
++
++ * Merged in changes from Robert Woodcock <rcw@oz.net>.
++ - Man page updates.
++ - Compiled with -DTELNET
++ * Removed bogus menu file.
++ * Full source upload.
++
++ -- Joey Hess <joeyh@master.debian.org> Sat, 10 Jan 1998 13:53:59 -0500
++
++netcat (1.10-4) unstable; urgency=low
++
++ * Updated to "new" source format. (#9489)
++ * Libc6. (#11716)
++ * Orphaned the package.
++ * Fixed up description in control file to conform with policy, short
++ description doesn't include package name now.
++ * Fixed documentation location to comply with current policy. (#13194,
++ #11530, #9785)
++ * Wrote a man page. (#9785, #5304, #6647)
++ * Rewrote debian/rules to use debhelper.
++ * Install upstream changelog.
++
++ -- Joey Hess <joeyh@master.debian.org> Sat, 10 Jan 1998 00:53:45 -0500
+--- netcat-1.10.orig/debian/netcat.manpages
++++ netcat-1.10/debian/netcat.manpages
+@@ -0,0 +1 @@
++debian/nc.1
+--- netcat-1.10.orig/debian/netcat.README.Debian
++++ netcat-1.10/debian/netcat.README.Debian
+@@ -0,0 +1,17 @@
++netcat for Debian
++-----------------
++
++netcat has been compiled with -DGAPING_SECURITY_HOLE turned on. I do
++not believe this is as much of a security hole as the author makes it
++out to be, *if* you know what you're doing (but then, if you didn't,
++you'd still be using telnet ;-)). Since the spawned program will run
++as whatever user started netcat, don't use -e as root. You have been
++warned, so if some cracker breaks into your system due to your own
++stupidity, don't blame me.
++
++A symlink to the netcat binary called 'netcat' has been installed.
++However, the canonical name is still 'nc'. If you use netcat on other
++systems, it will probably only be installed as 'nc', so keep this in
++mind when writing scripts.
++
++ -- Decklin Foster <decklin@red-bean.com> Fri, 1 Jun 2001 13:38:10 -0400
+--- netcat-1.10.orig/debian/netcat.dirs
++++ netcat-1.10/debian/netcat.dirs
+@@ -0,0 +1 @@
++usr/bin
+--- netcat-1.10.orig/debian/netcat.docs
++++ netcat-1.10/debian/netcat.docs
+@@ -0,0 +1 @@
++README
+--- netcat-1.10.orig/netcat.c
++++ netcat-1.10/netcat.c
+@@ -59,6 +59,14 @@
+ #define RAND rand
+ #endif /* HAVE_RANDOM */
+
++/* #define POSIX_SETJMP /* If you want timeouts to work under the */
++ /* posixly correct, yet non-standard glibc-2.x*/
++ /* then define this- you may also need it for */
++ /* IRIX, and maybe some others */
++#ifdef LINUX
++#define POSIX_SETJMP
++#endif
++
+ /* includes: */
+ #include <sys/time.h> /* timeval, time_t */
+ #include <setjmp.h> /* jmp_buf et al */
+@@ -73,6 +81,9 @@
+ #include <errno.h>
+ #include <signal.h>
+ #include <fcntl.h> /* O_WRONLY et al */
++#ifdef LINUX /* Linux needs the HERE, oh well. */
++#include <resolv.h>
++#endif
+
+ /* handy stuff: */
+ #define SA struct sockaddr /* socket overgeneralization braindeath */
+@@ -106,7 +117,11 @@
+ #define PINF struct port_poop
+
+ /* globals: */
++#ifdef POSIX_SETJMP
++sigjmp_buf jbuf; /* timer crud */
++#else
+ jmp_buf jbuf; /* timer crud */
++#endif
+ int jval = 0; /* timer crud */
+ int netfd = -1;
+ int ofd = 0; /* hexdump output fd */
+@@ -151,6 +166,7 @@
+
+ /* global cmd flags: */
+ USHORT o_alla = 0;
++USHORT o_allowbroad = 0;
+ unsigned int o_interval = 0;
+ USHORT o_listen = 0;
+ USHORT o_nflag = 0;
+@@ -160,6 +176,7 @@
+ USHORT o_verbose = 0;
+ unsigned int o_wait = 0;
+ USHORT o_zero = 0;
++int o_quit = -1; /* 0 == quit-now; >0 == quit after o_quit seconds */
+ /* o_tn in optional section */
+
+ /* Debug macro: squirt whatever message and sleep a bit so we can see it go
+@@ -211,7 +228,6 @@
+ o_verbose = 1;
+ holler (str, p1, p2, p3, p4, p5, p6);
+ close (netfd);
+- sleep (1);
+ exit (1);
+ } /* bail */
+
+@@ -222,7 +238,15 @@
+ errno = 0;
+ if (o_verbose > 1) /* normally we don't care */
+ bail (wrote_txt, wrote_net, wrote_out);
+- bail (" punt!");
++ bail ("");
++}
++
++/* quit :
++ handler for a "-q" timeout (exit 0 instead of 1) */
++void quit()
++{
++ close(netfd);
++ exit(0);
+ }
+
+ /* timeout and other signal handling cruft */
+@@ -232,12 +256,16 @@
+ alarm (0);
+ if (jval == 0)
+ bail ("spurious timer interrupt!");
++#ifdef POSIX_SETJMP
++ siglongjmp (jbuf, jval);
++#else
+ longjmp (jbuf, jval);
++#endif
+ }
+
+-/* arm :
++/* arm_timer :
+ set the timer. Zero secs arg means unarm */
+-void arm (num, secs)
++void arm_timer (num, secs)
+ unsigned int num;
+ unsigned int secs;
+ {
+@@ -250,7 +278,7 @@
+ alarm (secs);
+ jval = num;
+ } /* if secs */
+-} /* arm */
++} /* arm_timer */
+
+ /* Hmalloc :
+ malloc up what I want, rounded up to *4, and pre-zeroed. Either succeeds
+@@ -333,6 +361,7 @@
+ struct in_addr iaddr;
+ register HINF * poop = NULL;
+ register int x;
++ int rc;
+
+ /* I really want to strangle the twit who dreamed up all these sockaddr and
+ hostent abstractions, and then forced them all to be incompatible with
+@@ -361,9 +390,9 @@
+ bail ("gethostpoop fuxored");
+ strcpy (poop->name, unknown); /* preload it */
+ /* see wzv:workarounds.c for dg/ux return-a-struct inet_addr lossage */
+- iaddr.s_addr = inet_addr (name);
++ rc = inet_aton(name, &iaddr);
+
+- if (iaddr.s_addr == INADDR_NONE) { /* here's the great split: names... */
++ if (rc == 0) { /* here's the great split: names... */
+ if (numeric)
+ bail ("Can't parse %s as an IP address", name);
+ hostent = gethostbyname (name);
+@@ -444,8 +473,10 @@
+ if (pstring) /* one or the other, pleeze */
+ return (0);
+ x = pnum;
+- if (o_nflag) /* go faster, skip getservbyblah */
+- goto gp_finish;
++ /* disabled, see bug #98902. if this is *really* slowing someone
++ * down I'll reconsider. */
++ /* if (o_nflag) */ /* go faster, skip getservbyblah */
++ /* goto gp_finish; */
+ y = htons (x); /* gotta do this -- see Fig.1 below */
+ servent = getservbyport (y, whichp);
+ if (servent) {
+@@ -620,6 +651,13 @@
+ rr = setsockopt (nnetfd, SOL_SOCKET, SO_REUSEADDR, &x, sizeof (x));
+ if (rr == -1)
+ holler ("nnetfd reuseaddr failed"); /* ??? */
++#ifdef SO_BROADCAST
++ if (o_allowbroad) {
++ rr = setsockopt (nnetfd, SOL_SOCKET, SO_BROADCAST, &x, sizeof (x));
++ if (rr == -1)
++ holler ("nnetfd reuseaddr failed"); /* ??? */
++ }
++#endif
+ #ifdef SO_REUSEPORT /* doesnt exist everywhere... */
+ rr = setsockopt (nnetfd, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x));
+ if (rr == -1)
+@@ -743,14 +781,23 @@
+ } /* if gatesidx */
+
+ /* wrap connect inside a timer, and hit it */
+- arm (1, o_wait);
++ arm_timer (1, o_wait);
++#ifdef POSIX_SETJMP
++ if (sigsetjmp (jbuf,1) == 0) {
++ rr = connect (nnetfd, (SA *)remend, sizeof (SA));
++ } else { /* setjmp: connect failed... */
++ rr = -1;
++ errno = ETIMEDOUT; /* fake it */
++ }
++#else
+ if (setjmp (jbuf) == 0) {
+ rr = connect (nnetfd, (SA *)remend, sizeof (SA));
+ } else { /* setjmp: connect failed... */
+ rr = -1;
+ errno = ETIMEDOUT; /* fake it */
+ }
+- arm (0, 0);
++#endif
++ arm_timer (0, 0);
+ if (rr == 0)
+ return (nnetfd);
+ close (nnetfd); /* clean up junked socket FD!! */
+@@ -820,14 +867,15 @@
+ actually does work after all. Yow. YMMV on strange platforms! */
+ if (o_udpmode) {
+ x = sizeof (SA); /* retval for recvfrom */
+- arm (2, o_wait); /* might as well timeout this, too */
+- if (setjmp (jbuf) == 0) { /* do timeout for initial connect */
++ arm_timer (2, o_wait); /* might as well timeout this, too */
++#ifdef POSIX_SETJMP
++ if (sigsetjmp (jbuf,1) == 0) { /* do timeout for initial connect */
+ rr = recvfrom /* and here we block... */
+ (nnetfd, bigbuf_net, BIGSIZ, MSG_PEEK, (SA *) remend, &x);
+ Debug (("dolisten/recvfrom ding, rr = %d, netbuf %s ", rr, bigbuf_net))
+ } else
+ goto dol_tmo; /* timeout */
+- arm (0, 0);
++ arm_timer (0, 0);
+ /* I'm not completely clear on how this works -- BSD seems to make UDP
+ just magically work in a connect()ed context, but we'll undoubtedly run
+ into systems this deal doesn't work on. For now, we apparently have to
+@@ -842,15 +890,45 @@
+ rr = connect (nnetfd, (SA *)remend, sizeof (SA));
+ goto whoisit;
+ } /* o_udpmode */
++#else
++ if (setjmp (jbuf) == 0) { /* do timeout for initial connect */
++ rr = recvfrom /* and here we block... */
++ (nnetfd, bigbuf_net, BIGSIZ, MSG_PEEK, (SA *) remend, &x);
++Debug (("dolisten/recvfrom ding, rr = %d, netbuf %s ", rr, bigbuf_net))
++ } else
++ goto dol_tmo; /* timeout */
++ arm (0, 0);
++/* I'm not completely clear on how this works -- BSD seems to make UDP
++ just magically work in a connect()ed context, but we'll undoubtedly run
++ into systems this deal doesn't work on. For now, we apparently have to
++ issue a connect() on our just-tickled socket so we can write() back.
++ Again, why the fuck doesn't it just get filled in and taken care of?!
++ This hack is anything but optimal. Basically, if you want your listener
++ to also be able to send data back, you need this connect() line, which
++ also has the side effect that now anything from a different source or even a
++ different port on the other end won't show up and will cause ICMP errors.
++ I guess that's what they meant by "connect".
++ Let's try to remember what the "U" is *really* for, eh? */
++ rr = connect (nnetfd, (SA *)remend, sizeof (SA));
++ goto whoisit;
++ } /* o_udpmode */
++#endif
+
+ /* fall here for TCP */
+ x = sizeof (SA); /* retval for accept */
+- arm (2, o_wait); /* wrap this in a timer, too; 0 = forever */
++ arm_timer (2, o_wait); /* wrap this in a timer, too; 0 = forever */
++#ifdef POSIX_SETJMP
++ if (sigsetjmp (jbuf,1) == 0) {
++ rr = accept (nnetfd, (SA *)remend, &x);
++ } else
++ goto dol_tmo; /* timeout */
++#else
+ if (setjmp (jbuf) == 0) {
+ rr = accept (nnetfd, (SA *)remend, &x);
+ } else
+ goto dol_tmo; /* timeout */
+- arm (0, 0);
++#endif
++ arm_timer (0, 0);
+ close (nnetfd); /* dump the old socket */
+ nnetfd = rr; /* here's our new one */
+
+@@ -1216,6 +1294,18 @@
+ if (rr <= 0) { /* at end, or fukt, or ... */
+ FD_CLR (0, ding1); /* disable and close stdin */
+ close (0);
++ /* if the user asked to exit on EOF, do it */
++ if (o_quit == 0) {
++ shutdown(netfd, 1);
++ close (fd);
++ exit (0);
++ }
++ /* if user asked to die after a while, arrange for it */
++ if (o_quit > 0) {
++ shutdown(netfd, 1);
++ signal (SIGALRM, quit);
++ alarm(o_quit);
++ }
+ } else {
+ rzleft = rr;
+ zp = bigbuf_in;
+@@ -1389,12 +1479,14 @@
+
+ /* If your shitbox doesn't have getopt, step into the nineties already. */
+ /* optarg, optind = next-argv-component [i.e. flag arg]; optopt = last-char */
+- while ((x = getopt (argc, argv, "ae:g:G:hi:lno:p:rs:tuvw:z")) != EOF) {
++ while ((x = getopt (argc, argv, "abe:g:G:hi:lno:p:q:rs:tuvw:z")) != EOF) {
+ /* Debug (("in go: x now %c, optarg %x optind %d", x, optarg, optind)) */
+ switch (x) {
+ case 'a':
+ bail ("all-A-records NIY");
+ o_alla++; break;
++ case 'b':
++ o_allowbroad++; break;
+ #ifdef GAPING_SECURITY_HOLE
+ case 'e': /* prog to exec */
+ pr00gie = optarg;
+@@ -1443,6 +1535,8 @@
+ break;
+ case 'r': /* randomize various things */
+ o_random++; break;
++ case 'q': /* quit after stdin does EOF */
++ o_quit = atoi(optarg); break;
+ case 's': /* local source address */
+ /* do a full lookup [since everything else goes through the same mill],
+ unless -n was previously specified. In fact, careful placement of -n can
+@@ -1602,8 +1696,16 @@
+ /* if we're scanning at a "one -v" verbosity level, don't print refusals.
+ Give it another -v if you want to see everything. */
+ if ((Single || (o_verbose > 1)) || (errno != ECONNREFUSED))
++ {
++ /* bug 65413 - if we're not scanning, we always want an
++ * error to be printed for refused connects. This is a
++ * disgustingly ugly way to do it, I really should just
++ * rewrite the holler() interface... */
++ if (Single) o_verbose++;
+ holler ("%s [%s] %d (%s)",
+ whereto->name, whereto->addrs[0], curport, portpoop->name);
++ if (Single) o_verbose--;
++ }
+ } /* if netfd */
+ close (netfd); /* just in case we didn't already */
+ if (o_interval)
+@@ -1642,6 +1744,7 @@
+ -e prog program to exec after connect [dangerous!!]");
+ #endif
+ holler ("\
++ -b allow broadcasts\n\
+ -g gateway source-routing hop point[s], up to 8\n\
+ -G num source-routing pointer: 4, 8, 12, ...\n\
+ -h this cruft\n\
+@@ -1651,6 +1754,7 @@
+ -o file hex dump of traffic\n\
+ -p port local port number\n\
+ -r randomize local and remote ports\n\
++ -q secs quit after EOF on stdin and delay of secs\n\
+ -s addr local source address");
+ #ifdef TELNET
+ holler ("\