-/* @(#) $Id: ./src/rootcheck/check_rc_dev.c, 2011/09/08 dcid Exp $
- */
-
/* Copyright (C) 2009 Trend Micro Inc.
* All right reserved.
*
* Foundation
*/
-
#ifndef WIN32
#include "shared.h"
#include "rootcheck.h"
-int _dev_errors;
-int _dev_total;
+/* Prototypes */
+static int read_dev_file(const char *file_name);
+static int read_dev_dir(const char *dir_name);
+
+/* Global variables */
+static int _dev_errors;
+static int _dev_total;
-/** Prototypes **/
-int read_dev_dir(char *dir_name);
-int read_dev_file(char *file_name)
+static int read_dev_file(const char *file_name)
{
struct stat statbuf;
- if(lstat(file_name, &statbuf) < 0)
- {
- return(-1);
+ if (lstat(file_name, &statbuf) < 0) {
+ return (-1);
}
- if(S_ISDIR(statbuf.st_mode))
- {
- #ifdef DEBUG
- verbose("%s: Reading dir: %s\n",ARGV0, file_name);
- #endif
-
- return(read_dev_dir(file_name));
+ /* Process directories recursively */
+ if (S_ISDIR(statbuf.st_mode)) {
+#ifdef DEBUG
+ verbose("%s: Reading dir: %s\n", ARGV0, file_name);
+#endif
+ return (read_dev_dir(file_name));
}
- else if(S_ISREG(statbuf.st_mode))
- {
- char op_msg[OS_SIZE_1024 +1];
+ else if (S_ISREG(statbuf.st_mode)) {
+ char op_msg[OS_SIZE_1024 + 1];
snprintf(op_msg, OS_SIZE_1024, "File '%s' present on /dev."
- " Possible hidden file.", file_name);
+ " Possible hidden file.", file_name);
notify_rk(ALERT_SYSTEM_CRIT, op_msg);
_dev_errors++;
}
- return(0);
+ return (0);
}
-/* read_dir v0.1
- *
- */
-int read_dev_dir(char *dir_name)
+static int read_dev_dir(const char *dir_name)
{
int i;
-
DIR *dp;
+ struct dirent *entry;
- struct dirent *entry;
-
- /* when will these people learn that dev is not
- * meant to store log files or other kind of texts..
+ /* When will these people learn that /dev is not
+ * meant to store log files or other kind of texts?
*/
- char *(ignore_dev[]) = {"MAKEDEV","README.MAKEDEV",
- "MAKEDEV.README", ".udevdb",
- ".udev.tdb", ".initramfs-tools",
- "MAKEDEV.local", ".udev", ".initramfs",
- "oprofile","fd","cgroup",
- #ifdef SOLARIS
- ".devfsadm_dev.lock",
- ".devlink_db_lock",
- ".devlink_db",
- ".devfsadm_daemon.lock",
- ".devfsadm_deamon.lock",
- ".devfsadm_synch_door",
- ".zone_reg_door",
- #endif
- NULL};
-
+ const char *(ignore_dev[]) = {"MAKEDEV", "README.MAKEDEV",
+ "MAKEDEV.README", ".udevdb",
+ ".udev.tdb", ".initramfs-tools",
+ "MAKEDEV.local", ".udev", ".initramfs",
+ "oprofile", "fd", "cgroup",
+#ifdef SOLARIS
+ ".devfsadm_dev.lock",
+ ".devlink_db_lock",
+ ".devlink_db",
+ ".devfsadm_daemon.lock",
+ ".devfsadm_deamon.lock",
+ ".devfsadm_synch_door",
+ ".zone_reg_door",
+#endif
+ NULL
+ };
/* Full path ignore */
- char *(ignore_dev_full_path[]) = {"/dev/shm/sysconfig",
- "/dev/bus/usb/.usbfs",
- "/dev/shm",
- "/dev/gpmctl",
- NULL};
-
- if((dir_name == NULL)||(strlen(dir_name) > PATH_MAX))
- {
- merror("%s: Invalid directory given.",ARGV0);
- return(-1);
+ const char *(ignore_dev_full_path[]) = {"/dev/shm/sysconfig",
+ "/dev/bus/usb/.usbfs",
+ "/dev/shm",
+ "/dev/gpmctl",
+ NULL
+ };
+
+ if (dir_name == NULL || strlen(dir_name) > PATH_MAX) {
+ merror("%s: Invalid directory given.", ARGV0);
+ return (-1);
}
- /* Opening the directory given */
+ /* Open directory */
dp = opendir(dir_name);
- if(!dp)
- {
- return(-1);
+ if (!dp) {
+ return (-1);
}
- while((entry = readdir(dp)) != NULL)
- {
- char f_name[PATH_MAX +2];
+ /* Iterate over all files in the directory */
+ while ((entry = readdir(dp)) != NULL) {
+ char f_name[PATH_MAX + 2];
- /* Just ignore . and .. */
- if((strcmp(entry->d_name,".") == 0) ||
- (strcmp(entry->d_name,"..") == 0))
+ /* Ignore . and .. */
+ if (strcmp(entry->d_name, ".") == 0 ||
+ strcmp(entry->d_name, "..") == 0) {
continue;
+ }
_dev_total++;
/* Do not look for the ignored files */
- for(i = 0;ignore_dev[i] != NULL;i++)
- {
- if(strcmp(ignore_dev[i], entry->d_name) == 0)
+ for (i = 0; ignore_dev[i] != NULL; i++) {
+ if (strcmp(ignore_dev[i], entry->d_name) == 0) {
break;
+ }
}
-
- if(ignore_dev[i] != NULL)
+ if (ignore_dev[i] != NULL) {
continue;
+ }
- f_name[PATH_MAX +1] = '\0';
- snprintf(f_name, PATH_MAX +1, "%s/%s",dir_name, entry->d_name);
-
+ f_name[PATH_MAX + 1] = '\0';
+ snprintf(f_name, PATH_MAX + 1, "%s/%s", dir_name, entry->d_name);
/* Do not look for the full ignored files */
- for(i = 0;ignore_dev_full_path[i] != NULL;i++)
- {
- if(strcmp(ignore_dev_full_path[i], f_name) == 0)
+ for (i = 0; ignore_dev_full_path[i] != NULL; i++) {
+ if (strcmp(ignore_dev_full_path[i], f_name) == 0) {
break;
+ }
}
-
- /* Checking against the full path. */
- if(ignore_dev_full_path[i] != NULL)
- {
+ /* Check against the full path */
+ if (ignore_dev_full_path[i] != NULL) {
continue;
}
-
+ /* Found a non-ignored entry in the directory, so process it */
read_dev_file(f_name);
-
}
closedir(dp);
-
- return(0);
+ return (0);
}
-
-/* check_rc_dev: v0.1
- *
- */
-void check_rc_dev(char *basedir)
+void check_rc_dev(const char *basedir)
{
- char file_path[OS_SIZE_1024 +1];
+ char file_path[OS_SIZE_1024 + 1];
_dev_total = 0, _dev_errors = 0;
-
debug1("%s: DEBUG: Starting on check_rc_dev", ARGV0);
snprintf(file_path, OS_SIZE_1024, "%s/dev", basedir);
read_dev_dir(file_path);
-
- if(_dev_errors == 0)
- {
- char op_msg[OS_SIZE_1024 +1];
+ if (_dev_errors == 0) {
+ char op_msg[OS_SIZE_1024 + 1];
snprintf(op_msg, OS_SIZE_1024, "No problem detected on the /dev "
- "directory. Analyzed %d files",
- _dev_total);
+ "directory. Analyzed %d files",
+ _dev_total);
notify_rk(ALERT_OK, op_msg);
}
return;
}
-/* EOF */
-
#else
-/* Windows */
-void check_rc_dev(char *basedir)
+
+/* Not relevant on Windows */
+void check_rc_dev(__attribute__((unused)) char *basedir)
{
return;
}
-#endif
+
+#endif /* WIN32 */
+