geomyidae

A small C-based gopherd. (gopher://bitreich.org/1/scm/geomyidae)
git clone git://r-36.net/geomyidae
Log | Files | Refs | README | LICENSE

commit c92aa18514694938b21439afff0b8d1ece617b18
parent 0c2fa66d5056ca6cdd6cf69aa7feb416b21a3ff0
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sun,  7 Jun 2020 22:29:26 +0200

Add -DENABLE_TLS feature for people not wanting TLS.

Diffstat:
Makefile | 8++++++--
main.c | 37++++++++++++++++++++++++++++++++-----
2 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/Makefile b/Makefile @@ -9,8 +9,12 @@ PREFIX = /usr/local BINDIR = ${PREFIX}/sbin MANDIR = ${PREFIX}/share/man/man8 -GEOM_CFLAGS = -D_DEFAULT_SOURCE -I. -I/usr/include ${CFLAGS} -GEOM_LDFLAGS = -L/usr/lib -L. -ltls ${LDFLAGS} +# Comment to disable TLS support +TLS_CFLAGS = -DENABLE_TLS +TLS_LDFLAGS = -ltls + +GEOM_CFLAGS = -D_DEFAULT_SOURCE -I. -I/usr/include ${TLS_CFLAGS} ${CFLAGS} +GEOM_LDFLAGS = -L/usr/lib -L. ${TLS_LDFLAGS} ${LDFLAGS} SRC = main.c ind.c handlr.c OBJ = ${SRC:.c=.o} diff --git a/main.c b/main.c @@ -25,7 +25,10 @@ #include <arpa/inet.h> #include <sys/select.h> #include <sys/time.h> + +#ifdef ENABLE_TLS #include <tls.h> +#endif /* ENABLE_TLS */ #include "ind.h" #include "handlr.h" @@ -398,7 +401,9 @@ void usage(void) { dprintf(2, "usage: %s [-46cden] [-l logfile] " +#ifdef ENABLE_TLS "[-t keyfile certfile] " +#endif /* ENABLE_TLS */ "[-v loglvl] [-b base] [-p port] [-o sport] " "[-u user] [-g group] [-h host] [-i interface ...]\n", argv0); @@ -413,18 +418,27 @@ main(int argc, char *argv[]) socklen_t cltlen; int sock, dofork = 1, inetf = AF_UNSPEC, usechroot = 0, nocgi = 0, errno_save, nbindips = 0, i, j, - nlfdret, *lfdret, listfd, maxlfd, dotls = 0, istls = 0, - shuflen, wlen, shufpos, tlspipe[2], maxrecv, retl, + nlfdret, *lfdret, listfd, maxlfd, istls = 0, +#ifdef ENABLE_TLS + dotls = 0, tlspipe[2], shufbuf[1025], + shuflen, wlen, shufpos, +#endif /* ENABLE_TLS */ + maxrecv, retl, rlen = 0; fd_set rfd; char *port, *base, clienth[NI_MAXHOST], clientp[NI_MAXSERV], *user = NULL, *group = NULL, **bindips = NULL, - *ohost = NULL, *sport = NULL, *p, *certfile = NULL, - *keyfile = NULL, shufbuf[1025], byte0, recvb[1025]; + *ohost = NULL, *sport = NULL, *p, +#ifdef ENABLE_TLS + *certfile = NULL, *keyfile = NULL, +#endif /* ENABLE_TLS */ + byte0, recvb[1025]; struct passwd *us = NULL; struct group *gr = NULL; +#ifdef ENABLE_TLS struct tls_config *tlsconfig = NULL; struct tls *tlsctx = NULL, *tlsclientctx; +#endif /* ENABLE_TLS */ base = stdbase; port = stdport; @@ -478,11 +492,13 @@ main(int argc, char *argv[]) case 'n': revlookup = 0; break; +#ifdef ENABLE_TLS case 't': dotls = 1; keyfile = EARGF(usage()); certfile = EARGF(usage()); break; +#endif /* ENABLE_TLS */ default: usage(); } ARGEND; @@ -493,6 +509,7 @@ main(int argc, char *argv[]) if (argc != 0) usage(); +#ifdef ENABLE_TLS if (dotls) { if (tls_init() < 0) { perror("tls_init"); @@ -519,6 +536,7 @@ main(int argc, char *argv[]) return 1; } } +#endif /* ENABLE_TLS */ if (ohost == NULL) { /* Do not use HOST_NAME_MAX, it is not defined on NetBSD. */ @@ -746,6 +764,7 @@ main(int argc, char *argv[]) if (recv(sock, &byte0, 1, MSG_PEEK) < 1) return 1; +#ifdef ENABLE_TLS /* * First byte is 0x16 == 22, which is the TLS * Handshake first byte. @@ -758,15 +777,19 @@ main(int argc, char *argv[]) if (tls_handshake(tlsclientctx) < 0) return 1; } +#endif /* ENABLE_TLS */ maxrecv = sizeof(recvb) - 1; do { +#ifdef ENABLE_TLS if (istls) { retl = tls_read(tlsclientctx, recvb+rlen, sizeof(recvb)-1-rlen); if (retl < 0) fprintf(stderr, "tls_read failed: %s\n", tls_error(tlsclientctx)); - } else { + } else +#endif /* ENABLE_TLS */ + { retl = read(sock, recvb+rlen, sizeof(recvb)-1-rlen); if (retl < 0) @@ -780,6 +803,7 @@ main(int argc, char *argv[]) if (rlen <= 0) return 1; +#ifdef ENABLE_TLS if (istls) { if (pipe(tlspipe) < 0) { perror("tls_pipe"); @@ -819,6 +843,7 @@ main(int argc, char *argv[]) return 0; } } +#endif /* ENABLE_TLS */ handlerequest(sock, recvb, rlen, base, ohost, sport, clienth, @@ -855,11 +880,13 @@ main(int argc, char *argv[]) } free(listfds); +#ifdef ENABLE_TLS if (dotls) { tls_close(tlsctx); tls_free(tlsctx); tls_config_free(tlsconfig); } +#endif /* ENABLE_TLS */ return 0; }