1#!/bin/sh
2# $FreeBSD: head/tools/regression/pjdfstest/tests/chmod/08.t 211352 2010-08-15 21:24:17Z pjd $
3
4desc="chmod returns EPERM if the named file has its immutable or append-only flag set"
5
6dir=`dirname $0`
7. ${dir}/../misc.sh
8
9require chflags
10
11case "${os}:${fs}" in
12FreeBSD:ZFS)
13	echo "1..29"
14	;;
15FreeBSD:UFS)
16	echo "1..54"
17	;;
18*)
19	quick_exit
20esac
21
22n0=`namegen`
23
24expect 0 create ${n0} 0644
25expect 0 chflags ${n0} SF_IMMUTABLE
26expect EPERM chmod ${n0} 0600
27supported lchmod && expect EPERM lchmod ${n0} 0600
28expect 0644 stat ${n0} mode
29expect 0 chflags ${n0} none
30expect 0 chmod ${n0} 0600
31expect 0600 stat ${n0} mode
32supported lchmod && expect 0 lchmod ${n0} 0400
33supported lchmod && expect 0400 stat ${n0} mode
34expect 0 unlink ${n0}
35
36expect 0 create ${n0} 0644
37expect 0 chflags ${n0} SF_NOUNLINK
38expect 0 chmod ${n0} 0600
39expect 0600 stat ${n0} mode
40supported lchmod && expect 0 lchmod ${n0} 0400
41supported lchmod && expect 0400 stat ${n0} mode
42expect 0 chflags ${n0} none
43expect 0 unlink ${n0}
44
45case "${os}:${fs}" in
46FreeBSD:ZFS)
47	expect 0 create ${n0} 0644
48	expect 0 chflags ${n0} SF_APPEND
49	expect 0 chmod ${n0} 0600
50	expect 0600 stat ${n0} mode
51	supported lchmod && expect 0 lchmod ${n0} 0500
52	supported lchmod && expect 0500 stat ${n0} mode
53	expect 0 chflags ${n0} none
54	expect 0 chmod ${n0} 0400
55	expect 0400 stat ${n0} mode
56	expect 0 unlink ${n0}
57	;;
58FreeBSD:UFS)
59	expect 0 create ${n0} 0644
60	expect 0 chflags ${n0} SF_APPEND
61	expect EPERM chmod ${n0} 0600
62	supported lchmod && expect EPERM lchmod ${n0} 0600
63	expect 0644 stat ${n0} mode
64	expect 0 chflags ${n0} none
65	expect 0 chmod ${n0} 0600
66	expect 0600 stat ${n0} mode
67	expect 0 unlink ${n0}
68
69	expect 0 create ${n0} 0644
70	expect 0 chflags ${n0} UF_IMMUTABLE
71	expect EPERM chmod ${n0} 0600
72	supported lchmod && expect EPERM lchmod ${n0} 0600
73	expect 0644 stat ${n0} mode
74	expect 0 chflags ${n0} none
75	expect 0 chmod ${n0} 0600
76	expect 0600 stat ${n0} mode
77	expect 0 unlink ${n0}
78
79	expect 0 create ${n0} 0644
80	expect 0 chflags ${n0} UF_NOUNLINK
81	expect 0 chmod ${n0} 0600
82	expect 0600 stat ${n0} mode
83	supported lchmod && expect 0 lchmod ${n0} 0400
84	supported lchmod && expect 0400 stat ${n0} mode
85	expect 0 chflags ${n0} none
86	expect 0 unlink ${n0}
87
88	expect 0 create ${n0} 0644
89	expect 0 chflags ${n0} UF_APPEND
90	expect EPERM chmod ${n0} 0600
91	supported lchmod && expect EPERM lchmod ${n0} 0600
92	expect 0644 stat ${n0} mode
93	expect 0 chflags ${n0} none
94	expect 0 chmod ${n0} 0600
95	expect 0600 stat ${n0} mode
96	expect 0 unlink ${n0}
97	;;
98esac
99