implemented VERIFYPROC method
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Tue, 12 Apr 2005 21:54:48 +0000 (21:54 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Tue, 12 Apr 2005 21:54:48 +0000 (21:54 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2026 94cd875c-1c1d-0410-91d2-eb244daf1a30

util-vserver/src/vserver-info.c

index de79e6f..cbc8ba9 100644 (file)
@@ -52,7 +52,7 @@ typedef enum { tgNONE,tgCONTEXT, tgID, tgRUNNING,
               tgINITPID, tgINITPID_PID,
               tgXID, tgUTS, tgSYSINFO,
               tgFEATURE, tgCANONIFY,
-              tgVERIFYCAP, tgXIDTYPE,
+              tgVERIFYCAP, tgXIDTYPE, tgVERIFYPROC,
 }      VserverTag;
 
 static struct {
@@ -80,6 +80,7 @@ static struct {
   { "PXID",        tgPXID,        "returns the xid of the parent context" },
   { "CANONIFY",    tgCANONIFY,    "canonifies the vserver-name and removes dangerous characters" },
   { "VERIFYCAP",   tgVERIFYCAP,   "test if the kernel supports linux capabilities" },
+  { "VERIFYPROC",  tgVERIFYPROC,  "test if /proc can be read by contexts!=0" },
   { "XIDTYPE",     tgXIDTYPE,     "returns the type of the given XID" },
 };
 
@@ -159,6 +160,26 @@ utsText2Tag(char const *str)
 }
 
 static bool
+verifyProc()
+{
+  char const           *errptr;
+  
+  if (!switchToWatchXid(&errptr)) {
+    perror(errptr);
+    return false;
+  }
+
+  if (access("/proc/uptime", R_OK)==-1) {
+    if (errno!=ENOENT)
+      perror("access(\"/proc/uptime\")");
+    
+    return false;
+  }
+
+  return true;
+}
+
+static bool
 verifyCap()
 {
   struct __user_cap_header_struct header;
@@ -485,6 +506,7 @@ execQuery(char const *vserver, VserverTag tag, int argc, char *argv[])
     case tgSYSINFO     :  return printSysInfo(buf);           break;
     case tgFEATURE     :  return testFeature(argc,argv);      break;
     case tgVERIFYCAP   :  return verifyCap() ? 0 : 1;         break;
+    case tgVERIFYPROC  :  return verifyProc() ? 0 : 1;        break;
 
 
     default            : {