Author: delphij
Date: Thu Nov 18 01:21:55 2010
New Revision: 215446
URL: http://svn.freebsd.org/changeset/base/215446

Log:
  MFC through r214047: nc from OpenBSD 4.8.

Modified:
  stable/7/contrib/netcat/nc.1
  stable/7/contrib/netcat/netcat.c
  stable/7/contrib/netcat/socks.c
Directory Properties:
  stable/7/contrib/netcat/   (props changed)

Modified: stable/7/contrib/netcat/nc.1
==============================================================================
--- stable/7/contrib/netcat/nc.1        Thu Nov 18 01:14:18 2010        
(r215445)
+++ stable/7/contrib/netcat/nc.1        Thu Nov 18 01:21:55 2010        
(r215446)
@@ -1,4 +1,4 @@
-.\"     $OpenBSD: nc.1,v 1.50 2009/06/05 06:47:12 jmc Exp $
+.\"     $OpenBSD: nc.1,v 1.55 2010/07/25 07:51:39 guenther Exp $
 .\"
 .\" Copyright (c) 1996 David Sacerdote
 .\" All rights reserved.
@@ -27,7 +27,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 5 2009
+.Dd July 25, 2010
 .Dt NC 1
 .Os
 .Sh NAME
@@ -36,7 +36,7 @@
 .Sh SYNOPSIS
 .Nm nc
 .Bk -words
-.Op Fl 46DdEhklnorStUuvz
+.Op Fl 46DdEhklnrStUuvz
 .Op Fl e Ar IPsec_policy
 .Op Fl I Ar length
 .Op Fl i Ar interval
@@ -46,13 +46,13 @@
 .Op Fl p Ar source_port
 .Op Fl s Ar source_ip_address
 .Op Fl T Ar ToS
-.Op Fl V Ar fib
+.Op Fl V Ar rtable
 .Op Fl w Ar timeout
 .Op Fl X Ar proxy_protocol
 .Oo Xo
 .Fl x Ar proxy_address Ns Oo : Ns
-.Ar port Oc Oc
-.Xc
+.Ar port Oc
+.Xc Oc
 .Op Ar hostname
 .Op Ar port
 .Ek
@@ -158,16 +158,6 @@ TCP_NOOPT
 socket option.
 .It Fl O Ar length
 Specifies the size of the TCP send buffer.
-When
-.It Fl o
-.Dq Once-only mode .
-By default,
-.Nm
-does not terminate on EOF condition on input,
-but continues until the network side has been closed down.
-Specifying
-.Fl o
-will make it terminate on EOF as well.
 .It Fl P Ar proxy_username
 Specifies a username to present to a proxy server that requires authentication.
 If no username is specified then authentication will not be attempted.
@@ -206,11 +196,15 @@ This makes it possible to use
 .Nm
 to script telnet sessions.
 .It Fl U
-Specifies to use Unix Domain Sockets.
+Specifies to use
+.Ux Ns -domain
+sockets.
 .It Fl u
 Use UDP instead of the default option of TCP.
-.It Fl V Ar fib
-Set the routing table (FIB).
+.It Fl V Ar rtable
+Set the routing table
+.Pq Dq FIB
+to be used.
 The default is 0.
 .It Fl v
 Have
@@ -347,7 +341,7 @@ when it might be necessary to verify wha
 in response to commands issued by the client.
 For example, to retrieve the home page of a web site:
 .Bd -literal -offset indent
-$ echo -n "GET / HTTP/1.0\er\en\er\en" | nc host.example.com 80
+$ printf "GET / HTTP/1.0\er\en\er\en" | nc host.example.com 80
 .Ed
 .Pp
 Note that this also displays the headers sent by the web server.
@@ -428,7 +422,9 @@ outgoing traffic only.
 .Pp
 .Dl $ nc -e 'out ipsec esp/transport//require' host.example.com 42
 .Pp
-Create and listen on a Unix Domain Socket:
+Create and listen on a
+.Ux Ns -domain
+socket:
 .Pp
 .Dl $ nc -lU /var/tmp/dsocket
 .Pp

Modified: stable/7/contrib/netcat/netcat.c
==============================================================================
--- stable/7/contrib/netcat/netcat.c    Thu Nov 18 01:14:18 2010        
(r215445)
+++ stable/7/contrib/netcat/netcat.c    Thu Nov 18 01:21:55 2010        
(r215446)
@@ -1,4 +1,4 @@
-/* $OpenBSD: netcat.c,v 1.93 2009/06/05 00:18:10 claudio Exp $ */
+/* $OpenBSD: netcat.c,v 1.98 2010/07/03 04:44:51 guenther Exp $ */
 /*
  * Copyright (c) 2001 Eric Jackson <er...@monkey.org>
  *
@@ -72,14 +72,12 @@
 #define PORT_MAX_LEN   6
 
 /* Command Line Options */
