1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/rename/06.t 211352 2010-08-15 21:24:17Z pjd $
3271294Sngie
4271294Sngiedesc="rename returns EPERM if the file pointed at by the 'from' argument has its immutable, undeletable or append-only flag set"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngierequire chflags
10271294Sngie
11271294Sngiecase "${os}:${fs}" in
12271294SngieFreeBSD:ZFS)
13271294Sngie	flags="SF_IMMUTABLE SF_NOUNLINK SF_APPEND"
14271294Sngie	echo "1..195"
15271294Sngie	;;
16271294SngieFreeBSD:UFS)
17271294Sngie	flags="SF_IMMUTABLE SF_NOUNLINK SF_APPEND UF_IMMUTABLE UF_NOUNLINK UF_APPEND"
18271294Sngie	echo "1..351"
19271294Sngie	;;
20271294Sngie*)
21271294Sngie	quick_exit
22271294Sngieesac
23271294Sngie
24271294Sngien0=`namegen`
25271294Sngien1=`namegen`
26271294Sngie
27271294Sngiefor type in regular dir fifo block char socket symlink; do
28271294Sngie	if [ "${type}" != "symlink" ]; then
29271294Sngie		create_file ${type} ${n0}
30271294Sngie		for flag in ${flags}; do
31271294Sngie			expect 0 chflags ${n0} ${flag}
32271294Sngie			expect ${flag} stat ${n0} flags
33271294Sngie			[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
34271294Sngie			expect EPERM rename ${n0} ${n1}
35271294Sngie			[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
36271294Sngie			expect ENOENT rename ${n1} ${n0}
37271294Sngie		done
38271294Sngie		expect 0 chflags ${n0} none
39271294Sngie		if [ "${type}" = "dir" ]; then
40271294Sngie			expect 0 rmdir ${n0}
41271294Sngie		else
42271294Sngie			expect 0 unlink ${n0}
43271294Sngie		fi
44271294Sngie	fi
45271294Sngie
46271294Sngie	create_file ${type} ${n0}
47271294Sngie	for flag in ${flags}; do
48271294Sngie		expect 0 lchflags ${n0} ${flag}
49271294Sngie		expect ${flag} lstat ${n0} flags
50271294Sngie		[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
51271294Sngie		expect EPERM rename ${n0} ${n1}
52271294Sngie		[ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
53271294Sngie		expect ENOENT rename ${n1} ${n0}
54271294Sngie	done
55271294Sngie	expect 0 lchflags ${n0} none
56271294Sngie	if [ "${type}" = "dir" ]; then
57271294Sngie		expect 0 rmdir ${n0}
58271294Sngie	else
59271294Sngie		expect 0 unlink ${n0}
60271294Sngie	fi
61271294Sngiedone
62