X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib_internal%2Fjailintotempdir.c;h=d1ad9a8bf8e91d8f1c1c1f8be365e737379af505;hb=37705d50d8885d4ec983fc0b373704ab42d95eaf;hp=9f95434f55e3fb157b65404341ad0a26fb61e2b9;hpb=2b8965c8d2d6a46bb3271880340d679f6e0cb75d;p=util-vserver.git diff --git a/util-vserver/lib_internal/jailintotempdir.c b/util-vserver/lib_internal/jailintotempdir.c index 9f95434..d1ad9a8 100644 --- a/util-vserver/lib_internal/jailintotempdir.c +++ b/util-vserver/lib_internal/jailintotempdir.c @@ -27,22 +27,25 @@ #include 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; }