07.t revision 210984
1#!/bin/sh
2# $FreeBSD: head/tools/regression/fstest/tests/rename/07.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 'from' argument has its immutable or append-only flag set"
5
6dir=`dirname $0`
7. ${dir}/../misc.sh
8
9require chflags
10
11case "${os}:${fs}" in
12FreeBSD:ZFS)
13	flags1="SF_IMMUTABLE SF_APPEND"
14	flags2="SF_NOUNLINK"
15	echo "1..110"
16	;;
17FreeBSD:UFS)
18	flags1="SF_IMMUTABLE SF_APPEND UF_IMMUTABLE UF_APPEND"
19	flags2="SF_NOUNLINK UF_NOUNLINK"
20	echo "1..182"
21	;;
22*)
23	quick_exit
24esac
25
26n0=`namegen`
27n1=`namegen`
28n2=`namegen`
29
30expect 0 mkdir ${n0} 0755
31
32expect 0 create ${n0}/${n1} 0644
33for flag in ${flags1}; do
34	expect 0 chflags ${n0} ${flag}
35	expect ${flag} stat ${n0} flags
36	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
37	expect EPERM rename ${n0}/${n1} ${n2}
38	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
39	expect ENOENT rename ${n2} ${n0}/${n1}
40done
41expect 0 chflags ${n0} none
42expect 0 unlink ${n0}/${n1}
43
44expect 0 mkdir ${n0}/${n1} 0755
45for flag in ${flags1}; do
46	expect 0 chflags ${n0} ${flag}
47	expect ${flag} stat ${n0} flags
48	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
49	expect EPERM rename ${n0}/${n1} ${n2}
50	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
51	expect ENOENT rename ${n2} ${n0}/${n1}
52done
53expect 0 chflags ${n0} none
54expect 0 rmdir ${n0}/${n1}
55
56expect 0 mkfifo ${n0}/${n1} 0644
57for flag in ${flags1}; do
58	expect 0 chflags ${n0} ${flag}
59	expect ${flag} stat ${n0} flags
60	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
61	expect EPERM rename ${n0}/${n1} ${n2}
62	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
63	expect ENOENT rename ${n2} ${n0}/${n1}
64done
65expect 0 chflags ${n0} none
66expect 0 unlink ${n0}/${n1}
67
68expect 0 mknod ${n0}/${n1} c 0644 1 2
69for flag in ${flags1}; do
70	expect 0 chflags ${n0} ${flag}
71	expect ${flag} stat ${n0} flags
72	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
73	expect EPERM rename ${n0}/${n1} ${n2}
74	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
75	expect ENOENT rename ${n2} ${n0}/${n1}
76done
77expect 0 chflags ${n0} none
78expect 0 unlink ${n0}/${n1}
79
80expect 0 bind ${n0}/${n1}
81for flag in ${flags1}; do
82	expect 0 chflags ${n0} ${flag}
83	expect ${flag} stat ${n0} flags
84	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
85	expect EPERM rename ${n0}/${n1} ${n2}
86	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
87	expect ENOENT rename ${n2} ${n0}/${n1}
88done
89expect 0 chflags ${n0} none
90expect 0 unlink ${n0}/${n1}
91
92expect 0 symlink ${n2} ${n0}/${n1}
93for flag in ${flags1}; do
94	expect 0 chflags ${n0} ${flag}
95	expect ${flag} stat ${n0} flags
96	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
97	expect EPERM rename ${n0}/${n1} ${n2}
98	[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
99	expect ENOENT rename ${n2} ${n0}/${n1}
100done
101expect 0 chflags ${n0} none
102expect 0 unlink ${n0}/${n1}
103
104expect 0 create ${n0}/${n1} 0644
105for flag in ${flags2}; do
106	expect 0 chflags ${n0} ${flag}
107	expect ${flag} stat ${n0} flags
108	expect 0 rename ${n0}/${n1} ${n2}
109	expect 0 rename ${n2} ${n0}/${n1}
110done
111expect 0 chflags ${n0} none
112expect 0 unlink ${n0}/${n1}
113
114expect 0 mkdir ${n0}/${n1} 0755
115for flag in ${flags2}; do
116	expect 0 chflags ${n0} ${flag}
117	expect ${flag} stat ${n0} flags
118	expect 0 rename ${n0}/${n1} ${n2}
119	expect 0 rename ${n2} ${n0}/${n1}
120done
121expect 0 chflags ${n0} none
122expect 0 rmdir ${n0}/${n1}
123
124expect 0 mkfifo ${n0}/${n1} 0644
125for flag in ${flags2}; do
126	expect 0 chflags ${n0} ${flag}
127	expect ${flag} stat ${n0} flags
128	expect 0 rename ${n0}/${n1} ${n2}
129	expect 0 rename ${n2} ${n0}/${n1}
130done
131expect 0 chflags ${n0} none
132expect 0 unlink ${n0}/${n1}
133
134expect 0 mknod ${n0}/${n1} c 0644 1 2
135for flag in ${flags2}; do
136	expect 0 chflags ${n0} ${flag}
137	expect ${flag} stat ${n0} flags
138	expect 0 rename ${n0}/${n1} ${n2}
139	expect 0 rename ${n2} ${n0}/${n1}
140done
141expect 0 chflags ${n0} none
142expect 0 unlink ${n0}/${n1}
143
144expect 0 bind ${n0}/${n1}
145for flag in ${flags2}; do
146	expect 0 chflags ${n0} ${flag}
147	expect ${flag} stat ${n0} flags
148	expect 0 rename ${n0}/${n1} ${n2}
149	expect 0 rename ${n2} ${n0}/${n1}
150done
151expect 0 chflags ${n0} none
152expect 0 unlink ${n0}/${n1}
153
154expect 0 symlink ${n2} ${n0}/${n1}
155for flag in ${flags2}; do
156	expect 0 chflags ${n0} ${flag}
157	expect ${flag} stat ${n0} flags
158	expect 0 rename ${n0}/${n1} ${n2}
159	expect 0 rename ${n2} ${n0}/${n1}
160done
161expect 0 chflags ${n0} none
162expect 0 unlink ${n0}/${n1}
163
164expect 0 rmdir ${n0}
165