diff options
Diffstat (limited to 'src/msec_find/find.c')
-rw-r--r-- | src/msec_find/find.c | 304 |
1 files changed, 152 insertions, 152 deletions
diff --git a/src/msec_find/find.c b/src/msec_find/find.c index 6a0a95a..27c72f7 100644 --- a/src/msec_find/find.c +++ b/src/msec_find/find.c @@ -69,176 +69,176 @@ static int use_regexp = 0; static int traverse(const char *file, const struct stat *sb, int flag, struct FTW *s) { - struct passwd *u_nss_data; - struct group *g_nss_data; - - /* - * handle bogus glibc ftw - * else we won't print only one '/' in front of file names - */ - if (strncmp(file, "//", 2) == 0 ) - file++; - + struct passwd *u_nss_data; + struct group *g_nss_data; + + /* + * handle bogus glibc ftw + * else we won't print only one '/' in front of file names + */ + if (strncmp(file, "//", 2) == 0 ) + file++; + + /* + * Don't walk throught /dev & /proc + */ + if ( (strncmp("/proc", file, 5) == 0) || (strncmp("/dev", file, 4) == 0) ) + return 0; + + if (use_regexp && regexec(&exclude_regexp, file, 0, NULL, 0) == 0) { + return 0; + } + + switch (flag) { /* - * Don't walk throught /dev & /proc + * Regular file handling. */ - if ( (strncmp("/proc", file, 5) == 0) || (strncmp("/dev", file, 4) == 0) ) - return 0; - - if (use_regexp && regexec(&exclude_regexp, file, 0, NULL, 0) == 0) { - return 0; - } - - switch (flag) { - /* - * Regular file handling. - */ case FTW_F: - /* - * Is suid root check. - */ - if ((sb->st_mode & S_ISUID) && (sb->st_uid == 0)) - fprintf(suid_fd, "%s\n", file); - - /* - * Is suid group check. - */ - if (sb->st_mode & S_ISGID) - fprintf(sgid_fd, "%s\n", file); - - /* - * Their is no break statement here, it is normal. - * Directory handing. - */ + /* + * Is suid root check. + */ + if ((sb->st_mode & S_ISUID) && (sb->st_uid == 0)) + fprintf(suid_fd, "%s\n", file); + + /* + * Is suid group check. + */ + if (sb->st_mode & S_ISGID) + fprintf(sgid_fd, "%s\n", file); + + /* + * Their is no break statement here, it is normal. + * Directory handing. + */ case FTW_D: - /* - * Is world writable check. - */ - if ((sb->st_mode & 0002) && !(S_ISSOCK(sb->st_mode)) && !(S_ISFIFO(sb->st_mode))) - fprintf(writable_fd, "%s\n", file); - - /* - * Unowned user check. - */ - u_nss_data = getpwuid(sb->st_uid); - if (u_nss_data == NULL) - fprintf(unowned_user_fd, "%s\n", file); - - /* - * Unowned group check. - */ - g_nss_data = getgrgid(sb->st_gid); - if (g_nss_data == NULL) - fprintf(unowned_group_fd, "%s\n", file); - break; - } - return 0; + /* + * Is world writable check. + */ + if ((sb->st_mode & 0002) && !(S_ISSOCK(sb->st_mode)) && !(S_ISFIFO(sb->st_mode))) + fprintf(writable_fd, "%s\n", file); + + /* + * Unowned user check. + */ + u_nss_data = getpwuid(sb->st_uid); + if (u_nss_data == NULL) + fprintf(unowned_user_fd, "%s\n", file); + + /* + * Unowned group check. + */ + g_nss_data = getgrgid(sb->st_gid); + if (g_nss_data == NULL) + fprintf(unowned_group_fd, "%s\n", file); + break; + } + return 0; } /* This function opens all log files */ __inline__ static void init() { - static const char *mode = "w+"; - char *env; - - suid_fd = fopen(getenv("SUID_ROOT_TODAY"), mode); - if ( ! suid_fd ) { - perror("fopen (suid_root_today)"); - exit(1); - } - - sgid_fd = fopen(getenv("SGID_TODAY"), mode); - if ( ! sgid_fd ) { - perror("fopen (sgid_today)"); - exit(1); + static const char *mode = "w+"; + char *env; + + suid_fd = fopen(getenv("SUID_ROOT_TODAY"), mode); + if ( ! suid_fd ) { + perror("fopen (suid_root_today)"); + exit(1); + } + + sgid_fd = fopen(getenv("SGID_TODAY"), mode); + if ( ! sgid_fd ) { + perror("fopen (sgid_today)"); + exit(1); + } + + writable_fd = fopen(getenv("WRITABLE_TODAY"), mode); + if ( ! writable_fd ) { + perror("fopen (writable_today)"); + exit(1); + } + + unowned_user_fd = fopen(getenv("UNOWNED_USER_TODAY"), mode); + if ( ! unowned_user_fd ) { + perror("fopen (unowned_user_today)"); + exit(1); + } + + unowned_group_fd = fopen(getenv("UNOWNED_GROUP_TODAY"), mode); + if ( ! unowned_group_fd ) { + perror("fopen (unowned_group_today)"); + exit(1); + } + + env = getenv("EXCLUDE_REGEXP"); + if (env) { + if (regcomp(&exclude_regexp, env, 0) == 0) { + use_regexp = 1; + } else { + fprintf(stderr, "Unable to compile EXCLUDE_REGEXP '%s'\n", env); + exit(1); } - - writable_fd = fopen(getenv("WRITABLE_TODAY"), mode); - if ( ! writable_fd ) { - perror("fopen (writable_today)"); - exit(1); - } - - unowned_user_fd = fopen(getenv("UNOWNED_USER_TODAY"), mode); - if ( ! unowned_user_fd ) { - perror("fopen (unowned_user_today)"); - exit(1); - } - - unowned_group_fd = fopen(getenv("UNOWNED_GROUP_TODAY"), mode); - if ( ! unowned_group_fd ) { - perror("fopen (unowned_group_today)"); - exit(1); - } - - env = getenv("EXCLUDE_REGEXP"); - if (env) { - if (regcomp(&exclude_regexp, env, 0) == 0) { - use_regexp = 1; - } else { - fprintf(stderr, "Unable to compile EXCLUDE_REGEXP '%s'\n", env); - exit(1); - } - } + } } int main(int argc, char **argv) { - char *directory; - int res = 0, i; - int ctrl = 0; - - if ( argc < 2 ) { - fprintf(stderr, "Please give directory as argument.\n"); - fprintf(stderr, "%s /usr/sbin /sbin\n\n", argv[0]); + char *directory; + int res = 0, i; + int ctrl = 0; + + if ( argc < 2 ) { + fprintf(stderr, "Please give directory as argument.\n"); + fprintf(stderr, "%s /usr/sbin /sbin\n\n", argv[0]); + exit(1); + } + + /* open all log files */ + init(); + + for ( i = 1; i < argc; i++ ) { + if ( strcmp(argv[i], "/") != 0) { + /* + * We need to add a final '/' to the base directory name else the + * FTW_MOUNT option of nftw won't work. i.e. : /mnt/cdrom is on the / + * fs (it is the directory on which a CD is mounted) whereas + * /mnt/cdrom/ is the mounted directory. + * Hopefully, find has the same "bug" + */ + + ctrl = 1; + directory = ( char * ) malloc((strlen(argv[i]) + 2)); + if ( ! directory ) { + perror("malloc"); exit(1); + } + + strcpy(directory, argv[i]); + strcat(directory, "/"); + } else { + directory = argv[i]; } - /* open all log files */ - init(); - - for ( i = 1; i < argc; i++ ) { - if ( strcmp(argv[i], "/") != 0) { - /* - * We need to add a final '/' to the base directory name else the - * FTW_MOUNT option of nftw won't work. i.e. : /mnt/cdrom is on the / - * fs (it is the directory on which a CD is mounted) whereas - * /mnt/cdrom/ is the mounted directory. - * Hopefully, find has the same "bug" - */ - - ctrl = 1; - directory = ( char * ) malloc((strlen(argv[i]) + 2)); - if ( ! directory ) { - perror("malloc"); - exit(1); - } - - strcpy(directory, argv[i]); - strcat(directory, "/"); - } else { - directory = argv[i]; - } - - res = nftw(directory, traverse, 200, FTW_PHYS | FTW_MOUNT); - - if ( ctrl ) { - free(directory); - ctrl = 0; - } + res = nftw(directory, traverse, 200, FTW_PHYS | FTW_MOUNT); + + if ( ctrl ) { + free(directory); + ctrl = 0; } - - /* - * close all log files - */ - - fclose(suid_fd); - fclose(sgid_fd); - fclose(writable_fd); - fclose(unowned_user_fd); - fclose(unowned_group_fd); - - exit(res); + } + + /* + * close all log files + */ + + fclose(suid_fd); + fclose(sgid_fd); + fclose(writable_fd); + fclose(unowned_user_fd); + fclose(unowned_group_fd); + + exit(res); } |