1#	$OpenBSD: Makefile,v 1.2 2018/04/11 16:47:17 bluhm Exp $
2
3# Copyright (c) 2018 Alexander Bluhm <bluhm@openbsd.org>
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17# Check that a file descriptor's plegde flag is correctly propagated.
18# The test covers the system calls dup, dup2, dup3, open /dev/fd, and
19# file descriptor passing.  The fstat(1) output is analysed.
20
21PROGS =		dup dup2 dup3 dev pass
22WARNINGS =	yes
23CLEANFILES =	*.fstat
24
25.if make (regress) || make (all)
26.BEGIN:
27	rm -f -- *.fstat
28.endif
29
30.for p in ${PROGS}
31
32SRCS_$p =			main.c $p.c
33REGRESS_TARGETS +=	run-regress-$p
34
35$p.fstat: $p
36	./$p >$@.tmp
37	mv $@.tmp $@
38	# file descriptor 3 has been opened before pledge
39	grep ' 3 /.* r ' $@
40	# file descriptor 4 has been opened after pledge
41	grep ' 4 /.* rp ' $@
42
43.endfor
44
45run-regress-dup: dup.fstat
46	# file descriptor 5 has been dup(2)ed from pre-pledge
47	grep ' 5 /.* r ' dup.fstat
48	# file descriptor 6 has been dup(2)ed from post-pledge
49	grep ' 6 /.* rp ' dup.fstat
50
51run-regress-dup2: dup2.fstat
52	# file descriptor 5 has been dup2(2)ed from pre-pledge
53	grep ' 5 /.* r ' dup2.fstat
54	# file descriptor 6 has been dup2(2)ed from post-pledge
55	grep ' 6 /.* rp ' dup2.fstat
56	# dup2(2) closes pre-pledge and overwrites with post-pledge
57	grep ' 7 /.* rp ' dup2.fstat
58	# dup2(2) closes post-pledge and overwrites with pre-pledge
59	grep ' 8 /.* r ' dup2.fstat
60	# dup2(2) pre-pledge onto itself
61	grep ' 9 /.* r ' dup2.fstat
62	# dup2(2) post-pledge onto itself
63	grep ' 10 /.* rp ' dup2.fstat
64
65run-regress-dup3: dup3.fstat
66	# file descriptor 5 has been dup3(2)ed from pre-pledge
67	grep ' 5 /.* re ' dup3.fstat
68	# file descriptor 6 has been dup3(2)ed from post-pledge
69	grep ' 6 /.* rep ' dup3.fstat
70	# dup3(2) closes pre-pledge and overwrites with post-pledge
71	grep ' 7 /.* rep ' dup3.fstat
72	# dup3(2) closes post-pledge and overwrites with pre-pledge
73	grep ' 8 /.* re ' dup3.fstat
74	# dup3(2) pre-pledge onto itself fails
75	grep ' 9 /.* r ' dup3.fstat
76	# dup3(2) post-pledge onto itself fails
77	grep ' 10 /.* rp ' dup3.fstat
78
79run-regress-dev: dev.fstat
80	# file descriptor 5 has been open(2)ed from pre-pledge /dev/fd/3
81	grep ' 5 /.* r ' dev.fstat
82	# file descriptor 6 has been open(2)ed from post-pledge /dev/fd/4
83	grep ' 6 /.* rp ' dev.fstat
84
85run-regress-pass: pass.fstat
86	# file descriptor 7 has been passed from pre-pledge
87	grep ' 7 /.* r ' pass.fstat
88	# file descriptor 8 has been passed from post-pledge
89	grep ' 8 /.* rp ' pass.fstat
90
91.include <bsd.regress.mk>
92