xref: /openbsd/regress/sys/ffs/tests/chflags/08.t (revision 73471bf0)
1#!/bin/sh
2# $FreeBSD: src/tools/regression/fstest/tests/chflags/08.t,v 1.1 2007/01/17 01:42:08 pjd Exp $
3
4desc="chflags returns EPERM when one of SF_IMMUTABLE or SF_APPEND, is set and the user is not the super-user"
5
6n0=`namegen`
7n1=`namegen`
8n2=`namegen`
9
10expect 0 mkdir ${n0} 0755
11cdir=`pwd`
12cd ${n0}
13
14expect 0 create ${n1} 0644
15expect 0 chown ${n1} 65534 65534
16for flag in SF_IMMUTABLE SF_APPEND ; do
17	expect 0 chflags ${n1} ${flag}
18	expect EPERM -u 65533 -g 65533 chflags ${n1} UF_IMMUTABLE
19	expect ${flag} stat ${n1} flags
20	expect EPERM -u 65534 -g 65534 chflags ${n1} UF_IMMUTABLE
21	expect ${flag} stat ${n1} flags
22done
23expect 0 chflags ${n1} none
24expect 0 unlink ${n1}
25
26expect 0 mkdir ${n1} 0755
27expect 0 chown ${n1} 65534 65534
28for flag in SF_IMMUTABLE SF_APPEND ; do
29	expect 0 chflags ${n1} ${flag}
30	expect EPERM -u 65533 -g 65533 chflags ${n1} UF_IMMUTABLE
31	expect ${flag} stat ${n1} flags
32	expect EPERM -u 65534 -g 65534 chflags ${n1} UF_IMMUTABLE
33	expect ${flag} stat ${n1} flags
34done
35expect 0 chflags ${n1} none
36expect 0 rmdir ${n1}
37
38expect 0 mkfifo ${n1} 0644
39expect 0 chown ${n1} 65534 65534
40for flag in SF_IMMUTABLE SF_APPEND ; do
41	expect 0 chflags ${n1} ${flag}
42	expect EPERM -u 65533 -g 65533 chflags ${n1} UF_IMMUTABLE
43	expect ${flag} stat ${n1} flags
44	expect EPERM -u 65534 -g 65534 chflags ${n1} UF_IMMUTABLE
45	expect ${flag} stat ${n1} flags
46done
47expect 0 chflags ${n1} none
48expect 0 unlink ${n1}
49
50expect 0 symlink ${n2} ${n1}
51expect 0 lchown ${n1} 65534 65534
52for flag in SF_IMMUTABLE SF_APPEND ; do
53	expect 0 lchflags ${n1} ${flag}
54	expect EPERM -u 65533 -g 65533 lchflags ${n1} UF_IMMUTABLE
55	expect ${flag} lstat ${n1} flags
56	expect EPERM -u 65534 -g 65534 lchflags ${n1} UF_IMMUTABLE
57	expect ${flag} lstat ${n1} flags
58done
59expect 0 lchflags ${n1} none
60expect 0 unlink ${n1}
61
62cd ${cdir}
63expect 0 rmdir ${n0}
64