commit ca50a393a3c32b286a1f323ff85247941819ea9c
parent cc28872545635bfae01e9afbb1efb5370e8fa300
Author: Francesco Saccone <francesco@francescosaccone.com>
Date: Mon, 31 Mar 2025 15:49:22 +0200
feat: add -d flag for directory to server and chroot in
Signed-off-by: Francesco Saccone <francesco@francescosaccone.com>
Diffstat:
M | main.c | | | 18 | +++++++++++++++++- |
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/main.c b/main.c
@@ -8,19 +8,22 @@
#include "socket.h"
#include "utils.h"
+#define DIRECTORY_MAX_LENGTH 1024
#define DIRECTORY_INDEX_MAX_LENGTH 32
#define USER_NAME_MAX_LENGTH 32
#define GROUP_NAME_MAX_LENGTH 32
void
print_usage(char *program_name) {
- print_error("usage: %s [-p port] [-i file] [-u user] [-g group]",
+ print_error("usage: %s -d directory [-p port] [-i file] [-u user] "
+ "[-g group]",
program_name);
}
int
main(int argc, char *argv[]) {
char *program_name = argv[0],
+ directory[DIRECTORY_MAX_LENGTH],
user_name[USER_NAME_MAX_LENGTH] = "nobody",
group_name[GROUP_NAME_MAX_LENGTH] = "nogroup",
directory_index[DIRECTORY_INDEX_MAX_LENGTH] = "index.html";
@@ -41,6 +44,19 @@ main(int argc, char *argv[]) {
}
switch (argument[1]) {
+ case 'd':
+ if (strlen(argv[i + 1]) >= DIRECTORY_MAX_LENGTH) {
+ print_error("error: directory length must be less than "
+ "%u characters",
+ DIRECTORY_MAX_LENGTH);
+ }
+ snprintf(directory,
+ sizeof(directory),
+ "%s",
+ argv[i + 1]);
+ directory[sizeof(directory) - 1] = '\0';
+ i++;
+ break;
case 'p':
port = atoi(argv[i + 1]);
if (port < 1 || port > 65535) {