Commit 495c8007 authored by Andrew Vagin's avatar Andrew Vagin Committed by Pavel Emelyanov

zdtm: execite test cases from a test user

Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 42d861bb
...@@ -131,6 +131,21 @@ static/sigpending ...@@ -131,6 +131,21 @@ static/sigpending
static/sk-netlink static/sk-netlink
" "
TEST_SUID_LIST="
pid00
caps00
maps01
groups
sched_prio00
sched_policy00
sock_opts00
sock_opts01
cmdlinenv00
packet_sock
fanotify00
sk-netlink
"
CRTOOLS=$(readlink -f `dirname $0`/../crtools) CRTOOLS=$(readlink -f `dirname $0`/../crtools)
CRTOOLS_CPT=$CRTOOLS CRTOOLS_CPT=$CRTOOLS
TMP_TREE="" TMP_TREE=""
...@@ -216,6 +231,15 @@ start_test() ...@@ -216,6 +231,15 @@ start_test()
killall -9 $tname > /dev/null 2>&1 killall -9 $tname > /dev/null 2>&1
make -C $tdir $tname.cleanout make -C $tdir $tname.cleanout
unset ZDTM_UID
unset ZDTM_GID
echo $TEST_SUID_LIST | grep $tname || {
export ZDTM_UID=18943
export ZDTM_GID=58467
chown $ZDTM_UID:$ZDTM_GID $tdir
}
if [ -z "$PIDNS" ]; then if [ -z "$PIDNS" ]; then
make -C $tdir $tname.pid make -C $tdir $tname.pid
PID=`cat $test.pid` || return 1 PID=`cat $test.pid` || return 1
......
...@@ -72,6 +72,7 @@ static int prepare_mntns() ...@@ -72,6 +72,7 @@ static int prepare_mntns()
fprintf(stderr, "mknod(/dev/ptmx) failed: %m\n"); fprintf(stderr, "mknod(/dev/ptmx) failed: %m\n");
return -1; return -1;
} }
chmod("/dev/ptmx", 0666);
if (mkdir("/dev/pts", 0755) && errno != EEXIST) { if (mkdir("/dev/pts", 0755) && errno != EEXIST) {
fprintf(stderr, "mkdir(/dev/pts) failed: %m\n"); fprintf(stderr, "mkdir(/dev/pts) failed: %m\n");
return -1; return -1;
...@@ -88,6 +89,7 @@ static int prepare_mntns() ...@@ -88,6 +89,7 @@ static int prepare_mntns()
mkdir("/dev", 0777); mkdir("/dev", 0777);
mknod("/dev/null", 0777 | S_IFCHR, makedev(1, 3)); mknod("/dev/null", 0777 | S_IFCHR, makedev(1, 3));
chmod("/dev/null", 0777);
return 0; return 0;
} }
......
...@@ -126,6 +126,18 @@ void test_init(int argc, char **argv) ...@@ -126,6 +126,18 @@ void test_init(int argc, char **argv)
exit(1); exit(1);
} }
val = getenv("ZDTM_GID");
if (val && (setgid(atoi(val)) == -1)) {
fprintf(stderr, "Can't set gid: %m");
exit(1);
}
val = getenv("ZDTM_UID");
if (val && (setuid(atoi(val)) == -1)) {
fprintf(stderr, "Can't set gid: %m");
exit(1);
}
if (sigaction(SIGTERM, &sa, NULL)) { if (sigaction(SIGTERM, &sa, NULL)) {
fprintf(stderr, "Can't set SIGTERM handler: %m\n"); fprintf(stderr, "Can't set SIGTERM handler: %m\n");
exit(1); exit(1);
......
...@@ -248,7 +248,7 @@ cleanout: ...@@ -248,7 +248,7 @@ cleanout:
$(RM) -f -r *.pid *.out* *.test* *.state $(RM) -f -r *.pid *.out* *.test* *.state
%.cleanout: % %.cleanout: %
$(RM) -f -r $<.pid $<.out* $<.test* $<.*.test $<.state $(RM) -f -r $<.pid $<.out* *$<.test* $<.*.test $<.state
realclean: cleandep cleanout realclean: cleandep cleanout
......
...@@ -108,7 +108,7 @@ int main(int argc, char *argv[]) ...@@ -108,7 +108,7 @@ int main(int argc, char *argv[])
exit(1); exit(1);
} }
if (setresuid(-1, 1, -1)) { if (!getuid() && setresuid(-1, 1, -1)) {
fail("setresuid failed\n"); fail("setresuid failed\n");
exit(1); exit(1);
} }
......
...@@ -58,14 +58,21 @@ int main(int argc, char ** argv) ...@@ -58,14 +58,21 @@ int main(int argc, char ** argv)
mode = (fst.st_mode | S_IXOTH); mode = (fst.st_mode | S_IXOTH);
else else
mode = (fst.st_mode ^ S_IXOTH); mode = (fst.st_mode ^ S_IXOTH);
if (fchmod(fd, mode) < 0) { if (fchmod(fd, mode) < 0) {
err("can't chmod %s: %m\n", filename); err("can't chmod %s: %m\n", filename);
goto failed; goto failed;
} }
/* Change uid, gid */
if (fchown(fd, (uid = fst.st_uid + 1), (gid = fst.st_gid + 1)) < 0) { if (getuid()) {
err("can't chown %s: %m\n", filename); uid = getuid();
goto failed; gid = getgid();
} else {
/* Change uid, gid */
if (fchown(fd, (uid = fst.st_uid + 1), (gid = fst.st_gid + 1)) < 0) {
err("can't chown %s: %m\n", filename);
goto failed;
}
} }
if (lseek(fd, 0, SEEK_SET) != 0) { if (lseek(fd, 0, SEEK_SET) != 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment