1#!/bin/sh
2# $FreeBSD: head/tools/regression/pjdfstest/tests/link/13.t 211352 2010-08-15 21:24:17Z pjd $
3
4desc="link returns EPERM if the parent directory of the destination file has its immutable 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..49"
17	;;
18*)
19	quick_exit
20esac
21
22n0=`namegen`
23n1=`namegen`
24n2=`namegen`
25
26expect 0 mkdir ${n0} 0755
27
28expect 0 create ${n0}/${n1} 0644
29expect 1 stat ${n0}/${n1} nlink
30expect 0 link ${n0}/${n1} ${n0}/${n2}
31expect 2 stat ${n0}/${n1} nlink
32expect 0 unlink ${n0}/${n2}
33expect 1 stat ${n0}/${n1} nlink
34
35expect 0 chflags ${n0} SF_IMMUTABLE
36expect EPERM link ${n0}/${n1} ${n0}/${n2}
37expect 1 stat ${n0}/${n1} nlink
38expect 0 chflags ${n0} none
39expect 0 link ${n0}/${n1} ${n0}/${n2}
40expect 2 stat ${n0}/${n1} nlink
41expect 0 unlink ${n0}/${n2}
42expect 1 stat ${n0}/${n1} nlink
43
44expect 0 chflags ${n0} SF_NOUNLINK
45expect 0 link ${n0}/${n1} ${n0}/${n2}
46expect 2 stat ${n0}/${n1} nlink
47expect 0 chflags ${n0} none
48expect 0 unlink ${n0}/${n2}
49expect 1 stat ${n0}/${n1} nlink
50
51expect 0 chflags ${n0} SF_APPEND
52expect 0 link ${n0}/${n1} ${n0}/${n2}
53expect 2 stat ${n0}/${n1} nlink
54expect 0 chflags ${n0} none
55expect 0 unlink ${n0}/${n2}
56expect 1 stat ${n0}/${n1} nlink
57
58case "${os}:${fs}" in
59FreeBSD:UFS)
60	expect 0 chflags ${n0} UF_IMMUTABLE
61	expect EPERM link ${n0}/${n1} ${n0}/${n2}
62	expect 1 stat ${n0}/${n1} nlink
63	expect 0 chflags ${n0} none
64	expect 0 link ${n0}/${n1} ${n0}/${n2}
65	expect 2 stat ${n0}/${n1} nlink
66	expect 0 unlink ${n0}/${n2}
67	expect 1 stat ${n0}/${n1} nlink
68
69	expect 0 chflags ${n0} UF_NOUNLINK
70	expect 0 link ${n0}/${n1} ${n0}/${n2}
71	expect 2 stat ${n0}/${n1} nlink
72	expect 0 chflags ${n0} none
73	expect 0 unlink ${n0}/${n2}
74	expect 1 stat ${n0}/${n1} nlink
75
76	expect 0 chflags ${n0} UF_APPEND
77	expect 0 link ${n0}/${n1} ${n0}/${n2}
78	expect 2 stat ${n0}/${n1} nlink
79	expect 0 chflags ${n0} none
80	expect 0 unlink ${n0}/${n2}
81	expect 1 stat ${n0}/${n1} nlink
82	;;
83esac
84
85expect 0 unlink ${n0}/${n1}
86expect 0 rmdir ${n0}
87