hermes

HTTP GET/HEAD-only web server for static content.
git clone https://git.francescosaccone.com/hermes
Log | Files | Refs | README | LICENSE

commit 56b96978e725408f33ed57345f93307f8d8c1f2e
parent 202c55370405ce078acecd8041bad16bcde89408
Author: Francesco Saccone <francesco@francescosaccone.com>
Date:   Mon, 31 Mar 2025 12:57:57 +0200

feat: add -u flag to set user to drop privileges to

Signed-off-by: Francesco Saccone <francesco@francescosaccone.com>

Diffstat:
Mhermes.c | 16+++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/hermes.c b/hermes.c @@ -5,15 +5,18 @@ #include "socket.h" #define DIRECTORY_INDEX_MAX_LENGTH 32 +#define USER_MAX_LENGTH 32 void print_usage(char *program_name) { - printf("usage: %s [-p port] [-i file]\n", program_name); + printf("usage: %s [-p port] [-i file] [-u user]\n", + program_name); } int main(int argc, char *argv[]) { char *program_name = argv[0], + user[USER_MAX_LENGTH] = "nobody", directory_index[DIRECTORY_INDEX_MAX_LENGTH] = "index.html"; int i, port = 80, server_socket_fd; @@ -54,6 +57,17 @@ main(int argc, char *argv[]) { directory_index[sizeof(directory_index) - 1] = '\0'; i++; break; + case 'u': + if (strlen(argv[i + 1]) >= USER_MAX_LENGTH) { + printf("error: the user length must be less than " + "%u characters", + USER_MAX_LENGTH); + return 1; + } + strncpy(user, argv[i + 1], sizeof(user) - 1); + user[sizeof(user) - 1] = '\0'; + i++; + break; default: print_usage(program_name); return 1;