diff --git a/main.c b/main.c index 98448f4..661b3d0 100644 --- a/main.c +++ b/main.c @@ -24,6 +24,7 @@ void display_file(const char *, const char *); void status (const int, const char *, const char *); void drop_privileges(const char *, const char *); void eunveil(const char *path, const char *permissions); +size_t estrlcat(char *dst, const char *src, size_t dstsize); size_t estrlcpy(char *dst, const char *src, size_t dstsize); void @@ -48,6 +49,16 @@ estrlcpy(char *dst, const char *src, size_t dstsize) return n; } +size_t +estrlcat(char *dst, const char *src, size_t dstsize) +{ + size_t size; + if ((size = strlcat(dst, src, dstsize)) >= dstsize) + err(1, "strlcat"); + + return size; +} + void drop_privileges(const char *user, const char *path) { @@ -260,7 +271,7 @@ main(int argc, char **argv) if (strlen(file) == 0) estrlcpy(file, "/index.gmi", 11); if (file[strlen(file) - 1] == '/') - strlcat(file, "index.gmi", sizeof(file)); + estrlcat(file, "index.gmi", sizeof(file)); } else { syslog(LOG_DAEMON, "unknown situation after parsing query"); @@ -281,11 +292,11 @@ main(int argc, char **argv) * path/foobar/hello */ if (virtualhost) { - strlcat(path, hostname, sizeof(path)); - strlcat(path, "/", sizeof(path)); + estrlcat(path, hostname, sizeof(path)); + estrlcat(path, "/", sizeof(path)); } /* add the base dir to the file requested */ - strlcat(path, file, sizeof(path)); + estrlcat(path, file, sizeof(path)); /* open file and send it to stdout */ display_file(path, lang);