]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - tools/regression/pjdfstest/tests/rename/07.t
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / tools / regression / pjdfstest / tests / rename / 07.t
1 #!/bin/sh
2 # $FreeBSD$
3
4 desc="rename returns EPERM if the parent directory of the file pointed at by the 'from' argument has its immutable or append-only 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 SF_APPEND"
14         flags2="SF_NOUNLINK"
15         echo "1..128"
16         ;;
17 FreeBSD:UFS)
18         flags1="SF_IMMUTABLE SF_APPEND UF_IMMUTABLE UF_APPEND"
19         flags2="SF_NOUNLINK UF_NOUNLINK"
20         echo "1..212"
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} ${n0}/${n1}
34         for flag in ${flags1}; do
35                 expect 0 chflags ${n0} ${flag}
36                 expect ${flag} stat ${n0} flags
37                 [ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
38                 expect EPERM rename ${n0}/${n1} ${n2}
39                 [ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file protected by SF_APPEND should return EPERM."
40                 expect ENOENT rename ${n2} ${n0}/${n1}
41         done
42         expect 0 chflags ${n0} none
43         if [ "${type}" = "dir" ]; then
44                 expect 0 rmdir ${n0}/${n1}
45         else
46                 expect 0 unlink ${n0}/${n1}
47         fi
48 done
49
50 for type in regular dir fifo block char socket symlink; do
51         create_file ${type} ${n0}/${n1}
52         for flag in ${flags2}; do
53                 expect 0 chflags ${n0} ${flag}
54                 expect ${flag} stat ${n0} flags
55                 expect 0 rename ${n0}/${n1} ${n2}
56                 expect 0 rename ${n2} ${n0}/${n1}
57         done
58         expect 0 chflags ${n0} none
59         if [ "${type}" = "dir" ]; then
60                 expect 0 rmdir ${n0}/${n1}
61         else
62                 expect 0 unlink ${n0}/${n1}
63         fi
64 done
65
66 expect 0 rmdir ${n0}