08.t revision 210984
1#!/bin/sh
2# $FreeBSD: head/tools/regression/fstest/tests/rename/08.t 210984 2010-08-06 23:58:54Z pjd $
3
4desc="rename returns EPERM if the parent directory of the file pointed at by the 'to' argument has its immutable flag set"
5
6dir=`dirname $0`
7. ${dir}/../misc.sh
8
9require chflags
10
11case "${os}:${fs}" in
12FreeBSD:ZFS)
13	flags1="SF_IMMUTABLE"
14	flags2="SF_NOUNLINK SF_APPEND"
15	echo "1..110"
16	;;
17FreeBSD:UFS)
18	flags1="SF_IMMUTABLE UF_IMMUTABLE"
19	flags2="SF_NOUNLINK SF_APPEND UF_NOUNLINK UF_APPEND"
20	echo "1..188"
21	;;
22*)
23	quick_exit
24esac
25
26n0=`namegen`
27n1=`namegen`
28n2=`namegen`
29
30expect 0 mkdir ${n0} 0755
31
32expect 0 create ${n1} 0644
33for flag in ${flags1}; do
34	expect 0 chflags ${n0} ${flag}
35	expect ${flag} stat ${n0} flags
36	expect EPERM rename ${n1} ${n0}/${n2}
37done
38expect 0 chflags ${n0} none
39expect 0 unlink ${n1}
40
41expect 0 mkdir ${n1} 0755
42for flag in ${flags1}; do
43	expect 0 chflags ${n0} ${flag}
44	expect ${flag} stat ${n0} flags
45	expect EPERM rename ${n1} ${n0}/${n2}
46done
47expect 0 chflags ${n0} none
48expect 0 rmdir ${n1}
49
50expect 0 mkfifo ${n1} 0644
51for flag in ${flags1}; do
52	expect 0 chflags ${n0} ${flag}
53	expect ${flag} stat ${n0} flags
54	expect EPERM rename ${n1} ${n0}/${n2}
55done
56expect 0 chflags ${n0} none
57expect 0 unlink ${n1}
58
59expect 0 mknod ${n1} c 0644 1 2
60for flag in ${flags1}; do
61	expect 0 chflags ${n0} ${flag}
62	expect ${flag} stat ${n0} flags
63	expect EPERM rename ${n1} ${n0}/${n2}
64done
65expect 0 chflags ${n0} none
66expect 0 unlink ${n1}
67
68expect 0 bind ${n1}
69for flag in ${flags1}; do
70	expect 0 chflags ${n0} ${flag}
71	expect ${flag} stat ${n0} flags
72	expect EPERM rename ${n1} ${n0}/${n2}
73done
74expect 0 chflags ${n0} none
75expect 0 unlink ${n1}
76
77expect 0 symlink ${n2} ${n1}
78for flag in ${flags1}; do
79	expect 0 chflags ${n0} ${flag}
80	expect ${flag} stat ${n0} flags
81	expect EPERM rename ${n1} ${n0}/${n2}
82done
83expect 0 chflags ${n0} none
84expect 0 unlink ${n1}
85
86expect 0 create ${n1} 0644
87for flag in ${flags2}; do
88	expect 0 chflags ${n0} ${flag}
89	expect ${flag} stat ${n0} flags
90	expect 0 rename ${n1} ${n0}/${n2}
91	expect 0 chflags ${n0} none
92	expect 0 rename ${n0}/${n2} ${n1}
93done
94expect 0 unlink ${n1}
95
96expect 0 mkdir ${n1} 0755
97for flag in ${flags2}; do
98	expect 0 chflags ${n0} ${flag}
99	expect ${flag} stat ${n0} flags
100	expect 0 rename ${n1} ${n0}/${n2}
101	expect 0 chflags ${n0} none
102	expect 0 rename ${n0}/${n2} ${n1}
103done
104expect 0 rmdir ${n1}
105
106expect 0 mkfifo ${n1} 0644
107for flag in ${flags2}; do
108	expect 0 chflags ${n0} ${flag}
109	expect ${flag} stat ${n0} flags
110	expect 0 rename ${n1} ${n0}/${n2}
111	expect 0 chflags ${n0} none
112	expect 0 rename ${n0}/${n2} ${n1}
113done
114expect 0 unlink ${n1}
115
116expect 0 mknod ${n1} c 0644 1 2
117for flag in ${flags2}; do
118	expect 0 chflags ${n0} ${flag}
119	expect ${flag} stat ${n0} flags
120	expect 0 rename ${n1} ${n0}/${n2}
121	expect 0 chflags ${n0} none
122	expect 0 rename ${n0}/${n2} ${n1}
123done
124expect 0 unlink ${n1}
125
126expect 0 bind ${n1}
127for flag in ${flags2}; do
128	expect 0 chflags ${n0} ${flag}
129	expect ${flag} stat ${n0} flags
130	expect 0 rename ${n1} ${n0}/${n2}
131	expect 0 chflags ${n0} none
132	expect 0 rename ${n0}/${n2} ${n1}
133done
134expect 0 unlink ${n1}
135
136expect 0 symlink ${n2} ${n1}
137for flag in ${flags2}; do
138	expect 0 chflags ${n0} ${flag}
139	expect ${flag} stat ${n0} flags
140	expect 0 rename ${n1} ${n0}/${n2}
141	expect 0 chflags ${n0} none
142	expect 0 rename ${n0}/${n2} ${n1}
143done
144expect 0 unlink ${n1}
145
146expect 0 rmdir ${n0}
147