Patch from vodz:
[oweals/busybox.git] / libbb / procps.c
index 2d2a9665f613088e7bbceb194181d462c654af12..44103fae8992d9b877967e3c577914c2b07d8708 100644 (file)
@@ -8,7 +8,6 @@
  *
  */
 
-#if ! defined CONFIG_FEATURE_USE_DEVPS_PATCH
 #include <dirent.h>
 #include <string.h>
 #include <stdlib.h>
 
 #include "libbb.h"
 
-extern procps_status_t * procps_scan(int save_user_arg0)
+extern procps_status_t * procps_scan(int save_user_arg0
+#ifdef CONFIG_SELINUX
+       , int use_selinux , security_id_t *sid
+#endif
+       )
 {
        static DIR *dir;
        struct dirent *entry;
@@ -35,7 +38,7 @@ extern procps_status_t * procps_scan(int save_user_arg0)
        if (!dir) {
                dir = opendir("/proc");
                if(!dir)
-                       error_msg_and_die("Can't open /proc");
+                       bb_error_msg_and_die("Can't open /proc");
        }
        for(;;) {
                if((entry = readdir(dir)) == NULL) {
@@ -54,6 +57,14 @@ extern procps_status_t * procps_scan(int save_user_arg0)
                sprintf(status, "/proc/%d/stat", pid);
                if((fp = fopen(status, "r")) == NULL)
                        continue;
+#ifdef CONFIG_SELINUX
+               if(use_selinux)
+               {
+                       if(fstat_secure(fileno(fp), &sb, sid))
+                               continue;
+               }
+               else
+#endif
                if(fstat(fileno(fp), &sb))
                        continue;
                my_getpwuid(curstatus.user, sb.st_uid);
@@ -106,8 +117,8 @@ extern procps_status_t * procps_scan(int save_user_arg0)
 
                curstatus.rss <<= (PAGE_SHIFT - 10);     /* 2**10 = 1kb */
 
-               sprintf(status, "/proc/%d/cmdline", pid);
                if(save_user_arg0) {
+                       sprintf(status, "/proc/%d/cmdline", pid);
                        if((fp = fopen(status, "r")) == NULL)
                                continue;
                        if((n=fread(buf, 1, sizeof(buf)-1, fp)) > 0) {
@@ -131,8 +142,6 @@ extern procps_status_t * procps_scan(int save_user_arg0)
        }
 }
 
-#endif /* CONFIG_FEATURE_USE_DEVPS_PATCH. Else this file is empty */
-
 /* END CODE */
 /*
 Local Variables: