summaryrefslogtreecommitdiff
path: root/regress/sys/kern
diff options
context:
space:
mode:
authorSebastien Marie <semarie@cvs.openbsd.org>2015-10-09 11:38:06 +0000
committerSebastien Marie <semarie@cvs.openbsd.org>2015-10-09 11:38:06 +0000
commit3508c0e2807cbfe0907654a4fa6951cfa6bdad6c (patch)
tree15e725a37fee5e64d210cedfb28f9061323d0bc0 /regress/sys/kern
parent709e9d49ab936cd572cb314ecbcbde9186dd2256 (diff)
add "tty" regress for pledge
Diffstat (limited to 'regress/sys/kern')
-rw-r--r--regress/sys/kern/pledge/generic/Makefile6
-rw-r--r--regress/sys/kern/pledge/generic/main.c7
-rw-r--r--regress/sys/kern/pledge/generic/manager.c4
-rw-r--r--regress/sys/kern/pledge/generic/test_tty.c80
-rw-r--r--regress/sys/kern/pledge/generic/tests.out3
5 files changed, 93 insertions, 7 deletions
diff --git a/regress/sys/kern/pledge/generic/Makefile b/regress/sys/kern/pledge/generic/Makefile
index 28f2da0f1c7..9d4f7a4dca5 100644
--- a/regress/sys/kern/pledge/generic/Makefile
+++ b/regress/sys/kern/pledge/generic/Makefile
@@ -1,6 +1,6 @@
-# $OpenBSD: Makefile,v 1.1 2015/10/09 06:44:13 semarie Exp $
+# $OpenBSD: Makefile,v 1.2 2015/10/09 11:38:05 semarie Exp $
PROG= generic
-SRCS+= main.c manager.c
+SRCS+= main.c manager.c test_tty.c
NOMAN= yes
CFLAGS+= -Wall -Werror
@@ -15,7 +15,7 @@ test_systrace: ${PROG}
systrace -A ./${PROG} | diff -I OpenBSD -u ${.CURDIR}/tests.out -
regenerate: ${PROG}
- echo '# $$OpenBSD: Makefile,v 1.1 2015/10/09 06:44:13 semarie Exp $$' > ${.CURDIR}/tests.out
+ echo '# $$OpenBSD: Makefile,v 1.2 2015/10/09 11:38:05 semarie Exp $$' > ${.CURDIR}/tests.out
./${PROG} | tee -a ${.CURDIR}/tests.out
.include <bsd.regress.mk>
diff --git a/regress/sys/kern/pledge/generic/main.c b/regress/sys/kern/pledge/generic/main.c
index 23fbbcb9edd..d9285d8c702 100644
--- a/regress/sys/kern/pledge/generic/main.c
+++ b/regress/sys/kern/pledge/generic/main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: main.c,v 1.1 2015/10/09 06:44:13 semarie Exp $ */
+/* $OpenBSD: main.c,v 1.2 2015/10/09 11:38:05 semarie Exp $ */
/*
* Copyright (c) 2015 Sebastien Marie <semarie@openbsd.org>
*
@@ -37,6 +37,8 @@
#include "manager.h"
+void test_request_tty(void);
+
static void
test_nop()
{
@@ -334,5 +336,8 @@ main(int argc, char *argv[])
start_test1(&ret, "rpath malloc prot_exec", "/dev/zero", test_mmap);
start_test1(&ret, "rpath malloc", "/dev/zero", test_mmap);
+ /* tty */
+ start_test(&ret, NULL, NULL, test_request_tty);
+
return (ret);
}
diff --git a/regress/sys/kern/pledge/generic/manager.c b/regress/sys/kern/pledge/generic/manager.c
index 800316aed68..1f5ead155e4 100644
--- a/regress/sys/kern/pledge/generic/manager.c
+++ b/regress/sys/kern/pledge/generic/manager.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: manager.c,v 1.1 2015/10/09 06:44:13 semarie Exp $ */
+/* $OpenBSD: manager.c,v 1.2 2015/10/09 11:38:05 semarie Exp $ */
/*
* Copyright (c) 2015 Sebastien Marie <semarie@openbsd.org>
*
@@ -186,7 +186,7 @@ _start_test(int *ret, const char *test_name, const char *request,
} else
printf("NULL)");
} else
- printf("not-called");
+ printf("skip");
/* unlink previous coredump (if exists) */
if (clear_coredump(ret, test_name) == -1)
diff --git a/regress/sys/kern/pledge/generic/test_tty.c b/regress/sys/kern/pledge/generic/test_tty.c
new file mode 100644
index 00000000000..24561497921
--- /dev/null
+++ b/regress/sys/kern/pledge/generic/test_tty.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2015 Sebastien Marie <semarie@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/ioctl.h>
+#include <sys/termios.h>
+#include <sys/ttycom.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+
+void
+test_request_tty()
+{
+ int fd = STDERR_FILENO;
+ struct termios ts; /* sys/termios.h */
+ struct winsize ws; /* sys/ttycom.h */
+
+ /* TODO: get a tty */
+
+ /* tests that need tty+proc (malloc for self) */
+ if (pledge("tty proc malloc", NULL) == -1)
+ _exit(errno);
+
+ /* TIOCSPGRP (tty+proc) */
+ if ((tcsetpgrp(fd, 1) == -1) && (errno != ENOTTY))
+ _exit(errno);
+ errno = 0; /* discard error */
+
+ /* tests that only need tty */
+ if (pledge("tty", NULL) == -1)
+ _exit(errno);
+
+
+ /* TIOCGETA */
+ if (ioctl(fd, TIOCGETA, &ts) == -1)
+ _exit(errno);
+
+ /* TIOCGWINSZ */
+ if (ioctl(fd, TIOCGWINSZ, &ws) == -1)
+ _exit(errno);
+
+ /* TIOCSBRK */
+ if ((ioctl(fd, TIOCSBRK, NULL) == -1) && (errno != ENOTTY))
+ _exit(errno);
+ errno = 0; /* discard error */
+
+ /* TIOCCDTR */
+ if ((ioctl(fd, TIOCCDTR, NULL) == -1) && (errno != ENOTTY))
+ _exit(errno);
+ errno = 0; /* discard error */
+
+ /* TIOCSETA */
+ if (tcsetattr(fd, TCSANOW, &ts) == -1)
+ _exit(errno);
+
+ /* TIOCSETAW */
+ if (tcsetattr(fd, TCSADRAIN, &ts) == -1)
+ _exit(errno);
+
+ /* TIOCSETAF */
+ if (tcsetattr(fd, TCSAFLUSH, &ts) == -1)
+ _exit(errno);
+}
diff --git a/regress/sys/kern/pledge/generic/tests.out b/regress/sys/kern/pledge/generic/tests.out
index 5fc8fd7e192..f4048d8edb5 100644
--- a/regress/sys/kern/pledge/generic/tests.out
+++ b/regress/sys/kern/pledge/generic/tests.out
@@ -1,4 +1,4 @@
-# $OpenBSD: tests.out,v 1.1 2015/10/09 06:44:13 semarie Exp $
+# $OpenBSD: tests.out,v 1.2 2015/10/09 11:38:05 semarie Exp $
test(test_nop): pledge=("",NULL) status=0 exit=0
test(test_inet): pledge=("",NULL) status=9 signal=9 pledged_syscall=97
test(test_inet): pledge=("abort",NULL) status=134 signal=6 coredump=present pledged_syscall=97
@@ -102,3 +102,4 @@ test(test_stat): pledge=("stdio rpath",{"/usr/share/man",NULL})
status=0 exit=0
test(test_mmap): pledge=("rpath malloc prot_exec",{"/dev/zero",NULL}) status=0 exit=0
test(test_mmap): pledge=("rpath malloc",{"/dev/zero",NULL}) status=9 signal=9 pledged_syscall=197
+test(test_request_tty): pledge=skip status=0 exit=0