]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - tools/regression/pjdfstest/tests/chflags/09.t
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / tools / regression / pjdfstest / tests / chflags / 09.t
1 #!/bin/sh
2 # $FreeBSD$
3
4 desc="chflags returns EPERM when one of SF_IMMUTABLE, SF_APPEND, or SF_NOUNLINK is set and securelevel is greater than 0"
5
6 dir=`dirname $0`
7 . ${dir}/../misc.sh
8
9 require chflags
10
11 echo "1..327"
12
13 n0=`namegen`
14 n1=`namegen`
15 n2=`namegen`
16
17 old=`sysctl -n security.jail.chflags_allowed`
18 sysctl security.jail.chflags_allowed=1 >/dev/null
19
20 expect 0 mkdir ${n0} 0755
21 cdir=`pwd`
22 cd ${n0}
23
24 for type in regular dir fifo block char socket symlink; do
25         if [ "${type}" != "symlink" ]; then
26                 create_file ${type} ${n1}
27                 expect 0 chown ${n1} 65534 65534
28                 for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
29                         expect 0 chflags ${n1} ${flag}
30                         jexpect 1 `pwd` EPERM chflags ${n1} UF_NODUMP
31                         expect ${flag} stat ${n1} flags
32                         jexpect 1 `pwd` EPERM -u 65533 -g 65533 chflags ${n1} UF_NODUMP
33                         expect ${flag} stat ${n1} flags
34                         jexpect 1 `pwd` EPERM -u 65534 -g 65534 chflags ${n1} UF_NODUMP
35                         expect ${flag} stat ${n1} flags
36                 done
37                 expect 0 chflags ${n1} none
38                 if [ "${type}" = "dir" ]; then
39                         expect 0 rmdir ${n1}
40                 else
41                         expect 0 unlink ${n1}
42                 fi
43         fi
44
45         create_file ${type} ${n1}
46         expect 0 lchown ${n1} 65534 65534
47         for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
48                 expect 0 lchflags ${n1} ${flag}
49                 jexpect 1 `pwd` EPERM lchflags ${n1} UF_NODUMP
50                 expect ${flag} lstat ${n1} flags
51                 jexpect 1 `pwd` EPERM -u 65533 -g 65533 lchflags ${n1} UF_NODUMP
52                 expect ${flag} lstat ${n1} flags
53                 jexpect 1 `pwd` EPERM -u 65534 -g 65534 lchflags ${n1} UF_NODUMP
54                 expect ${flag} lstat ${n1} flags
55         done
56         expect 0 lchflags ${n1} none
57         if [ "${type}" = "dir" ]; then
58                 expect 0 rmdir ${n1}
59         else
60                 expect 0 unlink ${n1}
61         fi
62 done
63
64 sysctl security.jail.chflags_allowed=${old} >/dev/null
65 cd ${cdir}
66 expect 0 rmdir ${n0}