]> granicus.if.org Git - procps-ng/commitdiff
SE Linux alias translation code (broken)
authoralbert <>
Sun, 30 Oct 2005 02:45:45 +0000 (02:45 +0000)
committeralbert <>
Sun, 30 Oct 2005 02:45:45 +0000 (02:45 +0000)
ps/module.mk
ps/output.c

index 258fef677a770cac8a77132a51b58a91c34dc9dc..b4b07c50b2e161690c793765851a2bba2ce9819a 100755 (executable)
@@ -20,7 +20,7 @@ PS_X := COPYING HACKING TRANSLATION common.h module.mk it p ps.1 regression
 TARFILES += $(PSSRC) $(addprefix ps/,$(PS_X))
 
 ps/ps: $(PSOBJ) $(LIBPROC)
-       $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) -o $@ $^
+       $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) -o $@ $^ -ldl
 
 # This just adds the stacktrace code
 ps/debug: $(PSOBJ) stacktrace.o $(LIBPROC)
index 00d66d8304d8038bc98f4b6a47f6b6df785528cd..a885a3dd71f926117c6e442f25df6acfe5e6b99b 100644 (file)
@@ -53,6 +53,7 @@
 #include <sys/mman.h>
 #include <time.h>
 #include <unistd.h>
+#include <dlfcn.h>
 
 #include "../proc/readproc.h"
 #include "../proc/sysinfo.h"
@@ -1091,8 +1092,8 @@ static int pr_sgi_p(char *restrict const outbuf, const proc_t *restrict const pp
 
 
 /****************** FLASK & seLinux security stuff **********************/
-
 // move the bulk of this to libproc sometime
+
 static int pr_context(char *restrict const outbuf, const proc_t *restrict const pp){
   char filename[48];
   size_t len;
@@ -1122,6 +1123,40 @@ fail:
 }
 
 
+// move the bulk of this to libproc sometime
+static int pr_context(char *restrict const outbuf, const proc_t *restrict const pp){
+  static int (*ps_getpidcon)(pid_t pid, char **context) = 0;
+  static int tried_load = 0;
+  size_t len;
+  char *context;
+
+  if(!ps_getpidcon && !tried_load){
+    void *handle = dlopen("libselinux.so.1", RTLD_NOW);
+    if(handle){
+      dlerror();
+      ps_getpidcon = dlsym(handle, "getpidcon");
+      if(dlerror())
+        ps_getpidcon = 0;
+    }
+    tried_load++;
+  }
+  if(ps_getpidcon && !ps_getpidcon(pp->tgid, &context)){
+    size_t max_len = OUTBUF_SIZE-1;
+    len = strlen(context);
+    if(len > max_len) len = max_len;
+    memcpy(outbuf, context, len);
+    outbuf[len] = '\0';
+    free(context);
+  }else{
+    outbuf[0] = '-';
+    outbuf[1] = '\0';
+    len = 1;
+  }
+  return len;
+}
+
+
+
 ////////////////////////////// Test code /////////////////////////////////
 
 // like "args"