-/* @(#) $Id: check_rc_readproc.c,v 1.8 2009/06/24 18:53:07 dcid Exp $ */
+/* @(#) $Id: ./src/rootcheck/check_rc_readproc.c, 2011/09/08 dcid Exp $
+ */
/* Copyright (C) 2009 Trend Micro Inc.
* All right reserved.
*
* This program is a free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
- * License (version 3) as published by the FSF - Free Software
+ * License (version 2) as published by the FSF - Free Software
* Foundation
*/
-
+
#ifndef WIN32
#include "shared.h"
#include "rootcheck.h"
int read_proc_file(char *file_name, char *pid, int position)
{
struct stat statbuf;
-
+
if(lstat(file_name, &statbuf) < 0)
{
return(-1);
}
-
+
/* If directory, read the directory */
else if(S_ISDIR(statbuf.st_mode))
{
return(read_proc_dir(file_name, pid, position));
}
-
+
return(0);
}
int read_proc_dir(char *dir_name, char *pid, int position)
{
DIR *dp;
-
+
struct dirent *entry;
-
+
if((dir_name == NULL)||(strlen(dir_name) > PATH_MAX))
{
merror("%s: Invalid directory given",ARGV0);
return(-1);
}
-
+
/* Opening the directory given */
dp = opendir(dir_name);
if(!dp)
/* Just ignore . and .. */
if((strcmp(entry->d_name,".") == 0) ||
- (strcmp(entry->d_name,"..") == 0))
+ (strcmp(entry->d_name,"..") == 0))
continue;
if(position == PROC)
if(*tmp_str != '\0')
continue;
-
-
+
+
snprintf(f_name, PATH_MAX +1, "%s/%s",dir_name, entry->d_name);
read_proc_file(f_name, pid, position+1);
}
closedir(dp);
-
+
return(0);
}
char char_pid[32];
proc_pid_found = 0;
-
- /* NL threads */
+
+ /* NL threads */
snprintf(char_pid, 31, "/proc/.%d", pid);
if(is_file(char_pid))
return(1);
-
-
+
+
snprintf(char_pid, 31, "%d", pid);
-
+
read_proc_dir("/proc", char_pid, PROC);
-
+
return(proc_pid_found);
}