new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / client-agent / receiver.c
old mode 100755 (executable)
new mode 100644 (file)
index 45c96c6..50744cf
@@ -1,6 +1,3 @@
-/* @(#) $Id: ./src/client-agent/receiver.c, 2011/09/08 dcid Exp $
- */
-
 /* Copyright (C) 2009 Trend Micro Inc.
  * All right reserved.
  *
  * Foundation
  */
 
-
 #include "shared.h"
-
-
 #ifdef WIN32
 #include "os_execd/execd.h"
 #endif
-
-
 #include "os_crypto/md5/md5_op.h"
 #include "os_net/os_net.h"
-
-
 #include "agentd.h"
 
-FILE *fp = NULL;
-char file_sum[34] = "";
-char file[OS_SIZE_1024 +1] = "";
+/* Global variables */
+static FILE *fp = NULL;
+static char file_sum[34] = "";
+static char file[OS_SIZE_1024 + 1] = "";
 
 
-/* receive_msg:
- * Receive events from the server.
- */
+/* Receive events from the server */
 void *receive_msg()
 {
-    int recv_b;
-
-    char buffer[OS_MAXSTR +1];
-
+    ssize_t recv_b;
+    char buffer[OS_MAXSTR + 1];
     char cleartext[OS_MAXSTR + 1];
     char *tmp_msg;
 
-
-    memset(cleartext, '\0', OS_MAXSTR +1);
-    memset(buffer, '\0', OS_MAXSTR +1);
-
-
+    memset(cleartext, '\0', OS_MAXSTR + 1);
+    memset(buffer, '\0', OS_MAXSTR + 1);
 
     /* Read until no more messages are available */
-    while((recv_b = recv(agt->sock, buffer, OS_SIZE_1024, MSG_DONTWAIT)) > 0)
-    {
+    while ((recv_b = recv(agt->sock, buffer, OS_SIZE_1024, MSG_DONTWAIT)) > 0) {
         buffer[recv_b] = '\0';
 
-        tmp_msg = ReadSecMSG(&keys, buffer, cleartext, 0, recv_b -1);
-        if(tmp_msg == NULL)
-        {
-            merror(MSG_ERROR,ARGV0,agt->rip[agt->rip_id]);
+        tmp_msg = ReadSecMSG(&keys, buffer, cleartext, 0, recv_b - 1);
+        if (tmp_msg == NULL) {
+            merror(MSG_ERROR, ARGV0, agt->rip[agt->rip_id]);
             continue;
         }
 
-
         /* Check for commands */
-        if(IsValidHeader(tmp_msg))
-        {
+        if (IsValidHeader(tmp_msg)) {
             available_server = (int)time(NULL);
 
-
-            #ifdef WIN32
-            /* Run timeout commands. */
-            if(agt->execdq >= 0)
+#ifdef WIN32
+            /* Run timeout commands */
+            if (agt->execdq >= 0) {
                 WinTimeoutRun(available_server);
-            #endif
-
+            }
+#endif
 
             /* If it is an active response message */
-            if(strncmp(tmp_msg, EXECD_HEADER, strlen(EXECD_HEADER)) == 0)
-            {
-                tmp_msg+=strlen(EXECD_HEADER);
-
-                #ifndef WIN32
-                if(agt->execdq >= 0)
-                {
-                    if(OS_SendUnix(agt->execdq, tmp_msg, 0) < 0)
-                    {
+            if (strncmp(tmp_msg, EXECD_HEADER, strlen(EXECD_HEADER)) == 0) {
+                tmp_msg += strlen(EXECD_HEADER);
+#ifndef WIN32
+                if (agt->execdq >= 0) {
+                    if (OS_SendUnix(agt->execdq, tmp_msg, 0) < 0) {
                         merror("%s: Error communicating with execd",
-                                ARGV0);
+                               ARGV0);
                     }
                 }
-
-                #else
-
-
-                /* Run on windows. */
-                if(agt->execdq >= 0)
-                {
+#else
+                /* Run on Windows */
+                if (agt->execdq >= 0) {
                     WinExecdRun(tmp_msg);
                 }
-
-                #endif
-
+#endif
 
                 continue;
             }
 
-
-            /* Restart syscheck. */
-            else if(strcmp(tmp_msg, HC_SK_RESTART) == 0)
-            {
+            /* Restart syscheck */
+            else if (strcmp(tmp_msg, HC_SK_RESTART) == 0) {
                 os_set_restart_syscheck();
                 continue;
             }
 
-
             /* Ack from server */
-            else if(strcmp(tmp_msg, HC_ACK) == 0)
-            {
+            else if (strcmp(tmp_msg, HC_ACK) == 0) {
                 continue;
             }
 
-
             /* Close any open file pointer if it was being written to */
-            if(fp)
-            {
+            if (fp) {
                 fclose(fp);
                 fp = NULL;
             }
 
-
             /* File update message */
-            if(strncmp(tmp_msg, FILE_UPDATE_HEADER,
-                       strlen(FILE_UPDATE_HEADER)) == 0)
-            {
+            if (strncmp(tmp_msg, FILE_UPDATE_HEADER,
+                        strlen(FILE_UPDATE_HEADER)) == 0) {
                 char *validate_file;
 
                 tmp_msg += strlen(FILE_UPDATE_HEADER);
 
                 /* Going to after the file sum */
                 validate_file = strchr(tmp_msg, ' ');
-                if(!validate_file)
-                {
+                if (!validate_file) {
                     continue;
                 }
 
                 *validate_file = '\0';
 
-                /* copying the file sum */
+                /* Copy the file sum */
                 strncpy(file_sum, tmp_msg, 33);
 
-
-                /* Setting tmp_msg to the beginning of the file name */
+                /* Set tmp_msg to the beginning of the file name */
                 validate_file++;
                 tmp_msg = validate_file;
 
-
-                if((validate_file = strchr(tmp_msg, '\n')) != NULL)
-                {
+                if ((validate_file = strchr(tmp_msg, '\n')) != NULL) {
                     *validate_file = '\0';
                 }
 
-                while((validate_file = strchr(tmp_msg, '/')) != NULL)
-                {
+                while ((validate_file = strchr(tmp_msg, '/')) != NULL) {
                     *validate_file = '-';
                 }
 
-                if(tmp_msg[0] == '.')
+                if (tmp_msg[0] == '.') {
                     tmp_msg[0] = '-';
-
+                }
 
                 snprintf(file, OS_SIZE_1024, "%s/%s",
-                        SHAREDCFG_DIR,
-                        tmp_msg);
-
+                         SHAREDCFG_DIR,
+                         tmp_msg);
 
                 fp = fopen(file, "w");
-                if(!fp)
-                {
-                    merror(FOPEN_ERROR, ARGV0, file);
+                if (!fp) {
+                    merror(FOPEN_ERROR, ARGV0, file, errno, strerror(errno));
                 }
             }
 
-            else if(strncmp(tmp_msg, FILE_CLOSE_HEADER,
-                        strlen(FILE_CLOSE_HEADER)) == 0)
-            {
-                /* no error */
+            else if (strncmp(tmp_msg, FILE_CLOSE_HEADER,
+                             strlen(FILE_CLOSE_HEADER)) == 0) {
+                /* No error */
                 os_md5 currently_md5;
 
-                /* Making sure to close for the rename to work */
-                if(fp)
-                {
+                /* Close for the rename to work */
+                if (fp) {
                     fclose(fp);
                     fp = NULL;
                 }
 
-                if(file[0] == '\0')
-                {
-                    /* nada */
+                if (file[0] == '\0') {
+                    /* Nothing to be done */
                 }
 
-                else if(OS_MD5_File(file, currently_md5) < 0)
-                {
-                    /* Removing file */
+                else if (OS_MD5_File(file, currently_md5, OS_TEXT) < 0) {
+                    /* Remove file */
                     unlink(file);
                     file[0] = '\0';
-                }
-                else
-                {
-                    if(strcmp(currently_md5, file_sum) != 0)
-                    {
+                } else {
+                    if (strcmp(currently_md5, file_sum) != 0) {
                         debug1("%s: ERROR: Failed md5 for: %s -- deleting.",
-                                ARGV0, file);
+                               ARGV0, file);
                         unlink(file);
-                    }
-                    else
-                    {
+                    } else {
                         char *final_file;
 
-                        /* Renaming the file to its orignal name */
+                        /* Rename the file to its original name */
                         final_file = strrchr(file, '/');
-                        if(final_file)
-                        {
-                            if(strcmp(final_file + 1, SHAREDCFG_FILENAME) == 0)
-                            {
+                        if (final_file) {
+                            if (strcmp(final_file + 1, SHAREDCFG_FILENAME) == 0) {
                                 UnmergeFiles(file, SHAREDCFG_DIR);
                             }
-                        }
-                        else
-                        {
-                            /* Removing file. */
+                        } else {
+                            /* Remove file */
                             unlink(file);
                         }
                     }
@@ -236,29 +177,22 @@ void *receive_msg()
                 }
             }
 
-            else
-            {
+            else {
                 merror("%s: WARN: Unknown message received from server.", ARGV0);
             }
         }
 
-        else if(fp)
-        {
+        else if (fp) {
             available_server = (int)time(NULL);
             fprintf(fp, "%s", tmp_msg);
         }
 
-        else
-        {
+        else {
             merror("%s: WARN: Unknown message received. No action defined.",
-                    ARGV0);
+                   ARGV0);
         }
     }
 
-
-    return(NULL);
-
+    return (NULL);
 }
 
-
-/* EOF */