]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - tools/regression/fstest/tests/chflags/00.t
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / tools / regression / fstest / tests / chflags / 00.t
1 #!/bin/sh
2 # $FreeBSD$
3
4 desc="chflags changes flags"
5
6 dir=`dirname $0`
7 . ${dir}/../misc.sh
8
9 require chflags
10
11 case "${os}:${fs}" in
12 FreeBSD:UFS)
13         allflags="UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_NOUNLINK,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
14         userflags="UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_NOUNLINK,UF_OPAQUE"
15         systemflags="SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
16
17         echo "1..247"
18         ;;
19 FreeBSD:ZFS)
20         allflags="UF_NODUMP,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
21         userflags="UF_NODUMP"
22         systemflags="SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
23
24         echo "1..167"
25         ;;
26 *)
27         quick_exit
28         ;;
29 esac
30
31 n0=`namegen`
32 n1=`namegen`
33 n2=`namegen`
34
35 expect 0 mkdir ${n2} 0755
36 cdir=`pwd`
37 cd ${n2}
38
39 expect 0 create ${n0} 0644
40 expect none stat ${n0} flags
41 expect 0 chflags ${n0} ${allflags}
42 expect ${allflags} stat ${n0} flags
43 expect 0 chflags ${n0} ${userflags}
44 expect ${userflags} stat ${n0} flags
45 expect 0 chflags ${n0} ${systemflags}
46 expect ${systemflags} stat ${n0} flags
47 expect 0 chflags ${n0} none
48 expect none stat ${n0} flags
49 expect 0 unlink ${n0}
50
51 expect 0 mkdir ${n0} 0644
52 expect none stat ${n0} flags
53 expect 0 chflags ${n0} ${allflags}
54 expect ${allflags} stat ${n0} flags
55 expect 0 chflags ${n0} ${userflags}
56 expect ${userflags} stat ${n0} flags
57 expect 0 chflags ${n0} ${systemflags}
58 expect ${systemflags} stat ${n0} flags
59 expect 0 chflags ${n0} none
60 expect none stat ${n0} flags
61 expect 0 rmdir ${n0}
62
63 expect 0 mkfifo ${n0} 0644
64 expect none stat ${n0} flags
65 expect 0 chflags ${n0} ${allflags}
66 expect ${allflags} stat ${n0} flags
67 expect 0 chflags ${n0} ${userflags}
68 expect ${userflags} stat ${n0} flags
69 expect 0 chflags ${n0} ${systemflags}
70 expect ${systemflags} stat ${n0} flags
71 expect 0 chflags ${n0} none
72 expect none stat ${n0} flags
73 expect 0 unlink ${n0}
74
75 expect 0 create ${n0} 0644
76 expect 0 symlink ${n0} ${n1}
77 expect none stat ${n1} flags
78 expect none lstat ${n1} flags
79 expect 0 chflags ${n1} ${allflags}
80 expect ${allflags} stat ${n1} flags
81 expect none lstat ${n1} flags
82 expect 0 chflags ${n1} ${userflags}
83 expect ${userflags} stat ${n1} flags
84 expect none lstat ${n1} flags
85 expect 0 chflags ${n1} ${systemflags}
86 expect ${systemflags} stat ${n1} flags
87 expect none lstat ${n1} flags
88 expect 0 chflags ${n1} none
89 expect none stat ${n1} flags
90 expect none lstat ${n1} flags
91 expect 0 unlink ${n1}
92 expect 0 unlink ${n0}
93
94 expect 0 create ${n0} 0644
95 expect 0 symlink ${n0} ${n1}
96 expect none stat ${n1} flags
97 expect none lstat ${n1} flags
98 expect 0 lchflags ${n1} ${allflags}
99 expect ${allflags} lstat ${n1} flags
100 expect none stat ${n1} flags
101 expect 0 lchflags ${n1} ${userflags}
102 expect ${userflags} lstat ${n1} flags
103 expect none stat ${n1} flags
104 expect 0 lchflags ${n1} ${systemflags}
105 expect ${systemflags} lstat ${n1} flags
106 expect none stat ${n1} flags
107 expect 0 lchflags ${n1} none
108 expect none lstat ${n1} flags
109 expect none stat ${n1} flags
110 expect 0 unlink ${n1}
111 expect 0 unlink ${n0}
112
113 # successful chflags(2) updates ctime.
114 expect 0 create ${n0} 0644
115 for flag in `echo ${allflags},none | tr ',' ' '`; do
116         ctime1=`${fstest} stat ${n0} ctime`
117         sleep 1
118         expect 0 chflags ${n0} ${flag}
119         ctime2=`${fstest} stat ${n0} ctime`
120         test_check $ctime1 -lt $ctime2
121 done
122 expect 0 unlink ${n0}
123
124 expect 0 mkdir ${n0} 0755
125 for flag in `echo ${allflags},none | tr ',' ' '`; do
126         ctime1=`${fstest} stat ${n0} ctime`
127         sleep 1
128         expect 0 chflags ${n0} ${flag}
129         ctime2=`${fstest} stat ${n0} ctime`
130         test_check $ctime1 -lt $ctime2
131 done
132 expect 0 rmdir ${n0}
133
134 expect 0 mkfifo ${n0} 0644
135 for flag in `echo ${allflags},none | tr ',' ' '`; do
136         ctime1=`${fstest} stat ${n0} ctime`
137         sleep 1
138         expect 0 chflags ${n0} ${flag}
139         ctime2=`${fstest} stat ${n0} ctime`
140         test_check $ctime1 -lt $ctime2
141 done
142 expect 0 unlink ${n0}
143
144 expect 0 symlink ${n1} ${n0}
145 for flag in `echo ${allflags},none | tr ',' ' '`; do
146         ctime1=`${fstest} lstat ${n0} ctime`
147         sleep 1
148         expect 0 lchflags ${n0} ${flag}
149         ctime2=`${fstest} lstat ${n0} ctime`
150         test_check $ctime1 -lt $ctime2
151 done
152 expect 0 unlink ${n0}
153
154 # unsuccessful chflags(2) does not update ctime.
155 expect 0 create ${n0} 0644
156 for flag in `echo ${allflags},none | tr ',' ' '`; do
157         ctime1=`${fstest} stat ${n0} ctime`
158         sleep 1
159         expect EPERM -u 65534 chflags ${n0} ${flag}
160         ctime2=`${fstest} stat ${n0} ctime`
161         test_check $ctime1 -eq $ctime2
162 done
163 expect 0 unlink ${n0}
164
165 expect 0 mkdir ${n0} 0755
166 for flag in `echo ${allflags},none | tr ',' ' '`; do
167         ctime1=`${fstest} stat ${n0} ctime`
168         sleep 1
169         expect EPERM -u 65534 chflags ${n0} ${flag}
170         ctime2=`${fstest} stat ${n0} ctime`
171         test_check $ctime1 -eq $ctime2
172 done
173 expect 0 rmdir ${n0}
174
175 expect 0 mkfifo ${n0} 0644
176 for flag in `echo ${allflags},none | tr ',' ' '`; do
177         ctime1=`${fstest} stat ${n0} ctime`
178         sleep 1
179         expect EPERM -u 65534 chflags ${n0} ${flag}
180         ctime2=`${fstest} stat ${n0} ctime`
181         test_check $ctime1 -eq $ctime2
182 done
183 expect 0 unlink ${n0}
184
185 expect 0 symlink ${n1} ${n0}
186 for flag in `echo ${allflags},none | tr ',' ' '`; do
187         ctime1=`${fstest} lstat ${n0} ctime`
188         sleep 1
189         expect EPERM -u 65534 lchflags ${n0} ${flag}
190         ctime2=`${fstest} lstat ${n0} ctime`
191         test_check $ctime1 -eq $ctime2
192 done
193 expect 0 unlink ${n0}
194
195 cd ${cdir}
196 expect 0 rmdir ${n2}