On 2020-07-05, Nihal Jere <ni...@nihaljere.xyz> wrote: > I wrote a very simple TLS reverse proxy which can be used as a companion > to quark. Essentially, it just turns quark's HTTP into HTTPS. It depends > only on libtls (from LibreSSL) and libbsd (for strlcpy).
Seems like a neat project. Have you considered using memccpy instead of strlcpy? I don't think it's worth adding a dependency on libbsd over such a simple function, and memccpy is POSIX (XSI) and accepted for C2x. I think it even simplifies things a bit: diff --git a/tlsrp.c b/tlsrp.c index 2766f32..c8d5d39 100644 --- a/tlsrp.c +++ b/tlsrp.c @@ -1,6 +1,5 @@ #include <stdio.h> #include <string.h> -#include <bsd/string.h> #include <stdarg.h> #include <stdlib.h> #include <unistd.h> @@ -70,13 +69,11 @@ dounixconnect(const char *sockname) int sfd; struct sockaddr_un saddr = {0}; - if (strlen(sockname) > SUN_PATH_LENGTH-1) + if (!memccpy(saddr.sun_path, sockname, '\0', SUN_PATH_LENGTH)) die("unix socket path too long"); saddr.sun_family = AF_UNIX; - strlcpy((char *) &saddr.sun_path, sockname, SUN_PATH_LENGTH); - if ((sfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) die("failed to create unix socket:"); Some other things I noticed: - You should probably use sizeof(saddr.sun_path) instead of a hard-coded assumed minimum size. - The tlsrp Makefile rule is missing a dependency on tlsrp.c and util.c. - It might be useful to have separate options for the hostname to listen on and the hostname to connect to. - I think the way to include the libtls header is #include <tls.h>. Some systems (including OpenBSD) don't install it in /usr/include/libressl, and the .pc file should add the appropriate include directory.