xref: /openbsd-src/regress/sys/ffs/tests/chflags/00.t (revision e107a139f6eecb170bd096a2fcd33276905a80e9)
1#!/bin/sh
2# $FreeBSD: src/tools/regression/fstest/tests/chflags/00.t,v 1.1 2007/01/17 01:42:08 pjd Exp $
3
4desc="chflags changes flags"
5
6n0=`namegen`
7n1=`namegen`
8n2=`namegen`
9
10expect 0 mkdir ${n2} 0755
11cdir=`pwd`
12cd ${n2}
13
14expect 0 create ${n0} 0644
15expect none stat ${n0} flags
16expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
17expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags
18expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE
19expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n0} flags
20expect 0 chflags ${n0} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
21expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags
22expect 0 chflags ${n0} none
23expect none stat ${n0} flags
24expect 0 unlink ${n0}
25
26expect 0 mkdir ${n0} 0644
27expect none stat ${n0} flags
28expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
29expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags
30expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE
31expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n0} flags
32expect 0 chflags ${n0} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
33expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags
34expect 0 chflags ${n0} none
35expect none stat ${n0} flags
36expect 0 rmdir ${n0}
37
38expect 0 mkfifo ${n0} 0644
39expect none stat ${n0} flags
40expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
41expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags
42expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE
43expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n0} flags
44expect 0 chflags ${n0} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
45expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags
46expect 0 chflags ${n0} none
47expect none stat ${n0} flags
48expect 0 unlink ${n0}
49
50expect 0 create ${n0} 0644
51expect 0 symlink ${n0} ${n1}
52expect none stat ${n1} flags
53expect none lstat ${n1} flags
54expect 0 chflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
55expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n1} flags
56expect none lstat ${n1} flags
57expect 0 chflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE
58expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n1} flags
59expect none lstat ${n1} flags
60expect 0 chflags ${n1} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
61expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n1} flags
62expect none lstat ${n1} flags
63expect 0 chflags ${n1} none
64expect none stat ${n1} flags
65expect none lstat ${n1} flags
66expect 0 unlink ${n1}
67expect 0 unlink ${n0}
68
69expect 0 create ${n0} 0644
70expect 0 symlink ${n0} ${n1}
71expect none stat ${n1} flags
72expect none lstat ${n1} flags
73expect 0 lchflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
74expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND lstat ${n1} flags
75expect none stat ${n1} flags
76expect 0 lchflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE
77expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE lstat ${n1} flags
78expect none stat ${n1} flags
79expect 0 lchflags ${n1} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND
80expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND lstat ${n1} flags
81expect none stat ${n1} flags
82expect 0 lchflags ${n1} none
83expect none lstat ${n1} flags
84expect none stat ${n1} flags
85expect 0 unlink ${n1}
86expect 0 unlink ${n0}
87
88# successful chflags(2) updates ctime.
89expect 0 create ${n0} 0644
90for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do
91	ctime1=`${FSTEST} stat ${n0} ctime`
92	sleep 1
93	expect 0 chflags ${n0} ${flag}
94	ctime2=`${FSTEST} stat ${n0} ctime`
95	test_check $ctime1 -lt $ctime2
96done
97expect 0 unlink ${n0}
98
99expect 0 mkdir ${n0} 0755
100for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do
101	ctime1=`${FSTEST} stat ${n0} ctime`
102	sleep 1
103	expect 0 chflags ${n0} ${flag}
104	ctime2=`${FSTEST} stat ${n0} ctime`
105	test_check $ctime1 -lt $ctime2
106done
107expect 0 rmdir ${n0}
108
109expect 0 mkfifo ${n0} 0644
110for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do
111	ctime1=`${FSTEST} stat ${n0} ctime`
112	sleep 1
113	expect 0 chflags ${n0} ${flag}
114	ctime2=`${FSTEST} stat ${n0} ctime`
115	test_check $ctime1 -lt $ctime2
116done
117expect 0 unlink ${n0}
118
119expect 0 symlink ${n1} ${n0}
120for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do
121	ctime1=`${FSTEST} lstat ${n0} ctime`
122	sleep 1
123	expect 0 lchflags ${n0} ${flag}
124	ctime2=`${FSTEST} lstat ${n0} ctime`
125	test_check $ctime1 -lt $ctime2
126done
127expect 0 unlink ${n0}
128
129# unsuccessful chflags(2) does not update ctime.
130expect 0 create ${n0} 0644
131for flag in UF_IMMUTABLE SF_IMMUTABLE none; do
132	ctime1=`${FSTEST} stat ${n0} ctime`
133	sleep 1
134	expect EPERM -u 65534 chflags ${n0} ${flag}
135	ctime2=`${FSTEST} stat ${n0} ctime`
136	test_check $ctime1 -eq $ctime2
137done
138expect 0 unlink ${n0}
139
140expect 0 mkdir ${n0} 0755
141for flag in UF_IMMUTABLE SF_IMMUTABLE none; do
142	ctime1=`${FSTEST} stat ${n0} ctime`
143	sleep 1
144	expect EPERM -u 65534 chflags ${n0} ${flag}
145	ctime2=`${FSTEST} stat ${n0} ctime`
146	test_check $ctime1 -eq $ctime2
147done
148expect 0 rmdir ${n0}
149
150expect 0 mkfifo ${n0} 0644
151for flag in UF_IMMUTABLE SF_IMMUTABLE none; do
152	ctime1=`${FSTEST} stat ${n0} ctime`
153	sleep 1
154	expect EPERM -u 65534 chflags ${n0} ${flag}
155	ctime2=`${FSTEST} stat ${n0} ctime`
156	test_check $ctime1 -eq $ctime2
157done
158expect 0 unlink ${n0}
159
160expect 0 symlink ${n1} ${n0}
161for flag in UF_IMMUTABLE SF_IMMUTABLE none; do
162	ctime1=`${FSTEST} lstat ${n0} ctime`
163	sleep 1
164	expect EPERM -u 65534 lchflags ${n0} ${flag}
165	ctime2=`${FSTEST} lstat ${n0} ctime`
166	test_check $ctime1 -eq $ctime2
167done
168expect 0 unlink ${n0}
169
170cd ${cdir}
171expect 0 rmdir ${n2}
172