new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / util / clear_stats.c
old mode 100755 (executable)
new mode 100644 (file)
index 068b573..c258c74
@@ -1,6 +1,3 @@
-/* @(#) $Id: ./src/util/clear_stats.c, 2011/09/08 dcid Exp $
- */
-
 /* Copyright (C) 2009 Trend Micro Inc.
  * All right reserved.
  *
  * Foundation
  */
 
-
-/* This tool will clear the project statistics */
+/* This tool will clear the event statistics */
 
 #include "shared.h"
 
 #undef ARGV0
 #define ARGV0 "clear_stats"
 
+/* Prototypes */
+static void helpmsg(void) __attribute__((noreturn));
 
-/** help **/
-void helpmsg()
+
+static void helpmsg()
 {
     printf("\nOSSEC HIDS %s: Clear the events stats (averages).\n", ARGV0);
     printf("Available options:\n");
@@ -31,109 +29,82 @@ void helpmsg()
     exit(1);
 }
 
-
-/** main **/
 int main(int argc, char **argv)
 {
     int clear_daily = 0;
     int clear_weekly = 0;
 
-    char *dir = DEFAULTDIR;
-    char *group = GROUPGLOBAL;
-    char *user = USER;
-    int gid;
-    int uid;
+    const char *dir = DEFAULTDIR;
+    const char *group = GROUPGLOBAL;
+    const char *user = USER;
+    gid_t gid;
+    uid_t uid;
 
-
-    /* Setting the name */
+    /* Set the name */
     OS_SetName(ARGV0);
 
-
     /* user arguments */
-    if(argc != 2)
-    {
+    if (argc != 2) {
         helpmsg();
     }
 
-    /* Getting the group name */
+    /* Get the group name */
     gid = Privsep_GetGroup(group);
     uid = Privsep_GetUser(user);
-    if(gid < 0)
-    {
-           ErrorExit(USER_ERROR, ARGV0, user, group);
+    if (uid == (uid_t) - 1 || gid == (gid_t) - 1) {
+        ErrorExit(USER_ERROR, ARGV0, user, group);
     }
-       
 
-    /* Setting the group */
-    if(Privsep_SetGroup(gid) < 0)
-    {
-           ErrorExit(SETGID_ERROR,ARGV0, group);
+    /* Set the group */
+    if (Privsep_SetGroup(gid) < 0) {
+        ErrorExit(SETGID_ERROR, ARGV0, group, errno, strerror(errno));
     }
 
-
-    /* Chrooting to the default directory */
-    if(Privsep_Chroot(dir) < 0)
-    {
-        ErrorExit(CHROOT_ERROR, ARGV0, dir);
+    /* Chroot to the default directory */
+    if (Privsep_Chroot(dir) < 0) {
+        ErrorExit(CHROOT_ERROR, ARGV0, dir, errno, strerror(errno));
     }
 
-
     /* Inside chroot now */
     nowChroot();
 
-
-    /* Setting the user */
-    if(Privsep_SetUser(uid) < 0)
-    {
-        ErrorExit(SETUID_ERROR, ARGV0, user);
+    /* Set the user */
+    if (Privsep_SetUser(uid) < 0) {
+        ErrorExit(SETUID_ERROR, ARGV0, user, errno, strerror(errno));
     }
 
     /* User options */
-    if(strcmp(argv[1], "-h") == 0)
-    {
+    if (strcmp(argv[1], "-h") == 0) {
         helpmsg();
-    }
-    else if(strcmp(argv[1], "-a") == 0)
-    {
+    } else if (strcmp(argv[1], "-a") == 0) {
         clear_daily = 1;
         clear_weekly = 1;
-    }
-    else if(strcmp(argv[1], "-d") == 0)
-    {
+    } else if (strcmp(argv[1], "-d") == 0) {
         clear_daily = 1;
-    }
-    else if(strcmp(argv[1], "-w") == 0)
-    {
+    } else if (strcmp(argv[1], "-w") == 0) {
         clear_weekly = 1;
-    }
-    else
-    {
+    } else {
         printf("\n** Invalid option '%s'.\n", argv[1]);
         helpmsg();
     }
 
-
     /* Clear daily files */
-    if(clear_daily)
-    {
-        char *daily_dir = STATQUEUE;
+    if (clear_daily) {
+        const char *daily_dir = STATQUEUE;
         DIR *daily;
         struct dirent *entry;
 
         daily = opendir(daily_dir);
-        if(!daily)
-        {
+        if (!daily) {
             ErrorExit("%s: Unable to open: '%s'", ARGV0, daily_dir);
         }
 
-        while((entry = readdir(daily)) != NULL)
-        {
-            char full_path[OS_MAXSTR +1];
+        while ((entry = readdir(daily)) != NULL) {
+            char full_path[OS_MAXSTR + 1];
 
             /* Do not even attempt to delete . and .. :) */
-            if((strcmp(entry->d_name,".") == 0)||
-               (strcmp(entry->d_name,"..") == 0))
-            {
+            if ((strcmp(entry->d_name, ".") == 0) ||
+                    (strcmp(entry->d_name, "..") == 0)) {
                 continue;
             }
 
@@ -146,41 +117,35 @@ int main(int argc, char **argv)
         closedir(daily);
     }
 
-
     /* Clear weekly averages */
-    if(clear_weekly)
-    {
+    if (clear_weekly) {
         int i = 0;
-        while(i <= 6)
-        {
-            char *daily_dir = STATWQUEUE;
-            char dir_path[OS_MAXSTR +1];
+        while (i <= 6) {
+            const char *daily_dir = STATWQUEUE;
+            char dir_path[OS_MAXSTR + 1];
             DIR *daily;
             struct dirent *entry;
 
             snprintf(dir_path, OS_MAXSTR, "%s/%d", daily_dir, i);
             daily = opendir(dir_path);
-            if(!daily)
-            {
+            if (!daily) {
                 ErrorExit("%s: Unable to open: '%s' (no stats)",
-                           ARGV0, dir_path);
+                          ARGV0, dir_path);
             }
 
-            while((entry = readdir(daily)) != NULL)
-            {
-                char full_path[OS_MAXSTR +1];
+            while ((entry = readdir(daily)) != NULL) {
+                char full_path[OS_MAXSTR + 1];
 
                 /* Do not even attempt to delete . and .. :) */
-                if((strcmp(entry->d_name,".") == 0)||
-                        (strcmp(entry->d_name,"..") == 0))
-                {
+                if ((strcmp(entry->d_name, ".") == 0) ||
+                        (strcmp(entry->d_name, "..") == 0)) {
                     continue;
                 }
 
                 /* Remove file */
                 full_path[OS_MAXSTR] = '\0';
                 snprintf(full_path, OS_MAXSTR, "%s/%s", dir_path,
-                                                        entry->d_name);
+                         entry->d_name);
                 unlink(full_path);
             }
 
@@ -190,8 +155,6 @@ int main(int argc, char **argv)
     }
 
     printf("\n** Internal stats clear.\n\n");
-    return(0);
+    return (0);
 }
 
-
-/* EOF */