From 9cf2266ece28f7a8d21ff4cb46e6cdd8d42447cb Mon Sep 17 00:00:00 2001 From: Jordan Bancino Date: Thu, 11 Aug 2022 11:50:35 -0400 Subject: [PATCH] Make TelodendriaConfigParse() actually validate the listenPort. I want to already have a valid port number by the time we need to bind to it. --- contrib/development.conf | 2 +- src/Telodendria.c | 6 +++--- src/TelodendriaConfig.c | 11 ++++++++--- src/include/TelodendriaConfig.h | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/contrib/development.conf b/contrib/development.conf index 171c5cf..47782fa 100644 --- a/contrib/development.conf +++ b/contrib/development.conf @@ -3,7 +3,7 @@ # server-name "localhost"; -chroot "."; +chroot "./chroot"; id "jordan"; data-dir "./data"; federation "true"; diff --git a/src/Telodendria.c b/src/Telodendria.c index dc2307c..f21d511 100644 --- a/src/Telodendria.c +++ b/src/Telodendria.c @@ -107,7 +107,7 @@ main(int argc, char **argv) TelodendriaPrintHeader(lc); #ifdef __OpenBSD__ - Log(lc, LOG_DEBUG, "Attempting pledge() and unveil()..."); + Log(lc, LOG_DEBUG, "Attempting pledge..."); if (pledge("stdio rpath wpath cpath inet dns getpw id unveil", NULL) != 0) { @@ -155,7 +155,7 @@ main(int argc, char **argv) if (strcmp(configArg, "-") == 0) { - configFile = stdout; + configFile = stdin; } else { @@ -239,7 +239,7 @@ main(int argc, char **argv) Log(lc, LOG_DEBUG, "Configuration:"); LogConfigIndent(lc); - Log(lc, LOG_DEBUG, "Listen On: %s:%s", tConfig->listenHost, tConfig->listenPort); + Log(lc, LOG_DEBUG, "Listen On: %s:%d", tConfig->listenHost, tConfig->listenPort); Log(lc, LOG_DEBUG, "Server Name: %s", tConfig->serverName); Log(lc, LOG_DEBUG, "Chroot: %s", tConfig->chroot); Log(lc, LOG_DEBUG, "Run As: %s:%s", tConfig->uid, tConfig->gid); diff --git a/src/TelodendriaConfig.c b/src/TelodendriaConfig.c index 0114b77..ecd0f96 100644 --- a/src/TelodendriaConfig.c +++ b/src/TelodendriaConfig.c @@ -97,14 +97,20 @@ TelodendriaConfigParse(HashMap * config, LogConfig * lc) { Log(lc, LOG_WARNING, "No 'listen' directive specified; using defaults, which may change."); tConfig->listenHost = UtilStringDuplicate("localhost"); - tConfig->listenPort = UtilStringDuplicate("8008"); + tConfig->listenPort = 8008; } else { ASSERT_NO_CHILDREN("listen"); ASSERT_VALUES("listen", 2); COPY_VALUE(tConfig->listenHost, 0); - COPY_VALUE(tConfig->listenPort, 1); + + tConfig->listenPort = (unsigned short) atoi(ArrayGet(value, 1)); + if (!tConfig->listenPort) + { + Log(lc, LOG_ERROR, "Expected numeric value for listen port, got '%s'.", ArrayGet(value, 1)); + goto error; + } } GET_DIRECTIVE("server-name"); @@ -311,7 +317,6 @@ TelodendriaConfigFree(TelodendriaConfig * tConfig) } free(tConfig->listenHost); - free(tConfig->listenPort); free(tConfig->serverName); free(tConfig->chroot); free(tConfig->uid); diff --git a/src/include/TelodendriaConfig.h b/src/include/TelodendriaConfig.h index a622ff1..4a4afe2 100644 --- a/src/include/TelodendriaConfig.h +++ b/src/include/TelodendriaConfig.h @@ -53,7 +53,7 @@ typedef enum TelodendriaConfigFlag typedef struct TelodendriaConfig { char *listenHost; - char *listenPort; + unsigned short listenPort; char *serverName; char *chroot; char *uid;