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