opkg

statically linked package installer
git clone anongit@rnpnr.xyz:opkg.git
Log | Files | Refs | Feed | Submodules | README | LICENSE

0026-nc-Portability-fixes-from-libressl-portable.patch (5591B)


      1 From 36bb1d71b1e6963feb61fdf13c3e2f1cd55b0f5c Mon Sep 17 00:00:00 2001
      2 From: Michael Forney <mforney@mforney.org>
      3 Date: Mon, 2 Dec 2019 21:11:04 -0800
      4 Subject: [PATCH] nc: Portability fixes from libressl-portable
      5 
      6 ---
      7  usr.bin/nc/netcat.c | 59 +++++++++++++++++++++++++++++++++++++++------
      8  1 file changed, 52 insertions(+), 7 deletions(-)
      9 
     10 diff --git a/usr.bin/nc/netcat.c b/usr.bin/nc/netcat.c
     11 index 9361ff50cd9..4fd399a6f89 100644
     12 --- a/usr.bin/nc/netcat.c
     13 +++ b/usr.bin/nc/netcat.c
     14 @@ -73,6 +73,10 @@
     15  #define TLS_CCERT	(1 << 3)
     16  #define TLS_MUSTSTAPLE	(1 << 4)
     17  
     18 +#ifndef IPTOS_DSCP_VA
     19 +#define IPTOS_DSCP_VA	0xb0
     20 +#endif
     21 +
     22  /* Command Line Options */
     23  int	dflag;					/* detached, no stdin */
     24  int	Fflag;					/* fdpass sock to stdout */
     25 @@ -93,9 +97,13 @@ int	zflag;					/* Port Scan Flag */
     26  int	Dflag;					/* sodebug */
     27  int	Iflag;					/* TCP receive buffer size */
     28  int	Oflag;					/* TCP send buffer size */
     29 +#ifdef TCP_MD5SIG
     30  int	Sflag;					/* TCP MD5 signature option */
     31 +#endif
     32  int	Tflag = -1;				/* IP Type of Service */
     33 +#ifdef SO_RTABLE
     34  int	rtableid = -1;
     35 +#endif
     36  
     37  int	usetls;					/* use TLS */
     38  const char    *Cflag;				/* Public cert file */
     39 @@ -271,12 +279,14 @@ main(int argc, char *argv[])
     40  		case 'u':
     41  			uflag = 1;
     42  			break;
     43 +#ifdef SO_RTABLE
     44  		case 'V':
     45  			rtableid = (int)strtonum(optarg, 0,
     46  			    RT_TABLEID_MAX, &errstr);
     47  			if (errstr)
     48  				errx(1, "rtable %s: %s", errstr, optarg);
     49  			break;
     50 +#endif
     51  		case 'v':
     52  			vflag = 1;
     53  			break;
     54 @@ -323,9 +333,11 @@ main(int argc, char *argv[])
     55  		case 'o':
     56  			oflag = optarg;
     57  			break;
     58 +#ifdef TCP_MD5SIG
     59  		case 'S':
     60  			Sflag = 1;
     61  			break;
     62 +#endif
     63  		case 'T':
     64  			errstr = NULL;
     65  			errno = 0;
     66 @@ -349,9 +361,11 @@ main(int argc, char *argv[])
     67  	argc -= optind;
     68  	argv += optind;
     69  
     70 +#ifdef SO_RTABLE
     71  	if (rtableid >= 0)
     72  		if (setrtable(rtableid) == -1)
     73  			err(1, "setrtable");
     74 +#endif
     75  
     76  	/* Cruft to make sure options are clean, and used properly. */
     77  	if (argc == 1 && family == AF_UNIX) {
     78 @@ -930,7 +944,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
     79      char *ipaddr)
     80  {
     81  	struct addrinfo *res, *res0;
     82 -	int s = -1, error, herr, on = 1, save_errno;
     83 +	int s = -1, error, herr, save_errno;
     84 +#ifdef SO_BINDANY
     85 +	int on = 1;
     86 +#endif
     87  
     88  	if ((error = getaddrinfo(host, port, &hints, &res0)))
     89  		errx(1, "getaddrinfo for host \"%s\" port %s: %s", host,
     90 @@ -945,8 +962,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
     91  		if (sflag || pflag) {
     92  			struct addrinfo ahints, *ares;
     93  
     94 +#ifdef SO_BINDANY
     95  			/* try SO_BINDANY, but don't insist */
     96  			setsockopt(s, SOL_SOCKET, SO_BINDANY, &on, sizeof(on));
     97 +#endif
     98  			memset(&ahints, 0, sizeof(struct addrinfo));
     99  			ahints.ai_family = res->ai_family;
    100  			ahints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM;
    101 @@ -1038,8 +1057,11 @@ int
    102  local_listen(const char *host, const char *port, struct addrinfo hints)
    103  {
    104  	struct addrinfo *res, *res0;
    105 -	int s = -1, ret, x = 1, save_errno;
    106 +	int s = -1, save_errno;
    107  	int error;
    108 +#ifdef SO_REUSEPORT
    109 +	int ret, x = 1;
    110 +#endif
    111  
    112  	/* Allow nodename to be null. */
    113  	hints.ai_flags |= AI_PASSIVE;
    114 @@ -1059,9 +1081,11 @@ local_listen(const char *host, const char *port, struct addrinfo hints)
    115  		    res->ai_protocol)) == -1)
    116  			continue;
    117  
    118 +#ifdef SO_REUSEPORT
    119  		ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x));
    120  		if (ret == -1)
    121  			err(1, NULL);
    122 +#endif
    123  
    124  		set_common_sockopts(s, res->ai_family);
    125  
    126 @@ -1571,11 +1595,13 @@ set_common_sockopts(int s, int af)
    127  {
    128  	int x = 1;
    129  
    130 +#ifdef TCP_MD5SIG
    131  	if (Sflag) {
    132  		if (setsockopt(s, IPPROTO_TCP, TCP_MD5SIG,
    133  		    &x, sizeof(x)) == -1)
    134  			err(1, NULL);
    135  	}
    136 +#endif
    137  	if (Dflag) {
    138  		if (setsockopt(s, SOL_SOCKET, SO_DEBUG,
    139  		    &x, sizeof(x)) == -1)
    140 @@ -1586,9 +1612,16 @@ set_common_sockopts(int s, int af)
    141  		    IP_TOS, &Tflag, sizeof(Tflag)) == -1)
    142  			err(1, "set IP ToS");
    143  
    144 +#ifdef IPV6_TCLASS
    145  		else if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6,
    146  		    IPV6_TCLASS, &Tflag, sizeof(Tflag)) == -1)
    147  			err(1, "set IPv6 traffic class");
    148 +#else
    149 +		else if (af == AF_INET6) {
    150 +			errno = ENOPROTOOPT;
    151 +			err(1, "set IPv6 traffic class not supported");
    152 +		}
    153 +#endif
    154  	}
    155  	if (Iflag) {
    156  		if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,
    157 @@ -1612,13 +1645,17 @@ set_common_sockopts(int s, int af)
    158  	}
    159  
    160  	if (minttl != -1) {
    161 +#ifdef IP_MINTTL
    162  		if (af == AF_INET && setsockopt(s, IPPROTO_IP,
    163  		    IP_MINTTL, &minttl, sizeof(minttl)))
    164  			err(1, "set IP min TTL");
    165 +#endif
    166  
    167 -		else if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6,
    168 +#ifdef IPV6_MINHOPCOUNT
    169 +		if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6,
    170  		    IPV6_MINHOPCOUNT, &minttl, sizeof(minttl)))
    171  			err(1, "set IPv6 min hop count");
    172 +#endif
    173  	}
    174  }
    175  
    176 @@ -1849,14 +1886,22 @@ help(void)
    177  	\t-P proxyuser\tUsername for proxy authentication\n\
    178  	\t-p port\t	Specify local port for remote connects\n\
    179  	\t-R CAfile	CA bundle\n\
    180 -	\t-r		Randomize remote ports\n\
    181 -	\t-S		Enable the TCP MD5 signature option\n\
    182 +	\t-r		Randomize remote ports\n"
    183 +#ifdef TCP_MD5SIG
    184 +	"\
    185 +	\t-S		Enable the TCP MD5 signature option\n"
    186 +#endif
    187 +	"\
    188  	\t-s sourceaddr	Local source address\n\
    189  	\t-T keyword	TOS value or TLS options\n\
    190  	\t-t		Answer TELNET negotiation\n\
    191  	\t-U		Use UNIX domain socket\n\
    192 -	\t-u		UDP mode\n\
    193 -	\t-V rtable	Specify alternate routing table\n\
    194 +	\t-u		UDP mode\n"
    195 +#ifdef SO_RTABLE
    196 +	"\
    197 +	\t-V rtable	Specify alternate routing table\n"
    198 +#endif
    199 +	"\
    200  	\t-v		Verbose\n\
    201  	\t-W recvlimit	Terminate after receiving a number of packets\n\
    202  	\t-w timeout	Timeout for connects and final net reads\n\
    203 -- 
    204 2.54.0
    205