Date: Mon, 22 Oct 2012 18:47:59 +0000 (UTC) From: Xin LI <delphij@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r241904 - vendor/netcat/dist Message-ID: <201210221847.q9MIlxJD077101@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: delphij Date: Mon Oct 22 18:47:59 2012 New Revision: 241904 URL: http://svn.freebsd.org/changeset/base/241904 Log: Vendor import from OpenBSD 5.1. Modified: vendor/netcat/dist/nc.1 vendor/netcat/dist/netcat.c vendor/netcat/dist/socks.c Modified: vendor/netcat/dist/nc.1 ============================================================================== --- vendor/netcat/dist/nc.1 Mon Oct 22 18:25:04 2012 (r241903) +++ vendor/netcat/dist/nc.1 Mon Oct 22 18:47:59 2012 (r241904) @@ -1,4 +1,4 @@ -.\" $OpenBSD: nc.1,v 1.60 2012/02/07 12:11:43 lum Exp $ +.\" $OpenBSD: nc.1,v 1.61 2012/07/07 15:33:02 haesbaert Exp $ .\" .\" Copyright (c) 1996 David Sacerdote .\" All rights reserved. @@ -25,7 +25,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: October 4 2011 $ +.Dd $Mdocdate: February 7 2012 $ .Dt NC 1 .Os .Sh NAME @@ -119,6 +119,10 @@ is completed. It is an error to use this option without the .Fl l option. +When used together with the +.Fl u +option, the server socket is not connected and it can receive UDP datagrams from +multiple hosts. .It Fl l Used to specify that .Nm Modified: vendor/netcat/dist/netcat.c ============================================================================== --- vendor/netcat/dist/netcat.c Mon Oct 22 18:25:04 2012 (r241903) +++ vendor/netcat/dist/netcat.c Mon Oct 22 18:47:59 2012 (r241904) @@ -1,4 +1,4 @@ -/* $OpenBSD: netcat.c,v 1.105 2012/02/09 06:25:35 lum Exp $ */ +/* $OpenBSD: netcat.c,v 1.109 2012/07/07 15:33:02 haesbaert Exp $ */ /* * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> * @@ -67,7 +67,6 @@ /* Command Line Options */ int dflag; /* detached, no stdin */ unsigned int iflag; /* Interval Flag */ -int jflag; /* use jumbo frames if we can */ int kflag; /* More than one connect */ int lflag; /* Bind to local port */ int nflag; /* Don't do name look up */ @@ -107,6 +106,7 @@ int unix_connect(char *); int unix_listen(char *); void set_common_sockopts(int); int map_tos(char *, int *); +void report_connect(const struct sockaddr *, socklen_t); void usage(int); int @@ -131,7 +131,7 @@ main(int argc, char *argv[]) sv = NULL; while ((ch = getopt(argc, argv, - "46DdhI:i:jklnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) { + "46DdhI:i:klnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) { switch (ch) { case '4': family = AF_INET; @@ -163,9 +163,6 @@ main(int argc, char *argv[]) if (errstr) errx(1, "interval %s: %s", errstr, optarg); break; - case 'j': - jflag = 1; - break; case 'k': kflag = 1; break; @@ -348,17 +345,23 @@ main(int argc, char *argv[]) if (s < 0) err(1, NULL); /* - * For UDP, we will use recvfrom() initially - * to wait for a caller, then use the regular - * functions to talk to the caller. + * For UDP and -k, don't connect the socket, let it + * receive datagrams from multiple socket pairs. */ - if (uflag) { + if (uflag && kflag) + readwrite(s); + /* + * For UDP and not -k, we will use recvfrom() initially + * to wait for a caller, then use the regular functions + * to talk to the caller. + */ + else if (uflag && !kflag) { int rv, plen; char buf[16384]; struct sockaddr_storage z; len = sizeof(z); - plen = jflag ? 16384 : 2048; + plen = 2048; rv = recvfrom(s, buf, plen, MSG_PEEK, (struct sockaddr *)&z, &len); if (rv < 0) @@ -368,11 +371,20 @@ main(int argc, char *argv[]) if (rv < 0) err(1, "connect"); + if (vflag) + report_connect((struct sockaddr *)&z, len); + readwrite(s); } else { len = sizeof(cliaddr); connfd = accept(s, (struct sockaddr *)&cliaddr, &len); + if (connfd == -1) + err(1, "accept"); + + if (vflag) + report_connect((struct sockaddr *)&cliaddr, len); + readwrite(connfd); close(connfd); } @@ -717,7 +729,7 @@ readwrite(int nfd) int lfd = fileno(stdout); int plen; - plen = jflag ? 16384 : 2048; + plen = 2048; /* Setup Network FD */ pfd[0].fd = nfd; @@ -896,11 +908,6 @@ set_common_sockopts(int s) &x, sizeof(x)) == -1) err(1, NULL); } - if (jflag) { - if (setsockopt(s, SOL_SOCKET, SO_JUMBO, - &x, sizeof(x)) == -1) - err(1, NULL); - } if (Tflag != -1) { if (setsockopt(s, IPPROTO_IP, IP_TOS, &Tflag, sizeof(Tflag)) == -1) @@ -967,6 +974,32 @@ map_tos(char *s, int *val) } void +report_connect(const struct sockaddr *sa, socklen_t salen) +{ + char remote_host[NI_MAXHOST]; + char remote_port[NI_MAXSERV]; + int herr; + int flags = NI_NUMERICSERV; + + if (nflag) + flags |= NI_NUMERICHOST; + + if ((herr = getnameinfo(sa, salen, + remote_host, sizeof(remote_host), + remote_port, sizeof(remote_port), + flags)) != 0) { + if (herr == EAI_SYSTEM) + err(1, "getnameinfo"); + else + errx(1, "getnameinfo: %s", gai_strerror(herr)); + } + + fprintf(stderr, + "Connection from %s %s " + "received!\n", remote_host, remote_port); +} + +void help(void) { usage(0); Modified: vendor/netcat/dist/socks.c ============================================================================== --- vendor/netcat/dist/socks.c Mon Oct 22 18:25:04 2012 (r241903) +++ vendor/netcat/dist/socks.c Mon Oct 22 18:47:59 2012 (r241904) @@ -1,4 +1,4 @@ -/* $OpenBSD: socks.c,v 1.19 2011/02/12 15:54:18 okan Exp $ */ +/* $OpenBSD: socks.c,v 1.20 2012/03/08 09:56:28 espie Exp $ */ /* * Copyright (c) 1999 Niklas Hallqvist. All rights reserved. @@ -231,12 +231,12 @@ socks_connect(const char *host, const ch case SOCKS_IPV4: cnt = atomicio(read, proxyfd, buf + 4, 6); if (cnt != 6) - err(1, "read failed (%d/6)", cnt); + err(1, "read failed (%zu/6)", cnt); break; case SOCKS_IPV6: cnt = atomicio(read, proxyfd, buf + 4, 18); if (cnt != 18) - err(1, "read failed (%d/18)", cnt); + err(1, "read failed (%zu/18)", cnt); break; default: errx(1, "connection failed, unsupported address type");
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201210221847.q9MIlxJD077101>