diff --git a/test/zdtm/static/pty01.c b/test/zdtm/static/pty01.c index ab1f92da6..fdf10b988 100644 --- a/test/zdtm/static/pty01.c +++ b/test/zdtm/static/pty01.c @@ -1,6 +1,7 @@ #define _XOPEN_SOURCE 500 +#define _DEFAULT_SOURCE + #include -#include "zdtmtst.h" #include #include #include @@ -9,6 +10,8 @@ #include #include +#include "zdtmtst.h" + const char *test_doc = "Check two pts on ptmx"; const char *test_author = "Cyrill Gorcunov "; @@ -19,6 +22,10 @@ int main(int argc, char *argv[]) char buf[sizeof(teststr)]; int master, slave1, slave2, ret; char *slavename; + struct stat st; + + uid_t new_uid = 33333; + gid_t new_gid = 44444; test_init(argc, argv); @@ -44,11 +51,28 @@ int main(int argc, char *argv[]) return 1; } + if (fchown(slave1, new_uid, new_gid)) { + pr_perror("Can't set uid/gid on %s", slavename); + return 1; + } + test_daemon(); test_waitsig(); signal(SIGHUP, SIG_IGN); + if (fstat(slave1, &st)) { + pr_perror("Can't fetch stat on %s", slavename); + return 1; + } + + if (st.st_uid != new_uid || st.st_gid != new_gid) { + fail("UID/GID mismatch (got %d/%d but %d/%d expected)", + (int)st.st_uid, (int)st.st_gid, + (int)new_uid, (int)new_gid); + return 1; + } + ret = write(master, teststr, sizeof(teststr) - 1); if (ret != sizeof(teststr) - 1) { pr_perror("write(master) failed"); diff --git a/test/zdtm/static/pty01.desc b/test/zdtm/static/pty01.desc new file mode 100644 index 000000000..2eac7e654 --- /dev/null +++ b/test/zdtm/static/pty01.desc @@ -0,0 +1 @@ +{'flags': 'suid'}