about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-07-31 23:51:23 -0400
committerJune McEnroe <june@causal.agency>2020-07-31 23:51:23 -0400
commit8a91c64edf551c3c05483ec3f5c87e8dc27a3cc5 (patch)
treecee269932d1d455b2086db9016bae51a196e3867
parentUse RAND_bytes instead of arc4random_buf (diff)
downloadpounce-8a91c64edf551c3c05483ec3f5c87e8dc27a3cc5.tar.gz
pounce-8a91c64edf551c3c05483ec3f5c87e8dc27a3cc5.zip
Use snprintf instead of strlcpy
-rw-r--r--bounce.c6
-rw-r--r--client.c2
-rw-r--r--compat.h3
-rw-r--r--local.c6
4 files changed, 9 insertions, 8 deletions
diff --git a/bounce.c b/bounce.c
index c9b27b0..bee8aca 100644
--- a/bounce.c
+++ b/bounce.c
@@ -352,16 +352,16 @@ int main(int argc, char *argv[]) {
 		switch (opt) {
 			break; case '!': insecure = true;
 			break; case 'A': clientCA = true; caPath = optarg;
-			break; case 'C': strlcpy(certPath, optarg, sizeof(certPath));
+			break; case 'C': snprintf(certPath, sizeof(certPath), "%s", optarg);
 			break; case 'H': bindHost = optarg;
-			break; case 'K': strlcpy(privPath, optarg, sizeof(privPath));
+			break; case 'K': snprintf(privPath, sizeof(privPath), "%s", optarg);
 			break; case 'N': stateNoNames = true;
 			break; case 'P': bindPort = optarg;
 			break; case 'Q': serverQueueInterval = parseInterval(optarg);
 			break; case 'R': blindReq |= capParse(optarg, NULL);
 			break; case 'S': serverBindHost = optarg;
 			break; case 'T': clientSTS = false;
-			break; case 'U': strlcpy(bindPath, optarg, sizeof(bindPath));
+			break; case 'U': snprintf(bindPath, sizeof(bindPath), "%s", optarg);
 			break; case 'W': clientPass = optarg;
 			break; case 'a': blindReq |= CapSASL; plain = optarg;
 			break; case 'c': clientCert = optarg;
diff --git a/client.c b/client.c
index 7f9a06a..4f315c8 100644
--- a/client.c
+++ b/client.c
@@ -428,7 +428,7 @@ static char *snip(char *dst, size_t cap, const char *src, const regex_t *regex)
 		);
 		if (len >= cap) return NULL;
 	}
-	len += strlcpy(&dst[len], src, cap - len);
+	len += snprintf(&dst[len], cap - len, "%s", src);
 	return (len < cap ? dst : NULL);
 }
 
diff --git a/compat.h b/compat.h
index 63109a0..4559434 100644
--- a/compat.h
+++ b/compat.h
@@ -30,8 +30,7 @@
 
 // libcrypto defines these functions if libc doesn't.
 void explicit_bzero(void *b, size_t len);
-#ifndef strlcpy
-size_t strlcpy(char *restrict dst, const char *restrict src, size_t dstsize);
+#ifndef strlcat
 size_t strlcat(char *restrict dst, const char *restrict src, size_t dstsize);
 #endif
 
diff --git a/local.c b/local.c
index 1e19ae5..b3670ee 100644
--- a/local.c
+++ b/local.c
@@ -161,8 +161,10 @@ size_t localUnix(int fds[], size_t cap, const char *path) {
 	if (sock < 0) err(EX_OSERR, "socket");
 
 	struct sockaddr_un addr = { .sun_family = AF_UNIX };
-	size_t len = strlcpy(addr.sun_path, path, sizeof(addr.sun_path));
-	if (len >= sizeof(addr.sun_path)) {
+	int len = snprintf(
+		addr.sun_path, sizeof(addr.sun_path), "%s", path
+	);
+	if ((size_t)len >= sizeof(addr.sun_path)) {
 		errx(EX_CONFIG, "path too long: %s", path);
 	}