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:
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;