Commit 762f493b authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

zdtm: check a non-controlling terminal

Here are two things:
* A test process is a session leader
* It has a terminal, which are not conrolling for anyone.

For bug #2409
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent b1f1154c
......@@ -66,6 +66,7 @@ TST_NOFILE = \
pty03 \
pty04 \
tty00 \
tty02 \
mountpoints \
netns \
session01 \
......
#define _XOPEN_SOURCE
#include <stdlib.h>
#include "zdtmtst.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <termios.h>
#include <sys/ioctl.h>
const char *test_doc = "Check a non-controling terminal";
const char *test_author = "Andrey Vagin <avagin@openvz.org>";
static void sighup_handler(int signo)
{
test_msg("SIGHUP is here\n");
}
int main(int argc, char ** argv)
{
int fdm, fds;
char *slavename;
pid_t sid;
test_init(argc, argv);
signal(SIGHUP, sighup_handler);
setsid();
fdm = open("/dev/ptmx", O_RDWR);
if (fdm == -1) {
err("Can't open a master pseudoterminal");
return 1;
}
grantpt(fdm);
unlockpt(fdm);
slavename = ptsname(fdm);
/* set up a controlling terminal */
fds = open(slavename, O_RDWR);
if (fds == -1) {
err("Can't open a slave pseudoterminal %s", slavename);
return 1;
}
if (ioctl(fds, TIOCNOTTY)) {
err("Unable to detach a terminal");
return 1;
}
test_daemon();
test_waitsig();
if (ioctl(fds, TIOCGSID, &sid) != -1 || errno != ENOTTY) {
fail("The tty is a controlling for someone");
return 1;
}
pass();
return 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