07.t revision 210984
1166065Spjd#!/bin/sh
2166065Spjd# $FreeBSD: head/tools/regression/fstest/tests/rename/07.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 '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"
15210984Spjd	echo "1..110"
16210984Spjd	;;
17210984SpjdFreeBSD:UFS)
18210984Spjd	flags1="SF_IMMUTABLE SF_APPEND UF_IMMUTABLE UF_APPEND"
19210984Spjd	flags2="SF_NOUNLINK UF_NOUNLINK"
20210984Spjd	echo "1..182"
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
68210984Spjdexpect 0 mknod ${n0}/${n1} c 0644 1 2
69210984Spjdfor flag in ${flags1}; do
70210984Spjd	expect 0 chflags ${n0} ${flag}
71210984Spjd	expect ${flag} stat ${n0} flags
72210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
73210984Spjd	expect EPERM rename ${n0}/${n1} ${n2}
74210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
75210984Spjd	expect ENOENT rename ${n2} ${n0}/${n1}
76210984Spjddone
77210984Spjdexpect 0 chflags ${n0} none
78210984Spjdexpect 0 unlink ${n0}/${n1}
79210984Spjd
80210984Spjdexpect 0 bind ${n0}/${n1}
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
92166065Spjdexpect 0 symlink ${n2} ${n0}/${n1}
93210984Spjdfor flag in ${flags1}; do
94166065Spjd	expect 0 chflags ${n0} ${flag}
95166065Spjd	expect ${flag} stat ${n0} flags
96210984Spjd	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
97166065Spjd	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}
100166065Spjddone
101166065Spjdexpect 0 chflags ${n0} none
102166065Spjdexpect 0 unlink ${n0}/${n1}
103166065Spjd
104166065Spjdexpect 0 create ${n0}/${n1} 0644
105210984Spjdfor flag in ${flags2}; do
106166065Spjd	expect 0 chflags ${n0} ${flag}
107166065Spjd	expect ${flag} stat ${n0} flags
108166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
109166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
110166065Spjddone
111166065Spjdexpect 0 chflags ${n0} none
112166065Spjdexpect 0 unlink ${n0}/${n1}
113166065Spjd
114166065Spjdexpect 0 mkdir ${n0}/${n1} 0755
115210984Spjdfor flag in ${flags2}; do
116166065Spjd	expect 0 chflags ${n0} ${flag}
117166065Spjd	expect ${flag} stat ${n0} flags
118166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
119166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
120166065Spjddone
121166065Spjdexpect 0 chflags ${n0} none
122166065Spjdexpect 0 rmdir ${n0}/${n1}
123166065Spjd
124166065Spjdexpect 0 mkfifo ${n0}/${n1} 0644
125210984Spjdfor flag in ${flags2}; do
126166065Spjd	expect 0 chflags ${n0} ${flag}
127166065Spjd	expect ${flag} stat ${n0} flags
128166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
129166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
130166065Spjddone
131166065Spjdexpect 0 chflags ${n0} none
132166065Spjdexpect 0 unlink ${n0}/${n1}
133166065Spjd
134210984Spjdexpect 0 mknod ${n0}/${n1} c 0644 1 2
135210984Spjdfor flag in ${flags2}; do
136210984Spjd	expect 0 chflags ${n0} ${flag}
137210984Spjd	expect ${flag} stat ${n0} flags
138210984Spjd	expect 0 rename ${n0}/${n1} ${n2}
139210984Spjd	expect 0 rename ${n2} ${n0}/${n1}
140210984Spjddone
141210984Spjdexpect 0 chflags ${n0} none
142210984Spjdexpect 0 unlink ${n0}/${n1}
143210984Spjd
144210984Spjdexpect 0 bind ${n0}/${n1}
145210984Spjdfor flag in ${flags2}; do
146210984Spjd	expect 0 chflags ${n0} ${flag}
147210984Spjd	expect ${flag} stat ${n0} flags
148210984Spjd	expect 0 rename ${n0}/${n1} ${n2}
149210984Spjd	expect 0 rename ${n2} ${n0}/${n1}
150210984Spjddone
151210984Spjdexpect 0 chflags ${n0} none
152210984Spjdexpect 0 unlink ${n0}/${n1}
153210984Spjd
154166065Spjdexpect 0 symlink ${n2} ${n0}/${n1}
155210984Spjdfor flag in ${flags2}; do
156166065Spjd	expect 0 chflags ${n0} ${flag}
157166065Spjd	expect ${flag} stat ${n0} flags
158166065Spjd	expect 0 rename ${n0}/${n1} ${n2}
159166065Spjd	expect 0 rename ${n2} ${n0}/${n1}
160166065Spjddone
161166065Spjdexpect 0 chflags ${n0} none
162166065Spjdexpect 0 unlink ${n0}/${n1}
163166065Spjd
164166065Spjdexpect 0 rmdir ${n0}
165