08.t revision 272057
1251875Speter#!/bin/sh
2289166Speter# $FreeBSD: head/tools/regression/pjdfstest/tests/chflags/08.t 211352 2010-08-15 21:24:17Z pjd $
3289166Speter
4289166Speterdesc="chflags returns EPERM when one of SF_IMMUTABLE, SF_APPEND, or SF_NOUNLINK is set and the user is not the super-user"
5289166Speter
6289166Speterdir=`dirname $0`
7289166Speter. ${dir}/../misc.sh
8289166Speter
9289166Speterrequire chflags
10289166Speter
11289166Speterecho "1..249"
12289166Speter
13289166Spetern0=`namegen`
14289166Spetern1=`namegen`
15289166Spetern2=`namegen`
16289166Speter
17289166Speterexpect 0 mkdir ${n0} 0755
18289166Spetercdir=`pwd`
19289166Spetercd ${n0}
20289166Speter
21289166Speterfor type in regular dir fifo block char socket symlink; do
22289166Speter	if [ "${type}" != "symlink" ]; then
23289166Speter		create_file ${type} ${n1}
24289166Speter		expect 0 chown ${n1} 65534 65534
25289166Speter		for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
26289166Speter			expect 0 chflags ${n1} ${flag}
27289166Speter			expect EPERM -u 65533 -g 65533 chflags ${n1} UF_NODUMP
28289166Speter			expect ${flag} stat ${n1} flags
29289166Speter			expect EPERM -u 65534 -g 65534 chflags ${n1} UF_NODUMP
30289166Speter			expect ${flag} stat ${n1} flags
31289166Speter		done
32289166Speter		expect 0 chflags ${n1} none
33289166Speter		if [ "${type}" = "dir" ]; then
34289166Speter			expect 0 rmdir ${n1}
35289166Speter		else
36289166Speter			expect 0 unlink ${n1}
37289166Speter		fi
38289166Speter	fi
39289166Speter
40289166Speter	create_file ${type} ${n1}
41289166Speter	expect 0 lchown ${n1} 65534 65534
42289166Speter	for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
43289166Speter		expect 0 lchflags ${n1} ${flag}
44289166Speter		expect EPERM -u 65533 -g 65533 lchflags ${n1} UF_NODUMP
45289166Speter		expect ${flag} lstat ${n1} flags
46289166Speter		expect EPERM -u 65534 -g 65534 lchflags ${n1} UF_NODUMP
47289166Speter		expect ${flag} lstat ${n1} flags
48289166Speter	done
49289166Speter	expect 0 lchflags ${n1} none
50289166Speter	if [ "${type}" = "dir" ]; then
51289166Speter		expect 0 rmdir ${n1}
52289166Speter	else
53289166Speter		expect 0 unlink ${n1}
54289166Speter	fi
55289166Speterdone
56289166Speter
57289166Spetercd ${cdir}
58289166Speterexpect 0 rmdir ${n0}
59289166Speter