1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/chflags/10.t 211352 2010-08-15 21:24:17Z pjd $
3271294Sngie
4271294Sngiedesc="chflags returns EPERM if non-super-user tries to set one of SF_IMMUTABLE, SF_APPEND, or SF_NOUNLINK"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngierequire chflags
10271294Sngie
11271294Sngieecho "1..197"
12271294Sngie
13271294Sngien0=`namegen`
14271294Sngien1=`namegen`
15271294Sngien2=`namegen`
16271294Sngie
17271294Sngieexpect 0 mkdir ${n0} 0755
18271294Sngiecdir=`pwd`
19271294Sngiecd ${n0}
20271294Sngie
21271294Sngiefor type in regular dir fifo block char socket symlink; do
22271294Sngie	if [ "${type}" != "symlink" ]; then
23271294Sngie		create_file ${type} ${n1}
24271294Sngie		expect 0 chown ${n1} 65534 65534
25271294Sngie		for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
26271294Sngie			expect EPERM -u 65533 -g 65533 chflags ${n1} ${flag}
27271294Sngie			expect none stat ${n1} flags
28271294Sngie			expect EPERM -u 65534 -g 65534 chflags ${n1} ${flag}
29271294Sngie			expect none stat ${n1} flags
30271294Sngie		done
31271294Sngie		if [ "${type}" = "dir" ]; then
32271294Sngie			expect 0 rmdir ${n1}
33271294Sngie		else
34271294Sngie			expect 0 unlink ${n1}
35271294Sngie		fi
36271294Sngie	fi
37271294Sngie
38271294Sngie	create_file ${type} ${n1}
39271294Sngie	expect 0 lchown ${n1} 65534 65534
40271294Sngie	for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
41271294Sngie		expect EPERM -u 65533 -g 65533 lchflags ${n1} ${flag}
42271294Sngie		expect none lstat ${n1} flags
43271294Sngie		expect EPERM -u 65534 -g 65534 lchflags ${n1} ${flag}
44271294Sngie		expect none lstat ${n1} flags
45271294Sngie	done
46271294Sngie	if [ "${type}" = "dir" ]; then
47271294Sngie		expect 0 rmdir ${n1}
48271294Sngie	else
49271294Sngie		expect 0 unlink ${n1}
50271294Sngie	fi
51271294Sngiedone
52271294Sngie
53271294Sngiecd ${cdir}
54271294Sngieexpect 0 rmdir ${n0}
55