08.t revision 211352
1166065Spjd#!/bin/sh
2166065Spjd# $FreeBSD: head/tools/regression/pjdfstest/tests/rename/08.t 211186 2010-08-11 17:34:58Z 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
11166065Spjdcase "${os}:${fs}" in
12166065SpjdFreeBSD:ZFS)
13166065Spjd	flags1="SF_IMMUTABLE"
14166065Spjd	flags2="SF_NOUNLINK SF_APPEND"
15166065Spjd	echo "1..128"
16166065Spjd	;;
17166065SpjdFreeBSD:UFS)
18166065Spjd	flags1="SF_IMMUTABLE UF_IMMUTABLE"
19166065Spjd	flags2="SF_NOUNLINK SF_APPEND UF_NOUNLINK UF_APPEND"
20166065Spjd	echo "1..219"
21166065Spjd	;;
22166065Spjd*)
23166065Spjd	quick_exit
24166065Spjdesac
25166065Spjd
26166065Spjdn0=`namegen`
27166065Spjdn1=`namegen`
28n2=`namegen`
29
30expect 0 mkdir ${n0} 0755
31
32for type in regular dir fifo block char socket symlink; do
33	create_file ${type} ${n1}
34	for flag in ${flags1}; do
35		expect 0 chflags ${n0} ${flag}
36		expect ${flag} stat ${n0} flags
37		expect EPERM rename ${n1} ${n0}/${n2}
38	done
39	expect 0 chflags ${n0} none
40	if [ "${type}" = "dir" ]; then
41		expect 0 rmdir ${n1}
42	else
43		expect 0 unlink ${n1}
44	fi
45done
46
47for type in regular dir fifo block char socket symlink; do
48	create_file ${type} ${n1}
49	for flag in ${flags2}; do
50		expect 0 chflags ${n0} ${flag}
51		expect ${flag} stat ${n0} flags
52		expect 0 rename ${n1} ${n0}/${n2}
53		expect 0 chflags ${n0} none
54		expect 0 rename ${n0}/${n2} ${n1}
55	done
56	if [ "${type}" = "dir" ]; then
57		expect 0 rmdir ${n1}
58	else
59		expect 0 unlink ${n1}
60	fi
61done
62
63expect 0 rmdir ${n0}
64