07.t revision 211156
1166065Spjd#!/bin/sh
2166065Spjd# $FreeBSD: head/tools/regression/fstest/tests/rename/07.t 211156 2010-08-10 22:57:43Z pjd $
3166065Spjd
4166065Spjddesc="rename returns EPERM if the parent directory of the file pointed at by the 'from' argument has its immutable or append-only flag set"
5166065Spjd
6166065Spjddir=`dirname $0`
7166065Spjd. ${dir}/../misc.sh
8166065Spjd
9166065Spjdrequire chflags
10166065Spjd
11210984Spjdcase "${os}:${fs}" in
12210984SpjdFreeBSD:ZFS)
13210984Spjd	flags1="SF_IMMUTABLE SF_APPEND"
14210984Spjd	flags2="SF_NOUNLINK"
15211156Spjd	echo "1..128"
16210984Spjd	;;
17210984SpjdFreeBSD:UFS)
18210984Spjd	flags1="SF_IMMUTABLE SF_APPEND UF_IMMUTABLE UF_APPEND"
19210984Spjd	flags2="SF_NOUNLINK UF_NOUNLINK"
20211156Spjd	echo "1..212"
21210984Spjd	;;
22210984Spjd*)
23210984Spjd	quick_exit
24210984Spjdesac
25166065Spjd
26166065Spjdn0=`namegen`
27166065Spjdn1=`namegen`
28166065Spjdn2=`namegen`
29166065Spjd
30166065Spjdexpect 0 mkdir ${n0} 0755
31166065Spjd
32166065Spjdexpect 0 create ${n0}/${n1} 0644
33210984Spjdfor flag in ${flags1}; do
34166065Spjd	expect 0 chflags ${n0} ${flag}
35166065Spjd	expect ${flag} stat ${n0} flags
36210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
37166065Spjd	expect EPERM rename ${n0}/${n1} ${n2}
38210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
39210984Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
40166065Spjddone
41166065Spjdexpect 0 chflags ${n0} none
42166065Spjdexpect 0 unlink ${n0}/${n1}
43166065Spjd
44166065Spjdexpect 0 mkdir ${n0}/${n1} 0755
45210984Spjdfor flag in ${flags1}; do
46166065Spjd	expect 0 chflags ${n0} ${flag}
47166065Spjd	expect ${flag} stat ${n0} flags
48210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
49166065Spjd	expect EPERM rename ${n0}/${n1} ${n2}
50210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
51210984Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
52166065Spjddone
53166065Spjdexpect 0 chflags ${n0} none
54166065Spjdexpect 0 rmdir ${n0}/${n1}
55166065Spjd
56166065Spjdexpect 0 mkfifo ${n0}/${n1} 0644
57210984Spjdfor flag in ${flags1}; do
58166065Spjd	expect 0 chflags ${n0} ${flag}
59166065Spjd	expect ${flag} stat ${n0} flags
60210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
61166065Spjd	expect EPERM rename ${n0}/${n1} ${n2}
62210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
63210984Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
64166065Spjddone
65166065Spjdexpect 0 chflags ${n0} none
66166065Spjdexpect 0 unlink ${n0}/${n1}
67166065Spjd
68211156Spjdexpect 0 mknod ${n0}/${n1} b 0644 1 2
69211156Spjdfor flag in ${flags1}; do
70211156Spjd	expect 0 chflags ${n0} ${flag}
71211156Spjd	expect ${flag} stat ${n0} flags
72211156Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
73211156Spjd	expect EPERM rename ${n0}/${n1} ${n2}
74211156Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
75211156Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
76211156Spjddone
77211156Spjdexpect 0 chflags ${n0} none
78211156Spjdexpect 0 unlink ${n0}/${n1}
79211156Spjd
80210984Spjdexpect 0 mknod ${n0}/${n1} c 0644 1 2
81210984Spjdfor flag in ${flags1}; do
82210984Spjd	expect 0 chflags ${n0} ${flag}
83210984Spjd	expect ${flag} stat ${n0} flags
84210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
85210984Spjd	expect EPERM rename ${n0}/${n1} ${n2}
86210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
87210984Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
88210984Spjddone
89210984Spjdexpect 0 chflags ${n0} none
90210984Spjdexpect 0 unlink ${n0}/${n1}
91210984Spjd
92210984Spjdexpect 0 bind ${n0}/${n1}
93210984Spjdfor flag in ${flags1}; do
94210984Spjd	expect 0 chflags ${n0} ${flag}
95210984Spjd	expect ${flag} stat ${n0} flags
96210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
97210984Spjd	expect EPERM rename ${n0}/${n1} ${n2}
98210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
99210984Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
100210984Spjddone
101210984Spjdexpect 0 chflags ${n0} none
102210984Spjdexpect 0 unlink ${n0}/${n1}
103210984Spjd
104166065Spjdexpect 0 symlink ${n2} ${n0}/${n1}
105210984Spjdfor flag in ${flags1}; do
106166065Spjd	expect 0 chflags ${n0} ${flag}
107166065Spjd	expect ${flag} stat ${n0} flags
108210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
109166065Spjd	expect EPERM rename ${n0}/${n1} ${n2}
110210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
111210984Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
112166065Spjddone
113166065Spjdexpect 0 chflags ${n0} none
114166065Spjdexpect 0 unlink ${n0}/${n1}
115166065Spjd
116166065Spjdexpect 0 create ${n0}/${n1} 0644
117210984Spjdfor flag in ${flags2}; do
118166065Spjd	expect 0 chflags ${n0} ${flag}
119166065Spjd	expect ${flag} stat ${n0} flags
120166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
121166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
122166065Spjddone
123166065Spjdexpect 0 chflags ${n0} none
124166065Spjdexpect 0 unlink ${n0}/${n1}
125166065Spjd
126166065Spjdexpect 0 mkdir ${n0}/${n1} 0755
127210984Spjdfor flag in ${flags2}; do
128166065Spjd	expect 0 chflags ${n0} ${flag}
129166065Spjd	expect ${flag} stat ${n0} flags
130166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
131166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
132166065Spjddone
133166065Spjdexpect 0 chflags ${n0} none
134166065Spjdexpect 0 rmdir ${n0}/${n1}
135166065Spjd
136166065Spjdexpect 0 mkfifo ${n0}/${n1} 0644
137210984Spjdfor flag in ${flags2}; do
138166065Spjd	expect 0 chflags ${n0} ${flag}
139166065Spjd	expect ${flag} stat ${n0} flags
140166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
141166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
142166065Spjddone
143166065Spjdexpect 0 chflags ${n0} none
144166065Spjdexpect 0 unlink ${n0}/${n1}
145166065Spjd
146211156Spjdexpect 0 mknod ${n0}/${n1} b 0644 1 2
147211156Spjdfor flag in ${flags2}; do
148211156Spjd	expect 0 chflags ${n0} ${flag}
149211156Spjd	expect ${flag} stat ${n0} flags
150211156Spjd	expect 0 rename ${n0}/${n1} ${n2}
151211156Spjd	expect 0 rename ${n2} ${n0}/${n1}
152211156Spjddone
153211156Spjdexpect 0 chflags ${n0} none
154211156Spjdexpect 0 unlink ${n0}/${n1}
155211156Spjd
156210984Spjdexpect 0 mknod ${n0}/${n1} c 0644 1 2
157210984Spjdfor flag in ${flags2}; do
158210984Spjd	expect 0 chflags ${n0} ${flag}
159210984Spjd	expect ${flag} stat ${n0} flags
160210984Spjd	expect 0 rename ${n0}/${n1} ${n2}
161210984Spjd	expect 0 rename ${n2} ${n0}/${n1}
162210984Spjddone
163210984Spjdexpect 0 chflags ${n0} none
164210984Spjdexpect 0 unlink ${n0}/${n1}
165210984Spjd
166210984Spjdexpect 0 bind ${n0}/${n1}
167210984Spjdfor flag in ${flags2}; do
168210984Spjd	expect 0 chflags ${n0} ${flag}
169210984Spjd	expect ${flag} stat ${n0} flags
170210984Spjd	expect 0 rename ${n0}/${n1} ${n2}
171210984Spjd	expect 0 rename ${n2} ${n0}/${n1}
172210984Spjddone
173210984Spjdexpect 0 chflags ${n0} none
174210984Spjdexpect 0 unlink ${n0}/${n1}
175210984Spjd
176166065Spjdexpect 0 symlink ${n2} ${n0}/${n1}
177210984Spjdfor flag in ${flags2}; do
178166065Spjd	expect 0 chflags ${n0} ${flag}
179166065Spjd	expect ${flag} stat ${n0} flags
180166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
181166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
182166065Spjddone
183166065Spjdexpect 0 chflags ${n0} none
184166065Spjdexpect 0 unlink ${n0}/${n1}
185166065Spjd
186166065Spjdexpect 0 rmdir ${n0}
187