0026-nc-Portability-fixes-from-libressl-portable.patch (5335B)
- From 05fd24cc7b3f1b73a58d41d70ef725925007165c Mon Sep 17 00:00:00 2001
- From: Michael Forney <mforney@mforney.org>
- Date: Mon, 2 Dec 2019 21:11:04 -0800
- Subject: [PATCH] nc: Portability fixes from libressl-portable
- ---
- usr.bin/nc/netcat.c | 55 +++++++++++++++++++++++++++++++++++++++------
- 1 file changed, 48 insertions(+), 7 deletions(-)
- diff --git a/usr.bin/nc/netcat.c b/usr.bin/nc/netcat.c
- index 8c60fd18826..b5129c2204d 100644
- --- a/usr.bin/nc/netcat.c
- +++ b/usr.bin/nc/netcat.c
- @@ -93,9 +93,13 @@ int zflag; /* Port Scan Flag */
- int Dflag; /* sodebug */
- int Iflag; /* TCP receive buffer size */
- int Oflag; /* TCP send buffer size */
- +#ifdef TCP_MD5SIG
- int Sflag; /* TCP MD5 signature option */
- +#endif
- int Tflag = -1; /* IP Type of Service */
- +#ifdef SO_RTABLE
- int rtableid = -1;
- +#endif
- int usetls; /* use TLS */
- const char *Cflag; /* Public cert file */
- @@ -268,12 +272,14 @@ main(int argc, char *argv[])
- case 'u':
- uflag = 1;
- break;
- +#ifdef SO_RTABLE
- case 'V':
- rtableid = (int)strtonum(optarg, 0,
- RT_TABLEID_MAX, &errstr);
- if (errstr)
- errx(1, "rtable %s: %s", errstr, optarg);
- break;
- +#endif
- case 'v':
- vflag = 1;
- break;
- @@ -320,9 +326,11 @@ main(int argc, char *argv[])
- case 'o':
- oflag = optarg;
- break;
- +#ifdef TCP_MD5SIG
- case 'S':
- Sflag = 1;
- break;
- +#endif
- case 'T':
- errstr = NULL;
- errno = 0;
- @@ -346,9 +354,11 @@ main(int argc, char *argv[])
- argc -= optind;
- argv += optind;
- +#ifdef SO_RTABLE
- if (rtableid >= 0)
- if (setrtable(rtableid) == -1)
- err(1, "setrtable");
- +#endif
- /* Cruft to make sure options are clean, and used properly. */
- if (argc == 1 && family == AF_UNIX) {
- @@ -923,7 +933,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
- char *ipaddr)
- {
- struct addrinfo *res, *res0;
- - int s = -1, error, herr, on = 1, save_errno;
- + int s = -1, error, herr, save_errno;
- +#ifdef SO_BINDANY
- + int on = 1;
- +#endif
- if ((error = getaddrinfo(host, port, &hints, &res0)))
- errx(1, "getaddrinfo for host \"%s\" port %s: %s", host,
- @@ -938,8 +951,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
- 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
- memset(&ahints, 0, sizeof(struct addrinfo));
- ahints.ai_family = res->ai_family;
- ahints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM;
- @@ -1031,8 +1046,11 @@ int
- local_listen(const char *host, const char *port, struct addrinfo hints)
- {
- struct addrinfo *res, *res0;
- - int s = -1, ret, x = 1, save_errno;
- + int s = -1, save_errno;
- int error;
- +#ifdef SO_REUSEPORT
- + int ret, x = 1;
- +#endif
- /* Allow nodename to be null. */
- hints.ai_flags |= AI_PASSIVE;
- @@ -1052,9 +1070,11 @@ local_listen(const char *host, const char *port, struct addrinfo hints)
- res->ai_protocol)) == -1)
- continue;
- +#ifdef SO_REUSEPORT
- ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x));
- if (ret == -1)
- err(1, NULL);
- +#endif
- set_common_sockopts(s, res->ai_family);
- @@ -1559,11 +1579,13 @@ set_common_sockopts(int s, int af)
- {
- int x = 1;
- +#ifdef TCP_MD5SIG
- if (Sflag) {
- if (setsockopt(s, IPPROTO_TCP, TCP_MD5SIG,
- &x, sizeof(x)) == -1)
- err(1, NULL);
- }
- +#endif
- if (Dflag) {
- if (setsockopt(s, SOL_SOCKET, SO_DEBUG,
- &x, sizeof(x)) == -1)
- @@ -1574,9 +1596,16 @@ set_common_sockopts(int s, int af)
- IP_TOS, &Tflag, sizeof(Tflag)) == -1)
- err(1, "set IP ToS");
- +#ifdef IPV6_TCLASS
- else if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6,
- IPV6_TCLASS, &Tflag, sizeof(Tflag)) == -1)
- err(1, "set IPv6 traffic class");
- +#else
- + else if (af == AF_INET6) {
- + errno = ENOPROTOOPT;
- + err(1, "set IPv6 traffic class not supported");
- + }
- +#endif
- }
- if (Iflag) {
- if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,
- @@ -1600,13 +1629,17 @@ set_common_sockopts(int s, int af)
- }
- if (minttl != -1) {
- +#ifdef IP_MINTTL
- if (af == AF_INET && setsockopt(s, IPPROTO_IP,
- IP_MINTTL, &minttl, sizeof(minttl)))
- err(1, "set IP min TTL");
- +#endif
- - else if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6,
- +#ifdef IPV6_MINHOPCOUNT
- + if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6,
- IPV6_MINHOPCOUNT, &minttl, sizeof(minttl)))
- err(1, "set IPv6 min hop count");
- +#endif
- }
- }
- @@ -1831,14 +1864,22 @@ help(void)
- \t-P proxyuser\tUsername for proxy authentication\n\
- \t-p port\t Specify local port for remote connects\n\
- \t-R CAfile CA bundle\n\
- - \t-r Randomize remote ports\n\
- - \t-S Enable the TCP MD5 signature option\n\
- + \t-r Randomize remote ports\n"
- +#ifdef TCP_MD5SIG
- + "\
- + \t-S Enable the TCP MD5 signature option\n"
- +#endif
- + "\
- \t-s sourceaddr Local source address\n\
- \t-T keyword TOS value or TLS options\n\
- \t-t Answer TELNET negotiation\n\
- \t-U Use UNIX domain socket\n\
- - \t-u UDP mode\n\
- - \t-V rtable Specify alternate routing table\n\
- + \t-u UDP mode\n"
- +#ifdef SO_RTABLE
- + "\
- + \t-V rtable Specify alternate routing table\n"
- +#endif
- + "\
- \t-v Verbose\n\
- \t-W recvlimit Terminate after receiving a number of packets\n\
- \t-w timeout Timeout for connects and final net reads\n\
- --
- 2.49.0