add "tty" regress for pledge
authorsemarie <semarie@openbsd.org>
Fri, 9 Oct 2015 11:38:05 +0000 (11:38 +0000)
committersemarie <semarie@openbsd.org>
Fri, 9 Oct 2015 11:38:05 +0000 (11:38 +0000)
regress/sys/kern/pledge/generic/Makefile
regress/sys/kern/pledge/generic/main.c
regress/sys/kern/pledge/generic/manager.c
regress/sys/kern/pledge/generic/test_tty.c [new file with mode: 0644]
regress/sys/kern/pledge/generic/tests.out

index 28f2da0..9d4f7a4 100644 (file)
@@ -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>
index 23fbbcb..d9285d8 100644 (file)
@@ -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);
 }
index 800316a..1f5ead1 100644 (file)
@@ -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 (file)
index 0000000..2456149
--- /dev/null
@@ -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);
+}
index 5fc8fd7..f4048d8 100644 (file)
@@ -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