xref: /freebsd/contrib/pjdfstest/tests/chflags/10.t (revision 40a8ac8f62b535d30349faf28cf47106b7041b83)
1*40a8ac8fSEnji Cooper#!/bin/sh
2*40a8ac8fSEnji Cooper# $FreeBSD: head/tools/regression/pjdfstest/tests/chflags/10.t 211352 2010-08-15 21:24:17Z pjd $
3*40a8ac8fSEnji Cooper
4*40a8ac8fSEnji Cooperdesc="chflags returns EPERM if non-super-user tries to set one of SF_IMMUTABLE, SF_APPEND, or SF_NOUNLINK"
5*40a8ac8fSEnji Cooper
6*40a8ac8fSEnji Cooperdir=`dirname $0`
7*40a8ac8fSEnji Cooper. ${dir}/../misc.sh
8*40a8ac8fSEnji Cooper
9*40a8ac8fSEnji Cooperrequire chflags
10*40a8ac8fSEnji Cooper
11*40a8ac8fSEnji Cooperecho "1..197"
12*40a8ac8fSEnji Cooper
13*40a8ac8fSEnji Coopern0=`namegen`
14*40a8ac8fSEnji Coopern1=`namegen`
15*40a8ac8fSEnji Coopern2=`namegen`
16*40a8ac8fSEnji Cooper
17*40a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755
18*40a8ac8fSEnji Coopercdir=`pwd`
19*40a8ac8fSEnji Coopercd ${n0}
20*40a8ac8fSEnji Cooper
21*40a8ac8fSEnji Cooperfor type in regular dir fifo block char socket symlink; do
22*40a8ac8fSEnji Cooper	if [ "${type}" != "symlink" ]; then
23*40a8ac8fSEnji Cooper		create_file ${type} ${n1}
24*40a8ac8fSEnji Cooper		expect 0 chown ${n1} 65534 65534
25*40a8ac8fSEnji Cooper		for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
26*40a8ac8fSEnji Cooper			expect EPERM -u 65533 -g 65533 chflags ${n1} ${flag}
27*40a8ac8fSEnji Cooper			expect none stat ${n1} flags
28*40a8ac8fSEnji Cooper			expect EPERM -u 65534 -g 65534 chflags ${n1} ${flag}
29*40a8ac8fSEnji Cooper			expect none stat ${n1} flags
30*40a8ac8fSEnji Cooper		done
31*40a8ac8fSEnji Cooper		if [ "${type}" = "dir" ]; then
32*40a8ac8fSEnji Cooper			expect 0 rmdir ${n1}
33*40a8ac8fSEnji Cooper		else
34*40a8ac8fSEnji Cooper			expect 0 unlink ${n1}
35*40a8ac8fSEnji Cooper		fi
36*40a8ac8fSEnji Cooper	fi
37*40a8ac8fSEnji Cooper
38*40a8ac8fSEnji Cooper	create_file ${type} ${n1}
39*40a8ac8fSEnji Cooper	expect 0 lchown ${n1} 65534 65534
40*40a8ac8fSEnji Cooper	for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
41*40a8ac8fSEnji Cooper		expect EPERM -u 65533 -g 65533 lchflags ${n1} ${flag}
42*40a8ac8fSEnji Cooper		expect none lstat ${n1} flags
43*40a8ac8fSEnji Cooper		expect EPERM -u 65534 -g 65534 lchflags ${n1} ${flag}
44*40a8ac8fSEnji Cooper		expect none lstat ${n1} flags
45*40a8ac8fSEnji Cooper	done
46*40a8ac8fSEnji Cooper	if [ "${type}" = "dir" ]; then
47*40a8ac8fSEnji Cooper		expect 0 rmdir ${n1}
48*40a8ac8fSEnji Cooper	else
49*40a8ac8fSEnji Cooper		expect 0 unlink ${n1}
50*40a8ac8fSEnji Cooper	fi
51*40a8ac8fSEnji Cooperdone
52*40a8ac8fSEnji Cooper
53*40a8ac8fSEnji Coopercd ${cdir}
54*40a8ac8fSEnji Cooperexpect 0 rmdir ${n0}
55