hermes

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

commit ca956bb7a9449cfc3259e522236333e185170bbe
parent 1cf9799c6bd6653faaffcc573b0fa5561f914751
Author: Francesco Saccone <francesco@francescosaccone.com>
Date:   Mon, 31 Mar 2025 13:05:02 +0200

feat: add -g flag to set group to drop privileges to

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

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

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