-int    Eflag;                                  /* Use IPsec ESP */
 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 */
-int    oflag;                                  /* Once only: stop on EOF */
 int    FreeBSD_Oflag;                          /* Do not use TCP options */
 char   *Pflag;                                 /* Proxy username */
 char   *pflag;                                 /* Localport flag */
@@ -95,7 +93,7 @@ int   Iflag;                                  /* TCP receive 
buffer siz
 int    Oflag;                                  /* TCP send buffer size */
 int    Sflag;                                  /* TCP MD5 signature option */
 int    Tflag = -1;                             /* IP Type of Service */
-u_int  rdomain;
+u_int  rtableid;
 
 int timeout = -1;
 int family = AF_UNSPEC;
@@ -141,7 +139,6 @@ main(int argc, char *argv[])
                { NULL,         0,              NULL,           0 }
        };
 
-       rdomain = 0;
        ret = 1;
        ipsec_count = 0;
        s = 0;
@@ -151,7 +148,7 @@ main(int argc, char *argv[])
        sv = NULL;
 
        while ((ch = getopt_long(argc, argv,
-           "46DdEe:hI:i:jklnO:oP:p:rSs:tT:UuV:vw:X:x:z",
+           "46DdEe:hI:i:jklnoO:P:p:rSs:tT:UuV:vw:X:x:z",
            longopts, NULL)) != -1) {
                switch (ch) {
                case '4':
@@ -214,7 +211,7 @@ main(int argc, char *argv[])
                        nflag = 1;
                        break;
                case 'o':
-                       oflag = 1;
+                       fprintf(stderr, "option -o is deprecated.\n");
                        break;
                case 'P':
                        Pflag = optarg;
@@ -237,10 +234,10 @@ main(int argc, char *argv[])
                case 'V':
                        if (sysctlbyname("net.fibs", &numfibs, &intsize, NULL, 
0) == -1)
                                errx(1, "Multiple FIBS not supported");
-                       rdomain = (unsigned int)strtonum(optarg, 0,
+                       rtableid = (unsigned int)strtonum(optarg, 0,
                            numfibs - 1, &errstr);
                        if (errstr)
-                               errx(1, "FIB %s: %s", errstr, optarg);
+                               errx(1, "rtable %s: %s", errstr, optarg);
                        break;
                case 'v':
                        vflag = 1;
@@ -282,8 +279,6 @@ main(int argc, char *argv[])
                case 'T':
                        Tflag = parse_iptos(optarg);
                        break;
-               case 0:
-                       break;
                default:
                        usage(1);
                }
@@ -375,11 +370,11 @@ main(int argc, char *argv[])
                         */
                        if (uflag) {
                                int rv, plen;
-                               char buf[8192];
+                               char buf[16384];
                                struct sockaddr_storage z;
 
                                len = sizeof(z);
-                               plen = jflag ? 8192 : 1024;
+                               plen = jflag ? 16384 : 2048;
                                rv = recvfrom(s, buf, plen, MSG_PEEK,
                                    (struct sockaddr *)&z, &len);
                                if (rv < 0)
@@ -455,8 +450,10 @@ main(int argc, char *argv[])
                                            uflag ? "udp" : "tcp");
                                }
 
-                               printf("Connection to %s %s port [%s/%s] 
succeeded!\n",
-                                   host, portlist[i], uflag ? "udp" : "tcp",
+                               fprintf(stderr,
+                                   "Connection to %s %s port [%s/%s] "
+                                   "succeeded!\n", host, portlist[i],
+                                   uflag ? "udp" : "tcp",
                                    sv ? sv->s_name : "*");
                        }
                        if (!zflag)
@@ -563,8 +560,8 @@ remote_connect(const char *host, const c
                        add_ipsec_policy(s, ipsec_policy[1]);
 #endif
 
-               if (rdomain) {
-                       if (setfib(rdomain) == -1)
+               if (rtableid) {
+                       if (setfib(rtableid) == -1)
                                err(1, "setfib");
                }
 
@@ -572,10 +569,8 @@ remote_connect(const char *host, const c
                if (sflag || pflag) {
                        struct addrinfo ahints, *ares;
 
-#ifdef SO_BINDANY
-                       /* try SO_BINDANY, but don't insist */
-                       setsockopt(s, SOL_SOCKET, SO_BINDANY, &on, sizeof(on));
-#endif
+                       /* try IP_BINDANY, but don't insist */
+                       setsockopt(s, IPPROTO_IP, IP_BINDANY, &on, sizeof(on));
                        memset(&ahints, 0, sizeof(struct addrinfo));
                        ahints.ai_family = res0->ai_family;
                        ahints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM;
@@ -638,8 +633,8 @@ local_listen(char *host, char *port, str
                    res0->ai_protocol)) < 0)
                        continue;
 
-               if (rdomain) {
-                       if (setfib(rdomain) == -1)
+               if (rtableid) {
+                       if (setfib(rtableid) == -1)
                                err(1, "setfib");
                }
 
@@ -684,12 +679,12 @@ void
 readwrite(int nfd)
 {
        struct pollfd pfd[2];
-       unsigned char buf[8192];
+       unsigned char buf[16384];
        int n, wfd = fileno(stdin);
        int lfd = fileno(stdout);
        int plen;
 
-       plen = jflag ? 8192 : 1024;
+       plen = jflag ? 16384 : 2048;
 
        /* Setup Network FD */
        pfd[0].fd = nfd;
@@ -727,10 +722,9 @@ readwrite(int nfd)
                }
 
                if (!dflag && pfd[1].revents & POLLIN) {
-                       if ((n = read(wfd, buf, plen)) < 0 ||
-                           (oflag && n == 0)) {
+                       if ((n = read(wfd, buf, plen)) < 0)
                                return;
-                       } else if (n == 0) {
+                       else if (n == 0) {
                                shutdown(nfd, SHUT_WR);
                                pfd[1].fd = -1;
                                pfd[1].events = 0;
@@ -749,27 +743,27 @@ atelnet(int nfd, unsigned char *buf, uns
        unsigned char *p, *end;
        unsigned char obuf[4];
 
-       end = buf + size;
-       obuf[0] = '\0';
+       if (size < 3)
+               return;
+       end = buf + size - 2;
 
        for (p = buf; p < end; p++) {
                if (*p != IAC)
-                       break;
+                       continue;
 
                obuf[0] = IAC;
                p++;
                if ((*p == WILL) || (*p == WONT))
                        obuf[1] = DONT;
-               if ((*p == DO) || (*p == DONT))
+               else if ((*p == DO) || (*p == DONT))
                        obuf[1] = WONT;
-               if (obuf) {
-                       p++;
-                       obuf[2] = *p;
-                       obuf[3] = '\0';
-                       if (atomicio(vwrite, nfd, obuf, 3) != 3)
-                               warn("Write Error!");
-                       obuf[0] = '\0';
-               }
+               else
+                       continue;
+
+               p++;
+               obuf[2] = *p;
+               if (atomicio(vwrite, nfd, obuf, 3) != 3)
+                       warn("Write Error!");
        }
 }
 
@@ -832,10 +826,9 @@ build_ports(char *p)
                hi = strtonum(p, 1, PORT_MAX, &errstr);
                if (errstr)
                        errx(1, "port number %s: %s", errstr, p);
-               portlist[0] = calloc(1, PORT_MAX_LEN);
+               portlist[0] = strdup(p);
                if (portlist[0] == NULL)
                        err(1, NULL);
-               portlist[0] = p;
        }
 }
 
@@ -943,7 +936,6 @@ help(void)
        \t-n            Suppress name/port resolutions\n\
        \t--no-tcpopt   Disable TCP options\n\
        \t-O length     TCP send buffer length\n\
-       \t-o            Terminate on EOF on input\n\
        \t-P proxyuser\tUsername for proxy authentication\n\
        \t-p port\t     Specify local port for remote connects\n\
        \t-r            Randomize remote ports\n\
@@ -953,7 +945,7 @@ help(void)
        \t-t            Answer TELNET negotiation\n\
        \t-U            Use UNIX domain socket\n\
        \t-u            UDP mode\n\
-       \t-V fib        Specify alternate routing table (FIB)\n\
+       \t-V rtable     Specify alternate routing table\n\
        \t-v            Verbose\n\
        \t-w secs\t     Timeout for connects and final net reads\n\
        \t-X proto      Proxy protocol: \"4\", \"5\" (SOCKS) or \"connect\"\n\
@@ -993,12 +985,12 @@ usage(int ret)
 {
        fprintf(stderr,
 #ifdef IPSEC
-           "usage: nc [-46DdEhklnorStUuvz] [-e policy] [-I length] [-i 
interval] [-O length]\n"
+           "usage: nc [-46DdEhklnrStUuvz] [-e policy] [-I length] [-i 
interval] [-O length]\n"
 #else
-           "usage: nc [-46DdhklnorStUuvz] [-I length] [-i interval] [-O 
length]\n"
+           "usage: nc [-46DdhklnrStUuvz] [-I length] [-i interval] [-O 
length]\n"
 #endif
            "\t  [-P proxy_username] [-p source_port] [-s source_ip_address] 
[-T ToS]\n"
-           "\t  [-V fib] [-w timeout] [-X proxy_protocol]\n"
+           "\t  [-V rtable] [-w timeout] [-X proxy_protocol]\n"
            "\t  [-x proxy_address[:port]] [hostname] [port]\n");
        if (ret)
                exit(1);

Modified: stable/7/contrib/netcat/socks.c
==============================================================================
--- stable/7/contrib/netcat/socks.c     Thu Nov 18 01:14:18 2010        
(r215445)
+++ stable/7/contrib/netcat/socks.c     Thu Nov 18 01:21:55 2010        
(r215446)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: socks.c,v 1.17 2006/09/25 04:51:20 ray Exp $  */
+/*     $OpenBSD: socks.c,v 1.18 2010/04/20 07:26:35 nicm Exp $ */
 
 /*
  * Copyright (c) 1999 Niklas Hallqvist.  All rights reserved.
@@ -167,11 +167,11 @@ socks_connect(const char *host, const ch
                buf[2] = SOCKS_NOAUTH;
                cnt = atomicio(vwrite, proxyfd, buf, 3);
                if (cnt != 3)
-                       err(1, "write failed (%d/3)", cnt);
+                       err(1, "write failed (%zu/3)", cnt);
 
                cnt = atomicio(read, proxyfd, buf, 2);
                if (cnt != 2)
-                       err(1, "read failed (%d/3)", cnt);
+                       err(1, "read failed (%zu/3)", cnt);
 
                if (buf[1] == SOCKS_NOMETHOD)
                        errx(1, "authentication method negotiation failed");
@@ -220,11 +220,11 @@ socks_connect(const char *host, const ch
 
                cnt = atomicio(vwrite, proxyfd, buf, wlen);
                if (cnt != wlen)
-                       err(1, "write failed (%d/%d)", cnt, wlen);
+                       err(1, "write failed (%zu/%zu)", cnt, wlen);
 
                cnt = atomicio(read, proxyfd, buf, 10);
                if (cnt != 10)
-                       err(1, "read failed (%d/10)", cnt);
+                       err(1, "read failed (%zu/10)", cnt);
                if (buf[1] != 0)
                        errx(1, "connection failed, SOCKS error %d", buf[1]);
        } else if (socksv == 4) {
@@ -242,11 +242,11 @@ socks_connect(const char *host, const ch
 
                cnt = atomicio(vwrite, proxyfd, buf, wlen);
                if (cnt != wlen)
-                       err(1, "write failed (%d/%d)", cnt, wlen);
+                       err(1, "write failed (%zu/%zu)", cnt, wlen);
 
                cnt = atomicio(read, proxyfd, buf, 8);
                if (cnt != 8)
-                       err(1, "read failed (%d/8)", cnt);
+                       err(1, "read failed (%zu/8)", cnt);
                if (buf[1] != 90)
                        errx(1, "connection failed, SOCKS error %d", buf[1]);
        } else if (socksv == -1) {
@@ -272,7 +272,7 @@ socks_connect(const char *host, const ch
 
                cnt = atomicio(vwrite, proxyfd, buf, r);
                if (cnt != r)
-                       err(1, "write failed (%d/%d)", cnt, r);
+                       err(1, "write failed (%zu/%d)", cnt, r);
 
                if (authretry > 1) {
                        char resp[1024];
@@ -290,7 +290,7 @@ socks_connect(const char *host, const ch
                                errx(1, "Proxy auth response too long");
                        r = strlen(buf);
                        if ((cnt = atomicio(vwrite, proxyfd, buf, r)) != r)
-                               err(1, "write failed (%d/%d)", cnt, r);
+                               err(1, "write failed (%zu/%d)", cnt, r);
                }
 
                /* Terminate headers */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to