08.t revision 210984
1166065Spjd#!/bin/sh
2166065Spjd# $FreeBSD: head/tools/regression/fstest/tests/rename/08.t 210984 2010-08-06 23:58:54Z pjd $
3166065Spjd
4166065Spjddesc="rename returns EPERM if the parent directory of the file pointed at by the 'to' argument has its immutable flag set"
5166065Spjd
6166065Spjddir=`dirname $0`
7166065Spjd. ${dir}/../misc.sh
8166065Spjd
9166065Spjdrequire chflags
10166065Spjd
11210984Spjdcase "${os}:${fs}" in
12210984SpjdFreeBSD:ZFS)
13210984Spjd	flags1="SF_IMMUTABLE"
14210984Spjd	flags2="SF_NOUNLINK SF_APPEND"
15210984Spjd	echo "1..110"
16210984Spjd	;;
17210984SpjdFreeBSD:UFS)
18210984Spjd	flags1="SF_IMMUTABLE UF_IMMUTABLE"
19210984Spjd	flags2="SF_NOUNLINK SF_APPEND UF_NOUNLINK UF_APPEND"
20210984Spjd	echo "1..188"
21210984Spjd	;;
22210984Spjd*)
23210984Spjd	quick_exit
24210984Spjdesac
25166065Spjd
26166065Spjdn0=`namegen`
27166065Spjdn1=`namegen`
28166065Spjdn2=`namegen`
29166065Spjd
30166065Spjdexpect 0 mkdir ${n0} 0755
31166065Spjd
32166065Spjdexpect 0 create ${n1} 0644
33210984Spjdfor flag in ${flags1}; do
34166065Spjd	expect 0 chflags ${n0} ${flag}
35166065Spjd	expect ${flag} stat ${n0} flags
36166065Spjd	expect EPERM rename ${n1} ${n0}/${n2}
37166065Spjddone
38166065Spjdexpect 0 chflags ${n0} none
39166065Spjdexpect 0 unlink ${n1}
40166065Spjd
41166065Spjdexpect 0 mkdir ${n1} 0755
42210984Spjdfor flag in ${flags1}; do
43166065Spjd	expect 0 chflags ${n0} ${flag}
44166065Spjd	expect ${flag} stat ${n0} flags
45166065Spjd	expect EPERM rename ${n1} ${n0}/${n2}
46166065Spjddone
47166065Spjdexpect 0 chflags ${n0} none
48166065Spjdexpect 0 rmdir ${n1}
49166065Spjd
50166065Spjdexpect 0 mkfifo ${n1} 0644
51210984Spjdfor flag in ${flags1}; do
52166065Spjd	expect 0 chflags ${n0} ${flag}
53166065Spjd	expect ${flag} stat ${n0} flags
54166065Spjd	expect EPERM rename ${n1} ${n0}/${n2}
55166065Spjddone
56166065Spjdexpect 0 chflags ${n0} none
57166065Spjdexpect 0 unlink ${n1}
58166065Spjd
59210984Spjdexpect 0 mknod ${n1} c 0644 1 2
60210984Spjdfor flag in ${flags1}; do
61210984Spjd	expect 0 chflags ${n0} ${flag}
62210984Spjd	expect ${flag} stat ${n0} flags
63210984Spjd	expect EPERM rename ${n1} ${n0}/${n2}
64210984Spjddone
65210984Spjdexpect 0 chflags ${n0} none
66210984Spjdexpect 0 unlink ${n1}
67210984Spjd
68210984Spjdexpect 0 bind ${n1}
69210984Spjdfor flag in ${flags1}; do
70210984Spjd	expect 0 chflags ${n0} ${flag}
71210984Spjd	expect ${flag} stat ${n0} flags
72210984Spjd	expect EPERM rename ${n1} ${n0}/${n2}
73210984Spjddone
74210984Spjdexpect 0 chflags ${n0} none
75210984Spjdexpect 0 unlink ${n1}
76210984Spjd
77166065Spjdexpect 0 symlink ${n2} ${n1}
78210984Spjdfor flag in ${flags1}; do
79166065Spjd	expect 0 chflags ${n0} ${flag}
80166065Spjd	expect ${flag} stat ${n0} flags
81166065Spjd	expect EPERM rename ${n1} ${n0}/${n2}
82166065Spjddone
83166065Spjdexpect 0 chflags ${n0} none
84166065Spjdexpect 0 unlink ${n1}
85166065Spjd
86166065Spjdexpect 0 create ${n1} 0644
87210984Spjdfor flag in ${flags2}; do
88166065Spjd	expect 0 chflags ${n0} ${flag}
89166065Spjd	expect ${flag} stat ${n0} flags
90166065Spjd	expect 0 rename ${n1} ${n0}/${n2}
91166065Spjd	expect 0 chflags ${n0} none
92166065Spjd	expect 0 rename ${n0}/${n2} ${n1}
93166065Spjddone
94166065Spjdexpect 0 unlink ${n1}
95166065Spjd
96166065Spjdexpect 0 mkdir ${n1} 0755
97210984Spjdfor flag in ${flags2}; do
98166065Spjd	expect 0 chflags ${n0} ${flag}
99166065Spjd	expect ${flag} stat ${n0} flags
100166065Spjd	expect 0 rename ${n1} ${n0}/${n2}
101166065Spjd	expect 0 chflags ${n0} none
102166065Spjd	expect 0 rename ${n0}/${n2} ${n1}
103166065Spjddone
104166065Spjdexpect 0 rmdir ${n1}
105166065Spjd
106166065Spjdexpect 0 mkfifo ${n1} 0644
107210984Spjdfor flag in ${flags2}; do
108166065Spjd	expect 0 chflags ${n0} ${flag}
109166065Spjd	expect ${flag} stat ${n0} flags
110166065Spjd	expect 0 rename ${n1} ${n0}/${n2}
111166065Spjd	expect 0 chflags ${n0} none
112166065Spjd	expect 0 rename ${n0}/${n2} ${n1}
113166065Spjddone
114166065Spjdexpect 0 unlink ${n1}
115166065Spjd
116210984Spjdexpect 0 mknod ${n1} c 0644 1 2
117210984Spjdfor flag in ${flags2}; do
118210984Spjd	expect 0 chflags ${n0} ${flag}
119210984Spjd	expect ${flag} stat ${n0} flags
120210984Spjd	expect 0 rename ${n1} ${n0}/${n2}
121210984Spjd	expect 0 chflags ${n0} none
122210984Spjd	expect 0 rename ${n0}/${n2} ${n1}
123210984Spjddone
124210984Spjdexpect 0 unlink ${n1}
125210984Spjd
126210984Spjdexpect 0 bind ${n1}
127210984Spjdfor flag in ${flags2}; do
128210984Spjd	expect 0 chflags ${n0} ${flag}
129210984Spjd	expect ${flag} stat ${n0} flags
130210984Spjd	expect 0 rename ${n1} ${n0}/${n2}
131210984Spjd	expect 0 chflags ${n0} none
132210984Spjd	expect 0 rename ${n0}/${n2} ${n1}
133210984Spjddone
134210984Spjdexpect 0 unlink ${n1}
135210984Spjd
136166065Spjdexpect 0 symlink ${n2} ${n1}
137210984Spjdfor flag in ${flags2}; do
138166065Spjd	expect 0 chflags ${n0} ${flag}
139166065Spjd	expect ${flag} stat ${n0} flags
140166065Spjd	expect 0 rename ${n1} ${n0}/${n2}
141166065Spjd	expect 0 chflags ${n0} none
142166065Spjd	expect 0 rename ${n0}/${n2} ${n1}
143166065Spjddone
144166065Spjdexpect 0 unlink ${n1}
145166065Spjd
146166065Spjdexpect 0 rmdir ${n0}
147