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 <[email protected]>
  *
@@ -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");
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to