]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/test/stress2/misc/revoke.sh
Merge commit 'bd136720030ebb0b31e6d5a2236b9d0ddac71b94'
[FreeBSD/FreeBSD.git] / tools / test / stress2 / misc / revoke.sh
1 #!/bin/sh
2
3 #
4 # Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
5 # All rights reserved.
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
10 # 1. Redistributions of source code must retain the above copyright
11 #    notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 #    notice, this list of conditions and the following disclaimer in the
14 #    documentation and/or other materials provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 # SUCH DAMAGE.
27 #
28
29 # Regression test. Causes panic on 6.1
30
31 . ../default.cfg
32
33 odir=`pwd`
34 dir=/tmp
35
36 cd $dir
37 sed '1,/^EOF/d' < $odir/$0 > $dir/revoke.c
38 mycc -o revoke -Wall revoke.c || exit 1
39 rm -f revoke.c
40
41 n=100   # Number of times to test
42 for i in `jot $n`; do
43    ./revoke /dev/ttyv9 > /dev/null 2>&1 &
44    ./revoke /dev/ttyva > /dev/null 2>&1 &
45    ./revoke /dev/ttyvb > /dev/null 2>&1 &
46    ./revoke /dev/ttyvc > /dev/null 2>&1 &
47    wait
48 done
49
50 rm -f revoke
51
52 exit
53 EOF
54 /* By Martin Blapp, <mb@imp.ch> <mbr@FreeBSD.org> */
55
56 #include <stdlib.h>
57 #include <stdio.h>
58 #include <unistd.h>
59 #include <fcntl.h>
60 #include <err.h>
61 #include <sys/ioctl.h>
62 #include <sys/wait.h>
63 #include <string.h>
64
65 /*#define TTY "/dev/ttyv9"*/    /* should be totally unused */
66 #define CTTY "/dev/tty"
67
68 int
69 main(int argc, char **argv)
70 {
71         int             ttyfd;
72         pid_t           pid;
73
74         if (argc != 2) {
75                 fprintf(stderr, "Usage: %s /dev/ttyv?\n", argv[0]);
76                 return 1;
77         }
78
79         /* Get rid of my ctty. */
80         printf("Parent starting: pid %d\n", getpid());
81         pid = fork();
82         if (pid < 0) {
83                 err(1, "fork");
84                 exit(1);
85         } else if (pid > 0) {
86                 int             status;
87                 /* parent */
88                 waitpid(pid, &status, 0);
89                 exit(0);
90         }
91         /* child */
92         printf("Child: pid %d\n", getpid());
93
94         if (setsid() < 0) {
95                 err(1, "setsid");
96                 exit(1);
97         }
98         ttyfd = open(argv[1], O_RDWR);
99         if (ttyfd < 0) {
100                 err(1, "open(%s)", argv[1]);
101                 exit(1);
102         }
103         if (ioctl(ttyfd, TIOCSCTTY) < 0) {
104                 err(1, "ioctl(TIOCSCTTY)");
105                 exit(1);
106         }
107         if (revoke(argv[1]) < 0) {
108                 err(1, "revoke(%s)", argv[1]);
109                 exit(1);
110         }
111         if (open(CTTY, O_RDWR) < 0) {
112                 err(1, "open(%s)", CTTY);
113                 exit(1);
114         }
115         return 0;
116 }