1#!/bin/sh
2# $FreeBSD$
3
4desc="link returns EPERM if the source 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..27"
14	;;
15FreeBSD:UFS)
16	echo "1..48"
17	;;
18*)
19	quick_exit
20esac
21
22n0=`namegen`
23n1=`namegen`
24
25expect 0 create ${n0} 0644
26
27expect 1 stat ${n0} nlink
28expect 0 link ${n0} ${n1}
29expect 2 stat ${n0} nlink
30expect 0 unlink ${n1}
31expect 1 stat ${n0} nlink
32
33expect 0 chflags ${n0} SF_IMMUTABLE
34todo FreeBSD:ZFS "Creating a hard link to a file protected by SF_IMMUTABLE should return EPERM."
35expect EPERM link ${n0} ${n1}
36todo FreeBSD:ZFS "Creating a hard link to a file protected by SF_IMMUTABLE should return EPERM."
37expect 1 stat ${n0} nlink
38expect 0 chflags ${n0} none
39todo FreeBSD:ZFS "Creating a hard link to a file protected by SF_IMMUTABLE should return EPERM."
40expect 0 link ${n0} ${n1}
41expect 2 stat ${n0} nlink
42expect 0 unlink ${n1}
43expect 1 stat ${n0} nlink
44
45expect 0 chflags ${n0} SF_NOUNLINK
46expect 0 link ${n0} ${n1}
47expect 2 stat ${n0} nlink
48expect 0 chflags ${n0} none
49expect 0 unlink ${n1}
50expect 1 stat ${n0} nlink
51
52case "${os}:${fs}" in
53FreeBSD:ZFS)
54	expect 0 chflags ${n0} SF_APPEND
55	expect 0 link ${n0} ${n1}
56	expect 2 stat ${n0} nlink
57	expect 0 chflags ${n0} none
58	expect 0 unlink ${n1}
59	expect 1 stat ${n0} nlink
60	;;
61FreeBSD:UFS)
62	expect 0 chflags ${n0} SF_APPEND
63	expect EPERM link ${n0} ${n1}
64	expect 0 chflags ${n0} none
65	expect 0 link ${n0} ${n1}
66	expect 2 stat ${n0} nlink
67	expect 0 unlink ${n1}
68	expect 1 stat ${n0} nlink
69
70	expect 0 chflags ${n0} UF_IMMUTABLE
71	expect EPERM link ${n0} ${n1}
72	expect 0 chflags ${n0} none
73	expect 0 link ${n0} ${n1}
74	expect 2 stat ${n0} nlink
75	expect 0 unlink ${n1}
76	expect 1 stat ${n0} nlink
77
78	expect 0 chflags ${n0} UF_NOUNLINK
79	expect 0 link ${n0} ${n1}
80	expect 2 stat ${n0} nlink
81	expect 0 chflags ${n0} none
82	expect 0 unlink ${n1}
83	expect 1 stat ${n0} nlink
84
85	expect 0 chflags ${n0} UF_APPEND
86	expect EPERM link ${n0} ${n1}
87	expect 0 chflags ${n0} none
88	expect 0 link ${n0} ${n1}
89	expect 2 stat ${n0} nlink
90	expect 0 unlink ${n1}
91	expect 1 stat ${n0} nlink
92	;;
93esac
94
95expect 0 unlink ${n0}
96