Integrate parts of meta-intel-iot-security
[AGL/meta-agl.git] / meta-security / lib / oeqa / runtime / files / test_smack_udp_sockets.sh
1 #!/bin/sh
2 RC=0
3 test_file="/tmp/smack_socket_udp"
4 SMACK_PATH=`grep smack /proc/mounts | awk '{print $2}' `
5
6 udp_server=`which udp_server`
7 if [ -z $udp_server ]; then
8         if [ -f "/tmp/udp_server" ]; then
9                 udp_server="/tmp/udp_server"
10         else
11                 echo "udp_server binary not found"
12                 exit 1
13         fi
14 fi
15 udp_client=`which udp_client`
16 if [ -z $udp_client ]; then
17         if [ -f "/tmp/udp_client" ]; then
18                 udp_client="/tmp/udp_client"
19         else
20                 echo "udp_client binary not found"
21                 exit 1
22         fi
23 fi
24
25 # make sure no access is granted
26 #        12345678901234567890123456789012345678901234567890123456
27 echo -n "label1                  label2                  -----" > $SMACK_PATH/load
28
29 # checking access for sockets with different labels
30 $udp_server 50021 label2 2>$test_file &
31 server_pid=$!
32 sleep 1
33 $udp_client 50021 label1 2>$test_file &
34 client_pid=$!
35 wait $server_pid
36 server_rv=$?
37 wait $client_pid
38 client_rv=$?
39 if [ $server_rv -eq 0 ]; then
40         echo "Sockets with different labels should not communicate on udp"
41         exit 1
42 fi
43
44 # granting access between different labels
45 #        12345678901234567890123456789012345678901234567890123456
46 echo -n "label1                  label2                  rw---" > $SMACK_PATH/load
47 # checking access for sockets with different labels, but having a rule granting rw
48 $udp_server 50022 label2 2>$test_file &
49 server_pid=$!
50 sleep 1
51 $udp_client 50022 label1 2>$test_file &
52 client_pid=$!
53 wait $server_pid
54 server_rv=$?
55 wait $client_pid
56 client_rv=$?
57 if [ $server_rv -ne 0 -o $client_rv -ne 0 ]; then
58         echo "Sockets with different labels, but having rw access, should communicate on udp"
59         exit 1
60 fi
61
62 # checking access for sockets with the same label
63 $udp_server 50023 label1 &
64 server_pid=$!
65 sleep 1
66 $udp_client 50023 label1 2>$test_file &
67 client_pid=$!
68 wait $server_pid
69 server_rv=$?
70 wait $client_pid
71 client_rv=$?
72 if [ $server_rv -ne 0 -o $client_rv -ne 0 ]; then
73         echo "Sockets with same labels should communicate on udp"
74         exit 1
75 fi
76
77 # checking access on socket labeled star (*)
78 # should always be permitted
79 $udp_server 50024 \* 2>$test_file &
80 server_pid=$!
81 sleep 1
82 $udp_client 50024 label1 2>$test_file &
83 client_pid=$!
84 wait $server_pid
85 server_rv=$?
86 wait $client_pid
87 client_rv=$?
88 if [ $server_rv -ne 0 -o $client_rv -ne 0 ]; then
89         echo "Should have access on udp socket labeled star (*)"
90         exit 1
91 fi
92
93 # checking access from socket labeled star (*)
94 # all access from subject star should be denied
95 $udp_server 50025 label1 2>$test_file &
96 server_pid=$!
97 sleep 1
98 $udp_client 50025 \* 2>$test_file &
99 client_pid=$!
100 wait $server_pid
101 server_rv=$?
102 wait $client_pid
103 client_rv=$?
104 if [ $server_rv -eq 0 ]; then
105         echo "Socket labeled star should not have access to any udp socket"
106         exit 1
107 fi