From d32b0c14a217547dfdf9818f8d96fa0be41d1c01 Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Sat, 1 Apr 2017 15:28:49 +0430 Subject: now the server will only run the driver commands. not anything. --- daemon/daemon_aux.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 4 deletions(-) (limited to 'daemon/daemon_aux.c') diff --git a/daemon/daemon_aux.c b/daemon/daemon_aux.c index ce47f37..3a78eb6 100644 --- a/daemon/daemon_aux.c +++ b/daemon/daemon_aux.c @@ -59,6 +59,7 @@ bool cleanser(char cleansee[]) return (cleansee_health && nullterminated); } + /**********************************************************************************************************************/ int mutator_server(FILE* log_file) { @@ -67,9 +68,11 @@ int mutator_server(FILE* log_file) char client_message[2000]; FILE* clientistream; + FILE* mutator_config; char runresponse[4000]; - char NOOUT[]="command did not return any output. could be an error or not.\n"; - char BADOUT[]="what are you exactly trying to do?"; + const char NOOUT[]="command did not return any output. could be an error or not.\n"; + const char BADOUT[]="what are you exactly trying to do?"; + const char STD_OUT[]="stdout returned:\n"; /*create socket*/ socket_desc = socket(AF_INET, SOCK_STREAM, 0); @@ -120,10 +123,59 @@ int mutator_server(FILE* log_file) fprintf(log_file, "%s", "got command from client.\n"); + mutator_config = fopen("/home/bloodstalker/devi/hell2/daemon/mutator.config", "r"); + + char configline[100]; + const char delimiter[2]="="; + char* token_var; + const char mutator_home_var[]="MUTATOR_HOME"; + const char driver_name[] = "/mutator.sh "; + char* full_command; + char* temp; + +#if 1 +#if 1 + while (fgets(configline,sizeof(configline), mutator_config) != NULL) + { + temp = strstr(configline, mutator_home_var); + + if (temp != NULL) + { + memmove(temp, configline + strlen(mutator_home_var) + 1, strlen(configline) - strlen(mutator_home_var) + 1); + + break; + } + } +#endif + +#if 1 + for (int i = 0; i < strlen(temp); ++i) + { + if (i == strlen(temp) - 1) + { + temp[i] = '\0'; + } + } + full_command = malloc(strlen(temp) + strlen(client_message) + strlen(driver_name) + 1); + + strcpy(full_command,temp); + strcat(full_command, driver_name); + strcat(full_command, client_message); + fprintf(log_file, "%s", full_command); +#endif +#endif + if (cleanser(client_message) == true) { +#ifndef __DBG + clientistream = popen(full_command, "r"); +#endif + +#if defined(__DBG) /*open pipe, run command*/ clientistream = popen(client_message, "r"); + //clientistream = popen(full_command, "r"); +#endif } else { @@ -132,6 +184,9 @@ int mutator_server(FILE* log_file) continue; } + fprintf(log_file, "%s", "freeing memory reserved for command.\n"); + free(full_command); + if (clientistream == NULL) { perror("client command did not run successfully."); @@ -146,16 +201,21 @@ int mutator_server(FILE* log_file) if (fgets(runresponse, sizeof(runresponse), clientistream) == NULL) { /*say there was nothing on stdout to send.*/ + fprintf(log_file, "%s", "command returned no stdout.\n"); write(client_sock, NOOUT, strlen(NOOUT)); } + else + { + fprintf(log_file, "%s", "command returned stdout.\n"); + write(client_sock, STD_OUT, strlen(STD_OUT)); + } rewind(clientistream); while (fgets(runresponse, sizeof(runresponse), clientistream) != NULL) { #if defined(__DBG) - fscanf(log_file, "%s", "command stdout:"); - fscanf(log_file, "%s", runresponse); + fprintf(log_file, "%s", "command stdout:\n"); #endif write(client_sock, runresponse, strlen(runresponse)); fprintf(log_file, "%s", runresponse); -- cgit v1.2.3 From a9ffad836eafa989b2d4e489fe2d591169b1de8e Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Sun, 2 Apr 2017 09:11:05 +0430 Subject: fixed some issues --- daemon/daemon_aux.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'daemon/daemon_aux.c') diff --git a/daemon/daemon_aux.c b/daemon/daemon_aux.c index 3a78eb6..3572972 100644 --- a/daemon/daemon_aux.c +++ b/daemon/daemon_aux.c @@ -149,11 +149,14 @@ int mutator_server(FILE* log_file) #endif #if 1 - for (int i = 0; i < strlen(temp); ++i) + if (temp != NULL) { - if (i == strlen(temp) - 1) + for (int i = 0; i < strlen(temp); ++i) { - temp[i] = '\0'; + if (i == strlen(temp) - 1) + { + temp[i] = '\0'; + } } } full_command = malloc(strlen(temp) + strlen(client_message) + strlen(driver_name) + 1); @@ -181,11 +184,14 @@ int mutator_server(FILE* log_file) { fprintf(log_file, "%s", "what are you trying to do exactly?"); write(client_sock, BADOUT, strlen(BADOUT)); + free(full_command); + fclose(mutator_config); continue; } fprintf(log_file, "%s", "freeing memory reserved for command.\n"); free(full_command); + fclose(mutator_config); if (clientistream == NULL) { -- cgit v1.2.3 From aaebb9c2d6bb9aff225f88884737bbc978df0ae0 Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Sun, 2 Apr 2017 09:41:59 +0430 Subject: added a check for empty or config file not found. --- daemon/daemon_aux.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'daemon/daemon_aux.c') diff --git a/daemon/daemon_aux.c b/daemon/daemon_aux.c index 3572972..278d207 100644 --- a/daemon/daemon_aux.c +++ b/daemon/daemon_aux.c @@ -73,6 +73,7 @@ int mutator_server(FILE* log_file) const char NOOUT[]="command did not return any output. could be an error or not.\n"; const char BADOUT[]="what are you exactly trying to do?"; const char STD_OUT[]="stdout returned:\n"; + const char EMPTY_CONFIG[]="empty config file or file not found.\n"; /*create socket*/ socket_desc = socket(AF_INET, SOCK_STREAM, 0); @@ -133,6 +134,17 @@ int mutator_server(FILE* log_file) char* full_command; char* temp; + /*checking for an empty config-file. could also mean the config file was not found.*/ + if(fgets(configline,sizeof(configline), mutator_config) == NULL) + { + fprintf(log_file, "%s", EMPTY_CONFIG); + fclose(log_file); + fclose(mutator_config); + return 1; + } + + rewind(mutator_config); + #if 1 #if 1 while (fgets(configline,sizeof(configline), mutator_config) != NULL) @@ -149,8 +161,6 @@ int mutator_server(FILE* log_file) #endif #if 1 - if (temp != NULL) - { for (int i = 0; i < strlen(temp); ++i) { if (i == strlen(temp) - 1) @@ -158,7 +168,6 @@ int mutator_server(FILE* log_file) temp[i] = '\0'; } } - } full_command = malloc(strlen(temp) + strlen(client_message) + strlen(driver_name) + 1); strcpy(full_command,temp); -- cgit v1.2.3 From b731fb9edf33fb2e1ec1fa1ab8e65f8680688351 Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Sun, 2 Apr 2017 09:54:52 +0430 Subject: more fixes --- daemon/daemon_aux.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'daemon/daemon_aux.c') diff --git a/daemon/daemon_aux.c b/daemon/daemon_aux.c index 278d207..843c84b 100644 --- a/daemon/daemon_aux.c +++ b/daemon/daemon_aux.c @@ -140,6 +140,8 @@ int mutator_server(FILE* log_file) fprintf(log_file, "%s", EMPTY_CONFIG); fclose(log_file); fclose(mutator_config); + close(client_sock); + close(socket_desc); return 1; } -- cgit v1.2.3 From 0fa03ec7db294080d4df7f8eff50b0312c48162f Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Sun, 2 Apr 2017 16:36:10 +0430 Subject: general overhaul to how the server handles the command execution. fixed the new-line char being sent along with the command. --- daemon/daemon_aux.c | 73 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 21 deletions(-) (limited to 'daemon/daemon_aux.c') diff --git a/daemon/daemon_aux.c b/daemon/daemon_aux.c index 843c84b..65fbc4b 100644 --- a/daemon/daemon_aux.c +++ b/daemon/daemon_aux.c @@ -23,10 +23,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.* #if 1 #undef __DBG #endif + +#define __DBG_2 +#if 1 +#undef __DBG_2 +#endif + +#define CLEAN_UP() \ + do{\ + fclose(log_file);\ + fclose(mutator_config);\ + close(client_sock);\ + close(socket_desc);\ + }\ + while(0) /**********************************************************************************************************************/ /*inclusion directive*/ #include "daemon_aux.h" /*standard headers*/ +#include #include #include #include @@ -73,7 +88,9 @@ int mutator_server(FILE* log_file) const char NOOUT[]="command did not return any output. could be an error or not.\n"; const char BADOUT[]="what are you exactly trying to do?"; const char STD_OUT[]="stdout returned:\n"; - const char EMPTY_CONFIG[]="empty config file or file not found.\n"; + const char EMPTY_CONFIG[]="error: empty config file.\n"; + const char NFOUND_CONFIG[]="error: cant find config file in the default path.\n"; + const char SERVER_TERM[]="server terminated.\n"; /*create socket*/ socket_desc = socket(AF_INET, SOCK_STREAM, 0); @@ -126,6 +143,17 @@ int mutator_server(FILE* log_file) mutator_config = fopen("/home/bloodstalker/devi/hell2/daemon/mutator.config", "r"); + if (mutator_config == NULL) + { + write(client_sock, NFOUND_CONFIG, strlen(NFOUND_CONFIG)); + write(client_sock, SERVER_TERM, strlen(SERVER_TERM)); + fprintf(log_file, "%s", NFOUND_CONFIG); + fprintf(log_file, "%s%d%s", "fopen returned: ", errno, "\n"); + fprintf(log_file, "%s", SERVER_TERM); + CLEAN_UP(); + return errno; + } + char configline[100]; const char delimiter[2]="="; char* token_var; @@ -133,51 +161,54 @@ int mutator_server(FILE* log_file) const char driver_name[] = "/mutator.sh "; char* full_command; char* temp; + char* dummy; /*checking for an empty config-file. could also mean the config file was not found.*/ if(fgets(configline,sizeof(configline), mutator_config) == NULL) { + write(client_sock, EMPTY_CONFIG, strlen(EMPTY_CONFIG)); + write(client_sock, SERVER_TERM, strlen(SERVER_TERM)); fprintf(log_file, "%s", EMPTY_CONFIG); - fclose(log_file); - fclose(mutator_config); - close(client_sock); - close(socket_desc); - return 1; + fprintf(log_file, "%s", SERVER_TERM); + CLEAN_UP(); + /*@DEVI-return SIGPIPE*/ + return 141; } rewind(mutator_config); -#if 1 -#if 1 while (fgets(configline,sizeof(configline), mutator_config) != NULL) { temp = strstr(configline, mutator_home_var); if (temp != NULL) { - memmove(temp, configline + strlen(mutator_home_var) + 1, strlen(configline) - strlen(mutator_home_var) + 1); + memmove(temp, configline + strlen(mutator_home_var) + 1, strlen(configline) - strlen(mutator_home_var) - 1); break; } } -#endif -#if 1 - for (int i = 0; i < strlen(temp); ++i) - { - if (i == strlen(temp) - 1) - { - temp[i] = '\0'; - } - } - full_command = malloc(strlen(temp) + strlen(client_message) + strlen(driver_name) + 1); + /*@DEVI-null-terminating temp*/ + temp[strlen(temp) - strlen(mutator_home_var) - 2] = '\0'; + /*@DEVI-checks whether the line-break char was also sent.if yes, then removes it.*/ + if (client_message[read_size - 1] == '\n') + { + client_message[read_size - 1] = '\0'; + } + + full_command = malloc(strlen(temp) + read_size + strlen(driver_name) + 1); strcpy(full_command,temp); strcat(full_command, driver_name); + /*@DEVI-client_message is not null-terminated but strcat takes care of that.*/ strcat(full_command, client_message); - fprintf(log_file, "%s", full_command); -#endif + +#if defined(__DBG_2) + fprintf(log_file, "%s%s%s", "temp is: ", temp, "\n"); + fprintf(log_file, "%s%s%s", "driver_name is: ",driver_name, "\n"); #endif + fprintf(log_file, "%s%s%s", "full_command is: ", full_command, "\n"); if (cleanser(client_message) == true) { -- cgit v1.2.3 From ba407e763f31d647179d7a11305263b28ea4360d Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Sun, 2 Apr 2017 17:13:50 +0430 Subject: fixing some issues --- daemon/daemon_aux.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'daemon/daemon_aux.c') diff --git a/daemon/daemon_aux.c b/daemon/daemon_aux.c index 65fbc4b..00841de 100644 --- a/daemon/daemon_aux.c +++ b/daemon/daemon_aux.c @@ -110,6 +110,7 @@ int mutator_server(FILE* log_file) /*Bind*/ if (bind(socket_desc, (struct sockaddr*)&server, sizeof(server)) < 0) { + close(socket_desc); perror("bind failed.error.\n"); return 1; } @@ -150,7 +151,11 @@ int mutator_server(FILE* log_file) fprintf(log_file, "%s", NFOUND_CONFIG); fprintf(log_file, "%s%d%s", "fopen returned: ", errno, "\n"); fprintf(log_file, "%s", SERVER_TERM); - CLEAN_UP(); + + fclose(log_file); + close(client_sock); + close(socket_desc); + return errno; } -- cgit v1.2.3