diff options
author | Donald Cooley <chytraeus@protonmail.com> | 2020-02-08 02:00:33 +0700 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2020-02-08 02:00:33 +0700 |
commit | d1958c4a94b3ae2f24faeb8aa828d2065b36ee13 (patch) | |
tree | 11ce09c8e8aa00f7122923cf830a8f807d0ac328 /network/netcat-openbsd/patches/0002-build-without-TLS-support.patch | |
parent | 960bca1643f56ff4393a9339847467a8f8a7c361 (diff) |
network/netcat-openbsd: Updated for version 1.206.
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'network/netcat-openbsd/patches/0002-build-without-TLS-support.patch')
-rw-r--r-- | network/netcat-openbsd/patches/0002-build-without-TLS-support.patch | 872 |
1 files changed, 872 insertions, 0 deletions
diff --git a/network/netcat-openbsd/patches/0002-build-without-TLS-support.patch b/network/netcat-openbsd/patches/0002-build-without-TLS-support.patch new file mode 100644 index 0000000000..c4a72c65af --- /dev/null +++ b/network/netcat-openbsd/patches/0002-build-without-TLS-support.patch @@ -0,0 +1,872 @@ +From: Guilhem Moulin <guilhem@debian.org> +Date: Fri, 09 Jun 2017 13:21:23 +0200 +Subject: build without TLS support + +tls.h isn't available in libsd-dev, and TLS supports adds options (-C, -Z) +that are already used by our Debian-specific patches. + +--- + Makefile | 2 + nc.1 | 114 ++--------------------------------------- + netcat.c | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++---------- + 3 files changed, 153 insertions(+), 135 deletions(-) + +--- a/Makefile ++++ b/Makefile +@@ -2,8 +2,6 @@ + + PROG= nc + SRCS= netcat.c atomicio.c socks.c +-LDADD+= -ltls -lssl -lcrypto +-DPADD+= ${LIBTLS} ${LIBSSL} ${LIBCRYPTO} + + LIBS= `pkg-config --libs libbsd` -lresolv + OBJS= $(SRCS:.c=.o) +--- a/nc.1 ++++ b/nc.1 +@@ -33,20 +33,14 @@ + .Nd arbitrary TCP and UDP connections and listens + .Sh SYNOPSIS + .Nm nc +-.Op Fl 46cDdFhklNnrStUuvz +-.Op Fl C Ar certfile +-.Op Fl e Ar name +-.Op Fl H Ar hash ++.Op Fl 46DdFhklNnrStUuvz + .Op Fl I Ar length + .Op Fl i Ar interval +-.Op Fl K Ar keyfile + .Op Fl M Ar ttl + .Op Fl m Ar minttl + .Op Fl O Ar length +-.Op Fl o Ar staplefile + .Op Fl P Ar proxy_username + .Op Fl p Ar source_port +-.Op Fl R Ar CAfile + .Op Fl s Ar source + .Op Fl T Ar keyword + .Op Fl V Ar rtable +@@ -54,7 +48,6 @@ + .Op Fl w Ar timeout + .Op Fl X Ar proxy_protocol + .Op Fl x Ar proxy_address Ns Op : Ns Ar port +-.Op Fl Z Ar peercertfile + .Op Ar destination + .Op Ar port + .Sh DESCRIPTION +@@ -99,28 +92,10 @@ The options are as follows: + Use IPv4 addresses only. + .It Fl 6 + Use IPv6 addresses only. +-.It Fl C Ar certfile +-Load the public key part of the TLS peer certificate from +-.Ar certfile , +-in PEM format. +-Requires +-.Fl c . +-.It Fl c +-Use TLS to connect or listen. +-Cannot be used together with any of the options +-.Fl FuU . + .It Fl D + Enable debugging on the socket. + .It Fl d + Do not attempt to read from stdin. +-.It Fl e Ar name +-Only accept the TLS peer certificate if it contains the +-.Ar name . +-Requires +-.Fl c . +-If not specified, +-.Ar destination +-is used. + .It Fl F + Pass the first connected socket using + .Xr sendmsg 2 +@@ -137,18 +112,7 @@ using the + .Cm ProxyUseFdpass + option). + Cannot be used with +-.Fl c +-or + .Fl U . +-.It Fl H Ar hash +-Only accept the TLS peer certificate if its hash returned from +-.Xr tls_peer_cert_hash 3 +-matches +-.Ar hash . +-Requires +-.Fl c +-and cannot be used with +-.Fl T Cm noverify . + .It Fl h + Print out the + .Nm +@@ -160,12 +124,6 @@ Sleep for + .Ar interval + seconds between lines of text sent and received. + Also causes a delay time between connections to multiple ports. +-.It Fl K Ar keyfile +-Load the TLS private key from +-.Ar keyfile , +-in PEM format. +-Requires +-.Fl c . + .It Fl k + When a connection is completed, listen for another one. + Requires +@@ -196,15 +154,6 @@ Do not do any DNS or service lookups on + hostnames or ports. + .It Fl O Ar length + Specify the size of the TCP send buffer. +-.It Fl o Ar staplefile +-During the TLS handshake, load data to be stapled from +-.Ar staplefile , +-which is expected to contain an OCSP response from an OCSP server in +-DER format. +-Requires +-.Fl c +-and +-.Fl C . + .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. +@@ -213,13 +162,6 @@ Proxy authentication is only supported f + Specify the source port + .Nm + should use, subject to privilege restrictions and availability. +-.It Fl R Ar CAfile +-Load the root CA bundle for TLS certificate verification from +-.Ar CAfile , +-in PEM format, instead of +-.Pa /etc/ssl/cert.pem . +-Requires +-.Fl c . + .It Fl r + Choose source and/or destination ports randomly + instead of sequentially within a range or in the order that the system +@@ -239,35 +181,7 @@ Cannot be used together with + or + .Fl x . + .It Fl T Ar keyword +-Change the IPv4 TOS/IPv6 traffic class value or the TLS options. +-.Pp +-For TLS options, +-.Ar keyword +-may be one of: +-.Cm noverify , +-which disables certificate verification; +-.Cm noname , +-which disables certificate name checking; +-.Cm clientcert , +-which requires a client certificate on incoming connections; or +-.Cm muststaple , +-which requires the peer to provide a valid stapled OCSP response +-with the handshake. +-The following TLS options specify a value in the form of a +-.Ar key Ns = Ns Ar value +-pair: +-.Cm ciphers , +-which allows the supported TLS ciphers to be specified (see +-.Xr tls_config_set_ciphers 3 +-for further details); +-.Cm protocols , +-which allows the supported TLS protocols to be specified (see +-.Xr tls_config_parse_protocols 3 +-for further details). +-Specifying TLS options requires +-.Fl c . +-.Pp +-For the IPv4 TOS/IPv6 traffic class value, ++Change the IPv4 TOS/IPv6 traffic class value. + .Ar keyword + may be one of + .Cm critical , +@@ -291,13 +205,13 @@ to script telnet sessions. + Use + .Ux Ns -domain + sockets. +-Cannot be used together with any of the options +-.Fl cFx . ++Cannot be used together with ++.Fl F ++or ++.Fl x . + .It Fl u + Use UDP instead of TCP. + Cannot be used together with +-.Fl c +-or + .Fl x . + For + .Ux Ns -domain +@@ -360,12 +274,6 @@ An IPv6 address can be specified unambig + in square brackets. + A proxy cannot be used with any of the options + .Fl lsuU . +-.It Fl Z Ar peercertfile +-Save the peer certificates to +-.Ar peercertfile , +-in PEM format. +-Requires +-.Fl c . + .It Fl z + Only scan for listening daemons, without sending any data to them. + Cannot be used together with +@@ -519,16 +427,6 @@ the source port, with a timeout of 5 sec + .Pp + .Dl $ nc -p 31337 -w 5 host.example.com 42 + .Pp +-Open a TCP connection to port 443 of www.example.com, and negotiate TLS with +-any supported TLS protocol version and "compat" ciphers: +-.Pp +-.Dl $ nc -cv -T protocols=all -T ciphers=compat www.example.com 443 +-.Pp +-Open a TCP connection to port 443 of www.google.ca, and negotiate TLS. +-Check for a different name in the certificate for validation: +-.Pp +-.Dl $ nc -cv -e adsf.au.doubleclick.net www.google.ca 443 +-.Pp + Open a UDP connection to port 53 of host.example.com: + .Pp + .Dl $ nc -u host.example.com 53 +--- a/netcat.c ++++ b/netcat.c +@@ -99,7 +99,9 @@ + #include <stdlib.h> + #include <string.h> + #include <time.h> +-#include <tls.h> ++#ifdef TLS ++# include <tls.h> ++#endif + #include <unistd.h> + #include <bsd/stdlib.h> + #include <bsd/string.h> +@@ -115,10 +117,12 @@ + #define POLL_STDOUT 3 + #define BUFSIZE 16384 + +-#define TLS_NOVERIFY (1 << 1) +-#define TLS_NONAME (1 << 2) +-#define TLS_CCERT (1 << 3) +-#define TLS_MUSTSTAPLE (1 << 4) ++#ifdef TLS ++# define TLS_NOVERIFY (1 << 1) ++# define TLS_NONAME (1 << 2) ++# define TLS_CCERT (1 << 3) ++# define TLS_MUSTSTAPLE (1 << 4) ++#endif + + /* Command Line Options */ + int dflag; /* detached, no stdin */ +@@ -144,6 +148,7 @@ int Sflag; /* TCP MD5 signature opti + int Tflag = -1; /* IP Type of Service */ + int rtableid = -1; + ++# if defined(TLS) + int usetls; /* use TLS */ + const char *Cflag; /* Public cert file */ + const char *Kflag; /* Private key file */ +@@ -156,6 +161,7 @@ char *tls_expecthash; /* required hash + char *tls_ciphers; /* TLS ciphers */ + char *tls_protocols; /* TLS protocols */ + FILE *Zflag; /* file to save peer cert */ ++# endif + + int recvcount, recvlimit; + int timeout = -1; +@@ -170,10 +176,16 @@ int strtoport(char *portstr, int udp); + void build_ports(char *); + void help(void) __attribute__((noreturn)); + int local_listen(const char *, const char *, struct addrinfo); ++# if defined(TLS) + void readwrite(int, struct tls *); ++# else ++void readwrite(int); ++# endif + void fdpass(int nfd) __attribute__((noreturn)); + int remote_connect(const char *, const char *, struct addrinfo); ++# if defined(TLS) + int timeout_tls(int, struct tls *, int (*)(struct tls *)); ++# endif + int timeout_connect(int, const struct sockaddr *, socklen_t); + int socks_connect(const char *, const char *, struct addrinfo, + const char *, const char *, struct addrinfo, int, const char *); +@@ -183,15 +195,24 @@ int unix_connect(char *); + int unix_listen(char *); + void set_common_sockopts(int, int); + int process_tos_opt(char *, int *); ++# if defined(TLS) + int process_tls_opt(char *, int *); + void save_peer_cert(struct tls *_tls_ctx, FILE *_fp); ++# endif + void report_sock(const char *, const struct sockaddr *, socklen_t, char *); ++# if defined(TLS) + void report_tls(struct tls *tls_ctx, char * host); ++# endif + void usage(int); ++# if defined(TLS) + ssize_t drainbuf(int, unsigned char *, size_t *, struct tls *); + ssize_t fillbuf(int, unsigned char *, size_t *, struct tls *); + void tls_setup_client(struct tls *, int, char *); + struct tls *tls_setup_server(struct tls *, int, char *); ++# else ++ssize_t drainbuf(int, unsigned char *, size_t *); ++ssize_t fillbuf(int, unsigned char *, size_t *); ++# endif + + int + main(int argc, char *argv[]) +@@ -206,8 +227,10 @@ main(int argc, char *argv[]) + const char *errstr; + struct addrinfo proxyhints; + char unix_dg_tmp_socket_buf[UNIX_DG_TMP_SOCKET_SIZE]; ++# if defined(TLS) + struct tls_config *tls_cfg = NULL; + struct tls *tls_ctx = NULL; ++# endif + uint32_t protocols; + + ret = 1; +@@ -215,12 +238,18 @@ main(int argc, char *argv[]) + host = NULL; + uport = NULL; + sv = NULL; ++# if defined(TLS) + Rflag = tls_default_ca_cert_file(); ++# endif + + signal(SIGPIPE, SIG_IGN); + + while ((ch = getopt(argc, argv, ++# if defined(TLS) + "46C:cDde:FH:hI:i:K:klM:m:NnO:o:P:p:R:rSs:T:tUuV:vW:w:X:x:Z:z")) ++# else ++ "46DdFhI:i:klM:m:NnO:P:p:rSs:T:tUuV:vW:w:X:x:z")) ++# endif + != -1) { + switch (ch) { + case '4': +@@ -242,24 +271,30 @@ main(int argc, char *argv[]) + else + errx(1, "unsupported proxy protocol"); + break; ++# if defined(TLS) + case 'C': + Cflag = optarg; + break; + case 'c': + usetls = 1; + break; ++# endif + case 'd': + dflag = 1; + break; ++# if defined(TLS) + case 'e': + tls_expectname = optarg; + break; ++# endif + case 'F': + Fflag = 1; + break; ++# if defined(TLS) + case 'H': + tls_expecthash = optarg; + break; ++# endif + case 'h': + help(); + break; +@@ -268,9 +303,11 @@ main(int argc, char *argv[]) + if (errstr) + errx(1, "interval %s: %s", errstr, optarg); + break; ++# if defined(TLS) + case 'K': + Kflag = optarg; + break; ++# endif + case 'k': + kflag = 1; + break; +@@ -299,10 +336,12 @@ main(int argc, char *argv[]) + case 'p': + pflag = optarg; + break; ++# if defined(TLS) + case 'R': + tls_cachanged = 1; + Rflag = optarg; + break; ++# endif + case 'r': + rflag = 1; + break; +@@ -344,12 +383,14 @@ main(int argc, char *argv[]) + if ((proxy = strdup(optarg)) == NULL) + err(1, NULL); + break; ++# if defined(TLS) + case 'Z': + if (strcmp(optarg, "-") == 0) + Zflag = stderr; + else if ((Zflag = fopen(optarg, "w")) == NULL) + err(1, "can't open %s", optarg); + break; ++# endif + case 'z': + zflag = 1; + break; +@@ -368,9 +409,11 @@ main(int argc, char *argv[]) + errx(1, "TCP send window %s: %s", + errstr, optarg); + break; ++# if defined(TLS) + case 'o': + oflag = optarg; + break; ++# endif + case 'S': + # if defined(TCP_MD5SIG) + Sflag = 1; +@@ -381,8 +424,10 @@ main(int argc, char *argv[]) + case 'T': + errstr = NULL; + errno = 0; ++# if defined(TLS) + if (process_tls_opt(optarg, &TLSopt)) + break; ++# endif + if (process_tos_opt(optarg, &Tflag)) + break; + if (strlen(optarg) > 1 && optarg[0] == '0' && +@@ -392,7 +437,11 @@ main(int argc, char *argv[]) + Tflag = (int)strtonum(optarg, 0, 255, + &errstr); + if (Tflag < 0 || Tflag > 255 || errstr || errno) ++# if defined(TLS) + errx(1, "illegal tos/tls value %s", optarg); ++# else ++ errx(1, "illegal tos value %s", optarg); ++# endif + break; + default: + usage(1); +@@ -429,6 +478,7 @@ main(int argc, char *argv[]) + } else + usage(1); + ++# if defined(TLS) + if (usetls) { + if (Cflag && unveil(Cflag, "r") == -1) + err(1, "unveil"); +@@ -452,15 +502,19 @@ main(int argc, char *argv[]) + err(1, "unveil"); + } + } ++# endif + + if (!lflag && kflag) + errx(1, "must use -l with -k"); ++# if defined(TLS) + if (uflag && usetls) + errx(1, "cannot use -c and -u"); + if ((family == AF_UNIX) && usetls) + errx(1, "cannot use -c and -U"); ++# endif + if ((family == AF_UNIX) && Fflag) + errx(1, "cannot use -F and -U"); ++# if defined(TLS) + if (Fflag && usetls) + errx(1, "cannot use -c and -F"); + if (TLSopt && !usetls) +@@ -479,6 +533,7 @@ main(int argc, char *argv[]) + errx(1, "you must specify -c to use -H"); + if (tls_expectname && !usetls) + errx(1, "you must specify -c to use -e"); ++# endif + + /* Get name of temporary socket for unix datagram client */ + if ((family == AF_UNIX) && uflag && !lflag) { +@@ -545,6 +600,7 @@ main(int argc, char *argv[]) + proxyhints.ai_flags |= AI_NUMERICHOST; + } + ++# if defined(TLS) + if (usetls) { + if ((tls_cfg = tls_config_new()) == NULL) + errx(1, "unable to allocate TLS config"); +@@ -580,7 +636,8 @@ main(int argc, char *argv[]) + err(1, "pledge"); + } else if (pledge("stdio inet dns", NULL) == -1) + err(1, "pledge"); +- } ++ } ++# endif + if (lflag) { + ret = 0; + +@@ -591,6 +648,7 @@ main(int argc, char *argv[]) + s = unix_listen(host); + } + ++# if defined(TLS) + if (usetls) { + tls_config_verify_client_optional(tls_cfg); + if ((tls_ctx = tls_server()) == NULL) +@@ -599,6 +657,7 @@ main(int argc, char *argv[]) + errx(1, "tls configuration failed (%s)", + tls_error(tls_ctx)); + } ++# endif + /* Allow only one connection at a time, but stay alive. */ + for (;;) { + if (family != AF_UNIX) { +@@ -614,7 +673,11 @@ main(int argc, char *argv[]) + * let it receive datagrams from multiple + * socket pairs. + */ ++# if defined(TLS) + readwrite(s, NULL); ++# else ++ readwrite(s); ++# endif + } else if (uflag && !kflag) { + /* + * For UDP and not -k, we will use recvfrom() +@@ -639,9 +702,14 @@ main(int argc, char *argv[]) + report_sock("Connection received", + (struct sockaddr *)&z, len, NULL); + ++# if defined(TLS) + readwrite(s, NULL); + } else { + struct tls *tls_cctx = NULL; ++# else ++ readwrite(s); ++ } else { ++# endif + int connfd; + + len = sizeof(cliaddr); +@@ -655,6 +723,7 @@ main(int argc, char *argv[]) + report_sock("Connection received", + (struct sockaddr *)&cliaddr, len, + family == AF_UNIX ? host : NULL); ++# if defined(TLS) + if ((usetls) && + (tls_cctx = tls_setup_server(tls_ctx, connfd, host))) + readwrite(connfd, tls_cctx); +@@ -664,6 +733,10 @@ main(int argc, char *argv[]) + timeout_tls(s, tls_cctx, tls_close); + close(connfd); + tls_free(tls_cctx); ++# else ++ readwrite(connfd); ++ close(connfd); ++# endif + } + if (family == AF_UNIX && uflag) { + if (connect(s, NULL, 0) == -1) +@@ -678,7 +751,11 @@ main(int argc, char *argv[]) + + if ((s = unix_connect(host)) > 0) { + if (!zflag) ++# if defined(TLS) + readwrite(s, NULL); ++# else ++ readwrite(s); ++# endif + close(s); + } else { + warn("%s", host); +@@ -699,6 +776,7 @@ main(int argc, char *argv[]) + for (s = -1, i = 0; portlist[i] != NULL; i++) { + if (s != -1) + close(s); ++# if defined(TLS) + tls_free(tls_ctx); + tls_ctx = NULL; + +@@ -709,6 +787,7 @@ main(int argc, char *argv[]) + errx(1, "tls configuration failed (%s)", + tls_error(tls_ctx)); + } ++# endif + if (xflag) + s = socks_connect(host, portlist[i], hints, + proxy, proxyport, proxyhints, socksv, +@@ -746,6 +825,7 @@ main(int argc, char *argv[]) + } + if (Fflag) + fdpass(s); ++# if defined(TLS) + else { + if (usetls) + tls_setup_client(tls_ctx, s, host); +@@ -754,13 +834,19 @@ main(int argc, char *argv[]) + if (tls_ctx) + timeout_tls(s, tls_ctx, tls_close); + } ++# else ++ else if (!zflag) ++ readwrite(s); ++# endif + } + } + + if (s != -1) + close(s); ++# if defined(TLS) + tls_free(tls_ctx); + tls_config_free(tls_cfg); ++# endif + + return ret; + } +@@ -802,6 +888,7 @@ unix_bind(char *path, int flags) + return s; + } + ++# if defined(TLS) + int + timeout_tls(int s, struct tls *tls_ctx, int (*func)(struct tls *)) + { +@@ -888,6 +975,7 @@ tls_setup_server(struct tls *tls_ctx, in + } + return NULL; + } ++# endif + + /* + * unix_connect() +@@ -1113,7 +1201,11 @@ local_listen(const char *host, const cha + * Loop that polls on the network file descriptor and stdin. + */ + void ++# if defined(TLS) + readwrite(int net_fd, struct tls *tls_ctx) ++# else ++readwrite(int net_fd) ++# endif + { + struct pollfd pfd[4]; + int stdin_fd = STDIN_FILENO; +@@ -1213,12 +1305,17 @@ readwrite(int net_fd, struct tls *tls_ct + /* try to read from stdin */ + if (pfd[POLL_STDIN].revents & POLLIN && stdinbufpos < BUFSIZE) { + ret = fillbuf(pfd[POLL_STDIN].fd, stdinbuf, ++# if defined(TLS) + &stdinbufpos, NULL); + if (ret == TLS_WANT_POLLIN) + pfd[POLL_STDIN].events = POLLIN; + else if (ret == TLS_WANT_POLLOUT) + pfd[POLL_STDIN].events = POLLOUT; +- else if (ret == 0 || ret == -1) ++ else ++# else ++ &stdinbufpos); ++# endif ++ if (ret == 0 || ret == -1) + pfd[POLL_STDIN].fd = -1; + /* read something - poll net out */ + if (stdinbufpos > 0) +@@ -1230,12 +1327,17 @@ readwrite(int net_fd, struct tls *tls_ct + /* try to write to network */ + if (pfd[POLL_NETOUT].revents & POLLOUT && stdinbufpos > 0) { + ret = drainbuf(pfd[POLL_NETOUT].fd, stdinbuf, ++# if defined(TLS) + &stdinbufpos, tls_ctx); + if (ret == TLS_WANT_POLLIN) + pfd[POLL_NETOUT].events = POLLIN; + else if (ret == TLS_WANT_POLLOUT) + pfd[POLL_NETOUT].events = POLLOUT; +- else if (ret == -1) ++ else ++# else ++ &stdinbufpos); ++# endif ++ if (ret == -1) + pfd[POLL_NETOUT].fd = -1; + /* buffer empty - remove self from polling */ + if (stdinbufpos == 0) +@@ -1247,12 +1349,17 @@ readwrite(int net_fd, struct tls *tls_ct + /* try to read from network */ + if (pfd[POLL_NETIN].revents & POLLIN && netinbufpos < BUFSIZE) { + ret = fillbuf(pfd[POLL_NETIN].fd, netinbuf, ++# if defined(TLS) + &netinbufpos, tls_ctx); + if (ret == TLS_WANT_POLLIN) + pfd[POLL_NETIN].events = POLLIN; + else if (ret == TLS_WANT_POLLOUT) + pfd[POLL_NETIN].events = POLLOUT; +- else if (ret == -1) ++ else ++# else ++ &netinbufpos); ++# endif ++ if (ret == -1) + pfd[POLL_NETIN].fd = -1; + /* eof on net in - remove from pfd */ + if (ret == 0) { +@@ -1279,12 +1386,17 @@ readwrite(int net_fd, struct tls *tls_ct + /* try to write to stdout */ + if (pfd[POLL_STDOUT].revents & POLLOUT && netinbufpos > 0) { + ret = drainbuf(pfd[POLL_STDOUT].fd, netinbuf, ++# if defined(TLS) + &netinbufpos, NULL); + if (ret == TLS_WANT_POLLIN) + pfd[POLL_STDOUT].events = POLLIN; + else if (ret == TLS_WANT_POLLOUT) + pfd[POLL_STDOUT].events = POLLOUT; +- else if (ret == -1) ++ else ++# else ++ &netinbufpos); ++# endif ++ if (ret == -1) + pfd[POLL_STDOUT].fd = -1; + /* buffer empty - remove self from polling */ + if (netinbufpos == 0) +@@ -1308,21 +1420,31 @@ readwrite(int net_fd, struct tls *tls_ct + } + + ssize_t ++# if defined(TLS) + drainbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls) ++# else ++drainbuf(int fd, unsigned char *buf, size_t *bufpos) ++# endif + { + ssize_t n; + ssize_t adjust; + ++# if defined(TLS) + if (tls) { + n = tls_write(tls, buf, *bufpos); + if (n == -1) + errx(1, "tls write failed (%s)", tls_error(tls)); + } else { ++# endif + n = write(fd, buf, *bufpos); + /* don't treat EAGAIN, EINTR as error */ + if (n == -1 && (errno == EAGAIN || errno == EINTR)) ++# if defined(TLS) + n = TLS_WANT_POLLOUT; + } ++# else ++ n = -2; ++# endif + if (n <= 0) + return n; + /* adjust buffer */ +@@ -1334,21 +1456,31 @@ drainbuf(int fd, unsigned char *buf, siz + } + + ssize_t ++# if defined(TLS) + fillbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls) ++# else ++fillbuf(int fd, unsigned char *buf, size_t *bufpos) ++# endif + { + size_t num = BUFSIZE - *bufpos; + ssize_t n; + ++# if defined(TLS) + if (tls) { + n = tls_read(tls, buf + *bufpos, num); + if (n == -1) + errx(1, "tls read failed (%s)", tls_error(tls)); + } else { ++# endif + n = read(fd, buf + *bufpos, num); + /* don't treat EAGAIN, EINTR as error */ + if (n == -1 && (errno == EAGAIN || errno == EINTR)) ++# if defined(TLS) + n = TLS_WANT_POLLIN; + } ++# else ++ n = -2; ++# endif + if (n <= 0) + return n; + *bufpos += n; +@@ -1666,6 +1798,7 @@ process_tos_opt(char *s, int *val) + return 0; + } + ++# if defined(TLS) + int + process_tls_opt(char *s, int *flags) + { +@@ -1779,6 +1912,7 @@ report_tls(struct tls * tls_ctx, char * + + } + } ++# endif + + void + report_sock(const char *msg, const struct sockaddr *sa, socklen_t salen, +@@ -1817,17 +1951,12 @@ help(void) + fprintf(stderr, "\tCommand Summary:\n\ + \t-4 Use IPv4\n\ + \t-6 Use IPv6\n\ +- \t-C certfile Public key file\n\ +- \t-c Use TLS\n\ + \t-D Enable the debug socket option\n\ + \t-d Detach from stdin\n\ +- \t-e name\t Required name in peer certificate\n\ + \t-F Pass socket fd\n\ +- \t-H hash\t Hash string of peer certificate\n\ + \t-h This help text\n\ + \t-I length TCP receive buffer length\n\ + \t-i interval Delay interval for lines sent, ports scanned\n\ +- \t-K keyfile Private key file\n\ + \t-k Keep inbound sockets open for multiple connects\n\ + \t-l Listen mode, for inbound connects\n\ + \t-M ttl Outgoing TTL / Hop Limit\n\ +@@ -1835,14 +1964,12 @@ help(void) + \t-N Shutdown the network socket after EOF on stdin\n\ + \t-n Suppress name/port resolutions\n\ + \t-O length TCP send buffer length\n\ +- \t-o staplefile Staple file\n\ + \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-s source Local source address\n\ +- \t-T keyword TOS value or TLS options\n\ ++ \t-T keyword TOS value\n\ + \t-t Answer TELNET negotiation\n\ + \t-U Use UNIX domain socket\n\ + \t-u UDP mode\n\ +@@ -1852,7 +1979,6 @@ help(void) + \t-w timeout Timeout for connects and final net reads\n\ + \t-X proto Proxy protocol: \"4\", \"5\" (SOCKS) or \"connect\"\n\ + \t-x addr[:port]\tSpecify proxy address and port\n\ +- \t-Z Peer certificate file\n\ + \t-z Zero-I/O mode [used for scanning]\n\ + Port numbers can be individual or ranges: lo-hi [inclusive]\n"); + exit(0); +@@ -1862,15 +1988,11 @@ void + usage(int ret) + { + fprintf(stderr, +- "usage: nc [-46cDdFhklNnrStUuvz] [-C certfile] [-e name] " +- "[-H hash] [-I length]\n" +- "\t [-i interval] [-K keyfile] [-M ttl] [-m minttl] [-O length]\n" +- "\t [-o staplefile] [-P proxy_username] [-p source_port] " +- "[-R CAfile]\n" ++ "usage: nc [-46DdFhklNnrStUuvz] [-I length] [-i interval] [-M ttl]\n" ++ "\t [-m minttl] [-O length] [-P proxy_username] [-p source_port]\n" + "\t [-s source] [-T keyword] [-V rtable] [-W recvlimit] " + "[-w timeout]\n" + "\t [-X proxy_protocol] [-x proxy_address[:port]] " +- "[-Z peercertfile]\n" + "\t [destination] [port]\n"); + if (ret) + exit(1); |