Run shfmt as part of the reformat target.
[tinc] / test / integration / security.test
1 #!/bin/sh
2
3 # shellcheck disable=SC1090
4 . "$TESTLIB_PATH"
5
6 echo [STEP] Skip this test if tools are missing
7
8 command -v nc >/dev/null || exit "$EXIT_SKIP_TEST"
9 command -v timeout >/dev/null || exit "$EXIT_SKIP_TEST"
10
11 foo_port=30050
12
13 # usage: send_with_timeout "data to send" "data expected to receive"
14 send_with_timeout() {
15   data=$1
16   expected=$3
17
18   result=$(
19     (
20       sleep 6
21       printf "%s\n" "$data"
22     ) | timeout 10 nc localhost $foo_port
23   ) && exit 1
24
25   test $? = "$EXIT_TIMEOUT"
26
27   if [ -z "$expected" ]; then
28     test -z "$result"
29   else
30     echo "$result" | grep -q "^$expected"
31   fi
32 }
33
34 echo [STEP] Initialize two nodes
35
36 tinc foo <<EOF
37 init foo
38 set DeviceType dummy
39 set Port $foo_port
40 set Address localhost
41 set PingTimeout 3
42 set AutoConnect no
43 set Subnet 10.96.96.1
44 EOF
45
46 create_script foo subnet-up
47 start_tinc foo
48 wait_script foo subnet-up
49
50 echo "[STEP] No ID sent by responding node if we don't send an ID first, before the timeout"
51 send_with_timeout "0 bar 17.7" "" &
52 job1=$!
53
54 echo [STEP] ID sent if initiator sends first, but still tarpitted
55 send_with_timeout "0 bar 17.7" "0 foo 17.7" &
56 job2=$!
57
58 echo [STEP] No invalid IDs allowed
59 send_with_timeout "0 foo 17.7" "" &
60 job3=$!
61 send_with_timeout "0 baz 17.7" "" &
62 job4=$!
63
64 echo [STEP] No NULL METAKEYs allowed
65 data="0 foo 17.0\n1 0 672 0 0 834188619F4D943FD0F4B1336F428BD4AC06171FEABA66BD2356BC9593F0ECD643F0E4B748C670D7750DFDE75DC9F1D8F65AB1026F5ED2A176466FBA4167CC567A2085ABD070C1545B180BDA86020E275EA9335F509C57786F4ED2378EFFF331869B856DDE1C05C461E4EECAF0E2FB97AF77B7BC2AD1B34C12992E45F5D1254BBF0C3FB224ABB3E8859594A83B6CA393ED81ECAC9221CE6BC71A727BCAD87DD80FC0834B87BADB5CB8FD3F08BEF90115A8DF1923D7CD9529729F27E1B8ABD83C4CF8818AE10257162E0057A658E265610B71F9BA4B365A20C70578FAC65B51B91100392171BA12A440A5E93C4AA62E0C9B6FC9B68F953514AAA7831B4B2C31C4\n"
66 send_with_timeout "$data" "" & # Not even the ID should be sent when the first packet contains illegal data
67 job5=$!
68
69 for pid in $job1 $job2 $job3 $job4 $job5; do
70   wait $pid
71 done
72
73 tinc foo stop