summaryrefslogtreecommitdiff
path: root/keyutils-1.5.6/tests/keyctl/link/recursion/runtest.sh
blob: e6f5931733aa63fbdf5226dd18f62109ff40aed9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/bin/sh

. ../../../prepare.inc.sh
. ../../../toolbox.inc.sh


# ---- do the actual testing ----

result=PASS
echo "++++ BEGINNING TEST" >$OUTPUTFILE

# create a keyring and attach it to the session keyring
marker "CREATE KEYRING 1"
create_keyring "first" @s
expect_keyid keyringid
set_key_perm $keyringid 0x3f3f0000

# attempt to link a keyring to itself
marker "RECURSE 1"
link_key --fail $keyringid $keyringid
expect_error EDEADLK

# create a second keyring in the first
marker "CREATE KEYRING 2"
create_keyring "second" $keyringid
expect_keyid keyring2id
set_key_perm $keyring2id 0x3f3f0000

# attempt to link a keyring to its child keyring
marker "RECURSE 2"
link_key --fail $keyringid $keyring2id
expect_error EDEADLK

# create a third keyring in the second
marker "CREATE KEYRING 3"
create_keyring "third" $keyring2id
expect_keyid keyring3id
set_key_perm $keyring3id 0x3f3f0000

# attempt to link a keyring to its grandchild keyring
marker "RECURSE 3"
link_key --fail $keyringid $keyring3id
expect_error EDEADLK

# create a fourth keyring in the third
marker "CREATE KEYRING 4"
create_keyring "fourth" $keyring3id
expect_keyid keyring4id
set_key_perm $keyring4id 0x3f3f0000

# attempt to link a keyring to its great grandchild keyring
marker "RECURSE 4"
link_key --fail $keyringid $keyring4id
expect_error EDEADLK

# create a fifth keyring in the fourth
marker "CREATE KEYRING 5"
create_keyring "fifth" $keyring4id
expect_keyid keyring5id
set_key_perm $keyring5id 0x3f3f0000

# attempt to link a keyring to its great great grandchild keyring
marker "RECURSE 5"
link_key --fail $keyringid $keyring5id
expect_error EDEADLK

# create a sixth keyring in the fifth
marker "CREATE KEYRING 6"
create_keyring "sixth" $keyring5id
expect_keyid keyring6id
set_key_perm $keyring6id 0x3f3f0000

# attempt to link a keyring to its great great great grandchild keyring
marker "RECURSE 6"
link_key --fail $keyringid $keyring6id
expect_error EDEADLK

# create a seventh keyring in the sixth
marker "CREATE KEYRING 7"
create_keyring "seventh" $keyring6id
expect_keyid keyring7id
set_key_perm $keyring7id 0x3f3f0000

# attempt to link a keyring to its great great great great grandchild keyring
marker "RECURSE 7"
link_key --fail $keyringid $keyring7id
expect_error EDEADLK

# create an eigth keyring in the seventh
marker "CREATE KEYRING 8"
create_keyring "eighth" @s
expect_keyid keyring8id
set_key_perm $keyring8id 0x3f3f0000
link_key $keyring8id $keyring7id
unlink_key $keyring8is @s

# attempt to link a keyring to its great great great great great grandchild keyring
marker "RECURSE 8"
link_key --fail $keyringid $keyring8id
expect_error EDEADLK

# create a ninth keyring in the eighth
marker "CREATE KEYRING 9"
create_keyring "ninth" $keyring8id
expect_keyid keyring9id
set_key_perm $keyring9id 0x3f3f0000

# attempt to link a keyring to its great great great great great great grandchild keyring
marker "RECURSE 9"
link_key --fail $keyringid $keyring9id
expect_error ELOOP

# remove the first keyring we added
marker "UNLINK KEYRING"
unlink_key $keyringid @s

# create two stacks of keyrings
marker "CREATE KEYRING STACKS"
create_keyring "A1" @s
expect_keyid aroot
create_keyring "B1" @s
expect_keyid broot
a=$aroot
b=$broot

for ((i=2; i<=4; i++))
  do
  create_keyring "A$i" $a
  expect_keyid a
  create_keyring "B$i" $b
  expect_keyid b
done

# make sure we can't create a cycle by linking the two stacks together
marker "LINK A TO B"
link_key $aroot $b

marker "LINK B TO A"
link_key --fail $broot $a
expect_error EDEADLK

marker "UNLINK A FROM B"
unlink_key $aroot $b

marker "LINK B TO A"
link_key $broot $a

marker "LINK A TO B"
link_key --fail $aroot $b
expect_error EDEADLK

marker "UNLINK B FROM A"
unlink_key $broot $a

# extend the stacks
marker "EXTEND STACKS"
create_keyring "A5" $a
expect_keyid a
create_keyring "B5" $b
expect_keyid b

# make sure we can't hide a cycle by linking the two bigger stacks together
marker "CHECK MAXDEPTH A TO B"
link_key $aroot $b
link_key --fail $broot $a
expect_error ELOOP
unlink_key $aroot $b

marker "CHECK MAXDEPTH B TO A"
link_key $broot $a
link_key --fail $aroot $b
expect_error ELOOP
unlink_key $broot $a

# remove the two stacks
marker "UNLINK STACKS"
unlink_key $aroot @s
unlink_key $broot @s

echo "++++ FINISHED TEST: $result" >>$OUTPUTFILE

# --- then report the results in the database ---
toolbox_report_result $TEST $result