1166065Spjd#!/bin/sh
2166065Spjd# $FreeBSD$
3166065Spjd
4166065Spjddesc="unlink returns EPERM if the parent directory of the named file has its immutable or append-only flag set"
5166065Spjd
6166065Spjddir=`dirname $0`
7166065Spjd. ${dir}/../misc.sh
8166065Spjd
9166065Spjdrequire chflags
10166065Spjd
11210984Spjdcase "${os}:${fs}" in
12210984SpjdFreeBSD:ZFS)
13210984Spjd	echo "1..16"
14210984Spjd	;;
15210984SpjdFreeBSD:UFS)
16210984Spjd	echo "1..30"
17210984Spjd	;;
18210984Spjd*)
19210984Spjd	quick_exit
20210984Spjdesac
21166065Spjd
22166065Spjdn0=`namegen`
23166065Spjdn1=`namegen`
24166065Spjd
25166065Spjdexpect 0 mkdir ${n0} 0755
26166065Spjd
27166065Spjdexpect 0 create ${n0}/${n1} 0644
28166065Spjdexpect 0 chflags ${n0} SF_IMMUTABLE
29166065Spjdexpect EPERM unlink ${n0}/${n1}
30166065Spjdexpect 0 chflags ${n0} none
31166065Spjdexpect 0 unlink ${n0}/${n1}
32166065Spjd
33166065Spjdexpect 0 create ${n0}/${n1} 0644
34210984Spjdexpect 0 chflags ${n0} SF_NOUNLINK
35210984Spjdexpect 0 unlink ${n0}/${n1}
36166065Spjdexpect 0 chflags ${n0} none
37166065Spjd
38166065Spjdexpect 0 create ${n0}/${n1} 0644
39166065Spjdexpect 0 chflags ${n0} SF_APPEND
40210984Spjdtodo FreeBSD:ZFS "Removing a file from a directory protected by SF_APPEND should return EPERM."
41166065Spjdexpect EPERM unlink ${n0}/${n1}
42166065Spjdexpect 0 chflags ${n0} none
43210984Spjdtodo FreeBSD:ZFS "Removing a file from a directory protected by SF_APPEND should return EPERM."
44166065Spjdexpect 0 unlink ${n0}/${n1}
45166065Spjd
46210984Spjdcase "${os}:${fs}" in
47210984SpjdFreeBSD:UFS)
48210984Spjd	expect 0 create ${n0}/${n1} 0644
49210984Spjd	expect 0 chflags ${n0} UF_IMMUTABLE
50210984Spjd	expect EPERM unlink ${n0}/${n1}
51210984Spjd	expect 0 chflags ${n0} none
52210984Spjd	expect 0 unlink ${n0}/${n1}
53166065Spjd
54210984Spjd	expect 0 create ${n0}/${n1} 0644
55210984Spjd	expect 0 chflags ${n0} UF_NOUNLINK
56210984Spjd	expect 0 unlink ${n0}/${n1}
57210984Spjd	expect 0 chflags ${n0} none
58166065Spjd
59210984Spjd	expect 0 create ${n0}/${n1} 0644
60210984Spjd	expect 0 chflags ${n0} UF_APPEND
61210984Spjd	expect EPERM unlink ${n0}/${n1}
62210984Spjd	expect 0 chflags ${n0} none
63210984Spjd	expect 0 unlink ${n0}/${n1}
64210984Spjd	;;
65210984Spjdesac
66166065Spjd
67166065Spjdexpect 0 rmdir ${n0}
68