]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - tools/regression/pjdfstest/tests/rename/08.t
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / tools / regression / pjdfstest / tests / rename / 08.t
1 #!/bin/sh
2 # $FreeBSD$
3
4 desc="rename returns EPERM if the parent directory of the file pointed at by the 'to' argument has its immutable flag set"
5
6 dir=`dirname $0`
7 . ${dir}/../misc.sh
8
9 require chflags
10
11 case "${os}:${fs}" in
12 FreeBSD:ZFS)
13         flags1="SF_IMMUTABLE"
14         flags2="SF_NOUNLINK SF_APPEND"
15         echo "1..128"
16         ;;
17 FreeBSD:UFS)
18         flags1="SF_IMMUTABLE UF_IMMUTABLE"
19         flags2="SF_NOUNLINK SF_APPEND UF_NOUNLINK UF_APPEND"
20         echo "1..219"
21         ;;
22 *)
23         quick_exit
24 esac
25
26 n0=`namegen`
27 n1=`namegen`
28 n2=`namegen`
29
30 expect 0 mkdir ${n0} 0755
31
32 for type in regular dir fifo block char socket symlink; do
33         create_file ${type} ${n1}
34         for flag in ${flags1}; do
35                 expect 0 chflags ${n0} ${flag}
36                 expect ${flag} stat ${n0} flags
37                 expect EPERM rename ${n1} ${n0}/${n2}
38         done
39         expect 0 chflags ${n0} none
40         if [ "${type}" = "dir" ]; then
41                 expect 0 rmdir ${n1}
42         else
43                 expect 0 unlink ${n1}
44         fi
45 done
46
47 for type in regular dir fifo block char socket symlink; do
48         create_file ${type} ${n1}
49         for flag in ${flags2}; do
50                 expect 0 chflags ${n0} ${flag}
51                 expect ${flag} stat ${n0} flags
52                 expect 0 rename ${n1} ${n0}/${n2}
53                 expect 0 chflags ${n0} none
54                 expect 0 rename ${n0}/${n2} ${n1}
55         done
56         if [ "${type}" = "dir" ]; then
57                 expect 0 rmdir ${n1}
58         else
59                 expect 0 unlink ${n1}
60         fi
61 done
62
63 expect 0 rmdir ${n0}