return indication about place of error
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Mon, 15 Mar 2004 21:37:06 +0000 (21:37 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Mon, 15 Mar 2004 21:37:06 +0000 (21:37 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1250 94cd875c-1c1d-0410-91d2-eb244daf1a30

util-vserver/lib_internal/jail.h
util-vserver/lib_internal/jailintotempdir.c

index eb0c9ac..4851d40 100644 (file)
@@ -21,6 +21,6 @@
 
 #include <stdbool.h>
 
-bool   jailIntoTempDir();
+bool   jailIntoTempDir(char const **err_pos);
 
 #endif //  H_UTIL_VSERVER_LIB_INTERNAL_JAIL_H
index 9f95434..d1ad9a8 100644 (file)
 #include <unistd.h>
 
 bool
-jailIntoTempDir()
+jailIntoTempDir(char const **err_pos)
 {
+  gid_t const  id    = 1;
   char         buf[] = "/tmp/jaildir.XXXXXX";
-  char const * d   = mkdtemp(buf);
-  gid_t                id = 1;
+  char const * d     = mkdtemp(buf);
+  char const * err   = "mkdtemp()";
 
   if (d==0 ||
-      chdir(d)==-1 ||
-      rmdir(d)==-1 ||
-      chroot(".")==-1 ||
-      setgroups(1, &id)==-1 ||
-      setgid(id)==-1 ||
-      setuid(id)==-1 ||
-      getgid()!=id ||
-      getuid()!=id)
+      (err="chdir()",    chdir(d)==-1) ||
+      (err="rmdir()",    rmdir(d)==-1) ||
+      (err="chroot()",   chroot(".")==-1) ||
+      (err="setgroups()",setgroups(1, &id)==-1) ||
+      (err="setgid()",   setgid(id)==-1) ||
+      (err="setuid()",   setuid(id)==-1) ||
+      (err="getgid()",   getgid()!=id) ||
+      (err="getuid()",   getuid()!=id)) {
+    if (err_pos!=0) *err_pos = err;
     return false;
+  }
 
   return true;
 }