Improved the unsafe_symlink() code to not get fooled by extra '/' chars
[rsync/rsync.git] / testsuite / unsafe-byname.test
1 #! /bin/sh
2
3 # Copyright (C) 2002 by Martin Pool
4
5 # Call directly into unsafe_symlink and test its handling of various filenames
6
7 . "$suitedir/rsync.fns"
8
9 test_unsafe() {
10     # $1 is the target of a symlink
11     # $2 is the directory we're copying
12     # $3 is the expected outcome: "safe" if the link lies within $2,
13     # or "unsafe" otherwise
14
15     result=`"$TOOLDIR/t_unsafe" "$1" "$2"` || test_fail "Failed to check $1 $2"
16     if [ "$result" != "$3" ]
17     then
18         test_fail "t_unsafe $1 $2 returned \"$result\", expected \"$3\""
19     fi
20 }
21
22 test_unsafe file                        from                            safe
23 test_unsafe dir/file                    from                            safe
24 test_unsafe dir/./file                  from                            safe
25 test_unsafe dir/.                       from                            safe
26 test_unsafe dir/                        from                            safe
27
28 test_unsafe /etc/passwd                 from                            unsafe
29 test_unsafe //../etc/passwd             from                            unsafe
30 test_unsafe //./etc/passwd              from                            unsafe
31
32 test_unsafe ./foo                       from                            safe
33 test_unsafe ../foo                      from                            unsafe
34 test_unsafe ./../foo                    from                            unsafe
35 test_unsafe .//../foo                   from                            unsafe
36 test_unsafe ./../foo                    from/..                         unsafe
37 test_unsafe ../dest                     from/dir                        safe
38 test_unsafe ../../dest                  from//dir                       unsafe
39 test_unsafe ..//../dest                 from/dir                        unsafe
40
41 test_unsafe ..                          from/file                       safe
42 test_unsafe ../..                       from/file                       unsafe
43 test_unsafe ..//..                      from//file                      unsafe
44 test_unsafe dir/..                      from                            safe
45 test_unsafe dir/../..                   from                            unsafe
46 test_unsafe dir/..//..                  from                            unsafe
47
48 test_unsafe ''                          from                            unsafe
49
50 # Based on tests from unsafe-links by VladimĂ­r Michl
51 test_unsafe ../../unsafe/unsafefile     from/safe                       unsafe
52 test_unsafe ..//../unsafe/unsafefile    from/safe                       unsafe
53 test_unsafe ../files/file1              from/safe                       safe
54
55 test_unsafe ../../unsafe/unsafefile     safe                            unsafe
56 test_unsafe ../files/file1              safe                            unsafe
57
58 test_unsafe ../../unsafe/unsafefile     `pwd`/from/safe                 safe
59 test_unsafe ../files/file1              `pwd`/from/safe                 safe