ctdb-failover: Split statd_callout add-client/del-client
[Samba.git] / testprogs / blackbox / dbcheck-links.sh
blob63ad8dbce44f5b440bba57957daf0ae007e78322
1 #!/bin/sh
3 if [ $# -lt 1 ]; then
4 cat <<EOF
5 Usage: dbcheck-links.sh PREFIX RELEASE
6 EOF
7 exit 1
8 fi
10 PREFIX_ABS="$1"
11 RELEASE="$2"
12 shift 2
14 . $(dirname $0)/subunit.sh
16 . $(dirname $0)/common_test_fns.inc
17 . $(dirname $0)/common-links.sh
19 failed=0
21 if [ ! -x $samba_undump ] || [ ! -d $release_dir ]; then
22 subunit_start_test $RELEASE
23 subunit_skip_test $RELEASE <<EOF
24 no test provision
25 EOF
27 subunit_start_test "tombstones_expunge"
28 subunit_skip_test "tombstones_expunge" <<EOF
29 no test provision
30 EOF
32 exit 0
35 dbcheck()
37 tmpfile=$PREFIX_ABS/$RELEASE/expected-dbcheck-link-output${1}.txt.tmp
38 tmpldif1=$PREFIX_ABS/$RELEASE/expected-dbcheck-output${1}2.txt.tmp1
40 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --scope=base -b '' | grep highestCommittedUSN >$tmpldif1
42 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $3 --fix --yes >$tmpfile
43 if [ "$?" != "$2" ]; then
44 return 1
46 sort $tmpfile | grep -v "^INFO:" >$tmpfile.sorted
47 sort $release_dir/expected-dbcheck-link-output${1}.txt >$tmpfile.expected
48 diff -u $tmpfile.sorted $tmpfile.expected
49 if [ "$?" != "0" ]; then
50 return 1
53 tmpldif2=$PREFIX_ABS/$RELEASE/expected-dbcheck-output${1}2.txt.tmp2
54 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --scope=base -b '' | grep highestCommittedUSN >$tmpldif2
56 diff -u $tmpldif1 $tmpldif2
57 if [ "$?" != "0" ]; then
58 return 1
62 dbcheck_acl_reset()
64 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --cross-ncs --fix --yes --attrs=nTSecurityDescriptor
67 dbcheck_acl_clean()
69 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --cross-ncs --attrs=nTSecurityDescriptor
72 dbcheck_dangling()
74 dbcheck "" "1" "--selftest-check-expired-tombstones"
75 return $?
78 dbcheck_one_way()
80 dbcheck "_one_way" "0" "CN=Configuration,DC=release-4-5-0-pre1,DC=samba,DC=corp --selftest-check-expired-tombstones"
81 return $?
84 dbcheck_clean()
86 tmpldif1=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp1
88 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --scope=base -b '' | grep highestCommittedUSN >$tmpldif1
90 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb
91 if [ "$?" != "0" ]; then
92 return 1
94 tmpldif2=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp2
95 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --scope=base -b '' | grep highestCommittedUSN >$tmpldif2
97 diff -u $tmpldif1 $tmpldif2
98 if [ "$?" != "0" ]; then
99 return 1
103 check_expected_after_links()
105 tmpldif=$PREFIX_ABS/$RELEASE/expected-links-after-link-dbcheck.ldif.tmp
106 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(cn=swimmers)(cn=leaders)(cn=helpers))' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --sorted member >$tmpldif
107 diff -u $tmpldif $release_dir/expected-links-after-link-dbcheck.ldif
108 if [ "$?" != "0" ]; then
109 return 1
113 check_expected_after_deleted_links()
115 tmpldif=$PREFIX_ABS/$RELEASE/expected-deleted-links-after-link-dbcheck.ldif.tmp
116 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(cn=swimmers)(cn=leaders)(cn=helpers))' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted member >$tmpldif
117 diff -u $tmpldif $release_dir/expected-deleted-links-after-link-dbcheck.ldif
118 if [ "$?" != "0" ]; then
119 return 1
123 check_expected_after_objects()
125 tmpldif=$PREFIX_ABS/$RELEASE/expected-objects-after-link-dbcheck.ldif.tmp
126 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(samaccountname=fred)(samaccountname=ddg)(samaccountname=usg)(samaccountname=user1)(samaccountname=user1x)(samaccountname=user2))' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted samAccountName | grep sAMAccountName >$tmpldif
127 diff -u $tmpldif $release_dir/expected-objects-after-link-dbcheck.ldif
128 if [ "$?" != "0" ]; then
129 return 1
133 duplicate_member()
135 # We use an existing group so we have a stable GUID in the
136 # dbcheck output
137 LDIF1=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb -b 'CN=Enterprise Admins,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp' --scope=base --reveal --extended-dn member)
138 DN=$(echo "${LDIF1}" | grep '^dn: ')
139 MSG=$(echo "${LDIF1}" | grep -v '^dn: ' | grep -v '^#' | grep -v '^$')
140 ldif=$PREFIX_ABS/${RELEASE}/duplicate-member-multi.ldif
142 echo "${DN}"
143 echo "changetype: modify"
144 echo "replace: member"
145 echo "${MSG}"
146 echo "${MSG}" | sed -e 's!RMD_LOCAL_USN=[1-9][0-9]*!RMD_LOCAL_USN=0!'
147 } >$ldif
149 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif
150 if [ "$?" != "0" ]; then
151 return 1
155 dbcheck_duplicate_member()
157 dbcheck "_duplicate_member" "1" "--selftest-check-expired-tombstones"
158 return $?
161 check_expected_after_duplicate_links()
163 tmpldif=$PREFIX_ABS/$RELEASE/expected-duplicates-after-link-dbcheck.ldif.tmp
164 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(cn=administrator)(cn=enterprise admins))' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --sorted memberOf member >$tmpldif
165 diff -u $tmpldif $release_dir/expected-duplicates-after-link-dbcheck.ldif
166 if [ "$?" != "0" ]; then
167 return 1
171 missing_link_sid_corruption()
173 # Step1: add user "missingsidu1"
175 ldif=$PREFIX_ABS/${RELEASE}/missing_link_sid_corruption1.ldif
176 cat >$ldif <<EOF
177 dn: CN=missingsidu1,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
178 changetype: add
179 objectclass: user
180 samaccountname: missingsidu1
181 objectGUID: 0da8f25e-d110-11e8-80b7-3c970ec68461
182 objectSid: S-1-5-21-4177067393-1453636373-93818738-771
185 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
186 if [ "$?" != "0" ]; then
187 echo "ldbmodify returned:\n$out"
188 return 1
191 # Step2: add user "missingsidu2"
193 ldif=$PREFIX_ABS/${RELEASE}/missing_link_sid_corruption2.ldif
194 cat >$ldif <<EOF
195 dn: CN=missingsidu2,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
196 changetype: add
197 objectclass: user
198 samaccountname: missingsidu2
199 objectGUID: 66eb8f52-d110-11e8-ab9b-3c970ec68461
200 objectSid: S-1-5-21-4177067393-1453636373-93818738-772
203 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
204 if [ "$?" != "0" ]; then
205 echo "ldbmodify returned:\n$out"
206 return 1
209 # Step3: add group "missingsidg3" and add users as members
211 ldif=$PREFIX_ABS/${RELEASE}/missing_link_sid_corruption3.ldif
212 cat >$ldif <<EOF
213 dn: CN=missingsidg3,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
214 changetype: add
215 objectclass: group
216 samaccountname: missingsidg3
217 objectGUID: fd992424-d114-11e8-bb36-3c970ec68461
218 objectSid: S-1-5-21-4177067393-1453636373-93818738-773
219 member: CN=missingsidu1,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
220 member: CN=missingsidu2,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
223 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
224 if [ "$?" != "0" ]; then
225 echo "ldbmodify returned:\n$out"
226 return 1
229 # Step4: remove one user again, so that we have one deleted link
231 ldif=$PREFIX_ABS/${RELEASE}/missing_link_sid_corruption4.ldif
232 cat >$ldif <<EOF
233 dn: CN=missingsidg3,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
234 changetype: modify
235 delete: member
236 member: CN=missingsidu1,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
239 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
240 if [ "$?" != "0" ]; then
241 echo "ldbmodify returned:\n$out"
242 return 1
246 # Step5: remove the SIDS from the links
248 LDIF1=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb -b 'CN=missingsidg3,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp' --scope=base --reveal --extended-dn --show-binary member)
249 DN=$(echo "${LDIF1}" | grep '^dn: ')
250 MSG=$(echo "${LDIF1}" | grep -v '^dn: ' | grep -v '^#' | grep -v '^$')
251 ldif=$PREFIX_ABS/${RELEASE}/missing_link_sid_corruption5.ldif
253 echo "${DN}"
254 echo "changetype: modify"
255 echo "replace: member"
256 #echo "${MSG}"
257 echo "${MSG}" | sed \
258 -e 's!<SID=S-1-5-21-4177067393-1453636373-93818738-771>;!!g' \
259 -e 's!<SID=S-1-5-21-4177067393-1453636373-93818738-772>;!!g' \
260 -e 's!RMD_ADDTIME=[1-9][0-9]*!RMD_ADDTIME=123456789000000000!g' \
261 -e 's!RMD_CHANGETIME=[1-9][0-9]*!RMD_CHANGETIME=123456789000000000!g' |
263 } >$ldif
265 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
266 if [ "$?" != "0" ]; then
267 echo "ldbmodify returned:\n$out"
268 return 1
271 return 0
274 dbcheck_missing_link_sid_corruption()
276 dbcheck "-missing-link-sid-corruption" "1" "--selftest-check-expired-tombstones"
277 return $?
280 add_lost_deleted_user1()
282 ldif=$PREFIX_ABS/${RELEASE}/add_lost_deleted_user1.ldif
283 cat >$ldif <<EOF
284 dn: CN=fred\0ADEL:2301a64c-1234-5678-851e-12d4a711cfb4,OU=removed,DC=release-4-5-0-pre1,DC=samba,DC=corp
285 objectClass: top
286 objectClass: person
287 objectClass: organizationalPerson
288 objectClass: user
289 instanceType: 4
290 whenCreated: 20160629043638.0Z
291 uSNCreated: 3740
292 objectGUID: 2301a64c-1234-5678-851e-12d4a711cfb4
293 objectSid: S-1-5-21-4177067393-1453636373-93818738-1011
294 sAMAccountName: fred
295 userAccountControl: 512
296 isDeleted: TRUE
297 lastKnownParent: <GUID=f28216e9-1234-5678-8b2d-6bb229563b62>;OU=removed,DC=rel
298 ease-4-5-0-pre1,DC=samba,DC=corp
299 isRecycled: TRUE
300 cn:: ZnJlZApERUw6MjMwMWE2NGMtMTIzNC01Njc4LTg1MWUtMTJkNGE3MTFjZmI0
301 name:: ZnJlZApERUw6MjMwMWE2NGMtMTIzNC01Njc4LTg1MWUtMTJkNGE3MTFjZmI0
302 replPropertyMetaData:: AQAAAAAAAAAXAAAAAAAAAAAAAAABAAAAVuGDDQMAAACjlkROuH+XT4o
303 z0jjbi14tnA4AAAAAAACcDgAAAAAAAAMAAAACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4A
304 AAAAAACiDgAAAAAAAAEAAgABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAA
305 AAAAAIAAgABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAADAAAgABAA
306 AAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAABkBAgABAAAAVuGDDQMAAAC
307 jlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAAEACQACAAAAV+GDDQMAAACjlkROuH+XT4oz
308 0jjbi14tog4AAAAAAACiDgAAAAAAAAgACQADAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tng4AA
309 AAAAACeDgAAAAAAABAACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAA
310 AAABkACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAFoACQABAAA
311 AVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAAAAF4ACQABAAAAVuGDDQMAAACj
312 lkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAAAAGAACQADAAAAV+GDDQMAAACjlkROuH+XT4oz0
313 jjbi14tog4AAAAAAACiDgAAAAAAAGIACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAA
314 AAAACiDgAAAAAAAH0ACQABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAA
315 AAJIACQABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAJ8ACQACAAAA
316 V+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAN0ACQABAAAAVuGDDQMAAACjl
317 kROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAC4BCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0j
318 jbi14tog4AAAAAAACiDgAAAAAAAJACCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAA
319 AAACiDgAAAAAAAA0DCQABAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAA
320 AA4DCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAAoICQABAAAAV
321 +GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAA==
322 whenChanged: 20160629043639.0Z
323 uSNChanged: 3746
324 nTSecurityDescriptor:: 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
362 GAC9AQ8AAQIAAAAAAAUgAAAAIAIAAA==
365 out=$(TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
366 if [ "$?" != "0" ]; then
367 echo "ldbadd returned:\n$out"
368 return 1
371 return 0
374 dbcheck_lost_deleted_user1()
376 dbcheck "-lost-deleted-user1" "1" "--selftest-check-expired-tombstones"
377 return $?
380 remove_lost_deleted_user1()
382 out=$(TZ=UTC $ldbdel -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb "<GUID=2301a64c-1234-5678-851e-12d4a711cfb4>" --show-recycled --relax)
383 if [ "$?" != "0" ]; then
384 echo "ldbdel returned:\n$out"
385 return 1
388 return 0
391 add_lost_deleted_user2()
393 ldif=$PREFIX_ABS/${RELEASE}/add_lost_deleted_user2.ldif
394 cat >$ldif <<EOF
395 dn: CN=fred\0ADEL:2301a64c-8765-4321-851e-12d4a711cfb4,CN=LostAndFound,DC=release-4-5-0-pre1,DC=samba,DC=corp
396 objectClass: top
397 objectClass: person
398 objectClass: organizationalPerson
399 objectClass: user
400 instanceType: 4
401 whenCreated: 20160629043638.0Z
402 uSNCreated: 3740
403 objectGUID: 2301a64c-8765-4321-851e-12d4a711cfb4
404 objectSid: S-1-5-21-4177067393-1453636373-93818738-1001
405 sAMAccountName: fred
406 userAccountControl: 512
407 isDeleted: TRUE
408 lastKnownParent: OU=removed,DC=release-4-5-0-pre1,DC=samba,DC=corp
409 isRecycled: TRUE
410 cn:: ZnJlZApERUw6MjMwMWE2NGMtODc2NS00MzIxLTg1MWUtMTJkNGE3MTFjZmI0
411 name:: ZnJlZApERUw6MjMwMWE2NGMtODc2NS00MzIxLTg1MWUtMTJkNGE3MTFjZmI0
412 replPropertyMetaData:: AQAAAAAAAAAXAAAAAAAAAAAAAAABAAAAVuGDDQMAAACjlkROuH+XT4o
413 z0jjbi14tnA4AAAAAAACcDgAAAAAAAAMAAAACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4A
414 AAAAAACiDgAAAAAAAAEAAgABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAA
415 AAAAAIAAgABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAADAAAgABAA
416 AAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAABkBAgABAAAAVuGDDQMAAAC
417 jlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAAEACQAEAAAAePOWEgMAAACjlkROuH+XT4oz
418 0jjbi14tvA4AAAAAAAC8DgAAAAAAAAgACQADAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tng4AA
419 AAAAACeDgAAAAAAABAACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAA
420 AAABkACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAFoACQABAAA
421 AVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAAAAF4ACQABAAAAVuGDDQMAAACj
422 lkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAAAAGAACQADAAAAV+GDDQMAAACjlkROuH+XT4oz0
423 jjbi14tog4AAAAAAACiDgAAAAAAAGIACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAA
424 AAAACiDgAAAAAAAH0ACQABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAA
425 AAJIACQABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAJ8ACQACAAAA
426 V+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAN0ACQABAAAAVuGDDQMAAACjl
427 kROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAC4BCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0j
428 jbi14tog4AAAAAAACiDgAAAAAAAJACCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAA
429 AAACiDgAAAAAAAA0DCQADAAAAePOWEgMAAACjlkROuH+XT4oz0jjbi14tvQ4AAAAAAAC9DgAAAAAA
430 AA4DCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAAoICQABAAAAV
431 +GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAA==
432 whenChanged: 20160629043639.0Z
433 uSNChanged: 3746
434 nTSecurityDescriptor:: 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
472 GAC9AQ8AAQIAAAAAAAUgAAAAIAIAAA==
475 out=$(TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
476 if [ "$?" != "0" ]; then
477 echo "ldbadd returned:\n$out"
478 return 1
481 return 0
484 dbcheck_lost_deleted_user2()
486 dbcheck "-lost-deleted-user2" "1" "--selftest-check-expired-tombstones"
487 return $?
490 add_lost_deleted_user3()
492 ldif=$PREFIX_ABS/${RELEASE}/add_lost_deleted_user3.ldif
493 cat >$ldif <<EOF
494 dn: CN=fred\0ADEL:2301a64c-1122-5566-851e-12d4a711cfb4,OU=removed,DC=release-4-5-0-pre1,DC=samba,DC=corp
495 objectClass: top
496 objectClass: person
497 objectClass: organizationalPerson
498 objectClass: user
499 instanceType: 4
500 whenCreated: 20160629043638.0Z
501 uSNCreated: 3740
502 objectGUID: 2301a64c-1122-5566-851e-12d4a711cfb4
503 objectSid: S-1-5-21-4177067393-1453636373-93818738-1010
504 sAMAccountName: fred
505 userAccountControl: 512
506 isDeleted: TRUE
507 lastKnownParent: <GUID=f28216e9-1234-5678-8b2d-6bb229563b62>;OU=removed,DC=rel
508 ease-4-5-0-pre1,DC=samba,DC=corp
509 isRecycled: TRUE
510 cn:: ZnJlZApERUw6MjMwMWE2NGMtMTEyMi01NTY2LTg1MWUtMTJkNGE3MTFjZmI0
511 name:: ZnJlZApERUw6MjMwMWE2NGMtMTEyMi01NTY2LTg1MWUtMTJkNGE3MTFjZmI0
512 replPropertyMetaData:: AQAAAAAAAAAXAAAAAAAAAAAAAAABAAAAVuGDDQMAAACjlkROuH+XT4o
513 z0jjbi14tnA4AAAAAAACcDgAAAAAAAAMAAAACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4A
514 AAAAAACiDgAAAAAAAAEAAgABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAA
515 AAAAAIAAgABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAADAAAgABAA
516 AAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAABkBAgABAAAAVuGDDQMAAAC
517 jlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAAEACQACAAAAV+GDDQMAAACjlkROuH+XT4oz
518 0jjbi14tog4AAAAAAACiDgAAAAAAAAgACQADAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tng4AA
519 AAAAACeDgAAAAAAABAACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAA
520 AAABkACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAFoACQABAAA
521 AVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAAAAF4ACQABAAAAVuGDDQMAAACj
522 lkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAAAAGAACQADAAAAV+GDDQMAAACjlkROuH+XT4oz0
523 jjbi14tog4AAAAAAACiDgAAAAAAAGIACQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAA
524 AAAACiDgAAAAAAAH0ACQABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnQ4AAAAAAACdDgAAAAA
525 AAJIACQABAAAAVuGDDQMAAACjlkROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAJ8ACQACAAAA
526 V+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAN0ACQABAAAAVuGDDQMAAACjl
527 kROuH+XT4oz0jjbi14tnA4AAAAAAACcDgAAAAAAAC4BCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0j
528 jbi14tog4AAAAAAACiDgAAAAAAAJACCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAA
529 AAACiDgAAAAAAAA0DCQABAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAA
530 AA4DCQACAAAAV+GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAAoICQABAAAAV
531 +GDDQMAAACjlkROuH+XT4oz0jjbi14tog4AAAAAAACiDgAAAAAAAA==
532 whenChanged: 20160629043639.0Z
533 uSNChanged: 3746
534 nTSecurityDescriptor:: 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
572 GAC9AQ8AAQIAAAAAAAUgAAAAIAIAAA==
575 out=$(TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
576 if [ "$?" != "0" ]; then
577 echo "ldbadd returned:\n$out"
578 return 1
581 return 0
584 dbcheck_lost_deleted_user3()
586 # here we don't pass --selftest-check-expired-tombstones
587 # as we want to test the default
588 dbcheck "-lost-deleted-user3" "0" ""
589 return $?
592 remove_lost_deleted_user3()
594 out=$(TZ=UTC $ldbdel -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb "<GUID=2301a64c-1122-5566-851e-12d4a711cfb4>" --show-recycled --relax)
595 if [ "$?" != "0" ]; then
596 echo "ldbdel returned:\n$out"
597 return 1
600 return 0
603 forward_link_corruption()
606 # Step1: add a duplicate forward link from
607 # "CN=Enterprise Admins" to "CN=Administrator"
609 LDIF1=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb -b 'CN=Enterprise Admins,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp' --scope=base --reveal --extended-dn member)
610 DN=$(echo "${LDIF1}" | grep '^dn: ')
611 MSG=$(echo "${LDIF1}" | grep -v '^dn: ' | grep -v '^#' | grep -v '^$')
612 ldif=$PREFIX_ABS/${RELEASE}/forward_link_corruption1.ldif
614 echo "${DN}"
615 echo "changetype: modify"
616 echo "replace: member"
617 echo "${MSG}"
618 echo "${MSG}" | sed -e 's!RMD_LOCAL_USN=[1-9][0-9]*!RMD_LOCAL_USN=0!'
619 } >$ldif
621 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
622 if [ "$?" != "0" ]; then
623 echo "ldbmodify returned:\n$out"
624 return 1
628 # Step2: add user "dangling"
630 ldif=$PREFIX_ABS/${RELEASE}/forward_link_corruption2.ldif
631 cat >$ldif <<EOF
632 dn: CN=dangling,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
633 changetype: add
634 objectclass: user
635 samaccountname: dangling
636 objectGUID: fd8a04ac-cea0-4921-b1a6-c173e1155c22
639 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
640 if [ "$?" != "0" ]; then
641 echo "ldbmodify returned:\n$out"
642 return 1
646 # Step3: add a dangling backlink from
647 # "CN=dangling" to "CN=Enterprise Admins"
649 ldif=$PREFIX_ABS/${RELEASE}/forward_link_corruption3.ldif
651 echo "dn: CN=dangling,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
652 echo "changetype: modify"
653 echo "add: memberOf"
654 echo "memberOf: <GUID=304ad703-468b-465e-9787-470b3dfd7d75>;<SID=S-1-5-21-4177067393-1453636373-93818738-519>;CN=Enterprise Admins,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
655 } >$ldif
657 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
658 if [ "$?" != "0" ]; then
659 echo "ldbmodify returned:\n$out"
660 return 1
664 dbcheck_forward_link_corruption()
666 dbcheck "-forward-link-corruption" "1" "--selftest-check-expired-tombstones"
667 return $?
670 check_expected_after_dbcheck_forward_link_corruption()
672 tmpldif=$PREFIX_ABS/$RELEASE/expected-after-dbcheck-forward-link-corruption.ldif.tmp
673 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(cn=dangling)(cn=enterprise admins))' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --sorted memberOf member >$tmpldif
674 diff -u $tmpldif $release_dir/expected-after-dbcheck-forward-link-corruption.ldif
675 if [ "$?" != "0" ]; then
676 return 1
680 oneway_link_corruption()
683 # Step1: add OU "dangling-ou"
685 ldif=$PREFIX_ABS/${RELEASE}/oneway_link_corruption.ldif
686 cat >$ldif <<EOF
687 dn: OU=dangling-ou,DC=release-4-5-0-pre1,DC=samba,DC=corp
688 changetype: add
689 objectclass: organizationalUnit
690 objectGUID: 20600e7c-92bb-492e-9552-f3ed7f8a2cad
693 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
694 if [ "$?" != "0" ]; then
695 echo "ldbmodify returned:\n$out"
696 return 1
700 # Step2: add msExchConfigurationContainer "dangling-msexch"
702 ldif=$PREFIX_ABS/${RELEASE}/oneway_link_corruption2.ldif
703 cat >$ldif <<EOF
704 dn: OU=dangling-from,DC=release-4-5-0-pre1,DC=samba,DC=corp
705 changetype: add
706 objectclass: organizationalUnit
707 seeAlso: OU=dangling-ou,DC=release-4-5-0-pre1,DC=samba,DC=corp
710 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif)
711 if [ "$?" != "0" ]; then
712 echo "ldbmodify returned:\n$out"
713 return 1
717 # Step3: rename dangling-ou to dangling-ou2
719 # Because this is a one-way link we don't fix it at runtime
721 out=$(TZ=UTC $ldbrename -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb OU=dangling-ou,DC=release-4-5-0-pre1,DC=samba,DC=corp OU=dangling-ou2,DC=release-4-5-0-pre1,DC=samba,DC=corp)
722 if [ "$?" != "0" ]; then
723 echo "ldbmodify returned:\n$out"
724 return 1
728 dbcheck_oneway_link_corruption()
730 dbcheck "-oneway-link-corruption" "0" "--selftest-check-expired-tombstones"
731 return $?
734 check_expected_after_dbcheck_oneway_link_corruption()
736 tmpldif=$PREFIX_ABS/$RELEASE/expected-after-dbcheck-oneway-link-corruption.ldif.tmp
737 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(ou=dangling-ou)(ou=dangling-ou2)(ou=dangling-from))' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --sorted seeAlso >$tmpldif
738 diff -u $tmpldif $release_dir/expected-after-dbcheck-oneway-link-corruption.ldif
739 if [ "$?" != "0" ]; then
740 return 1
744 dbcheck_dangling_multi_valued()
747 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --selftest-check-expired-tombstones --fix --yes
748 if [ "$?" != "1" ]; then
749 return 1
753 dangling_multi_valued_check_missing()
755 WORDS=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi2)' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l)
756 if [ $WORDS -ne 4 ]; then
757 echo Got only $WORDS links for dangling-multi2
758 return 1
760 WORDS=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi3)' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l)
761 if [ $WORDS -ne 4 ]; then
762 echo Got only $WORDS links for dangling-multi3
763 return 1
767 dangling_multi_valued_check_equal_or_too_many()
769 WORDS=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi1)' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l)
770 if [ $WORDS -ne 4 ]; then
771 echo Got $WORDS links for dangling-multi1
772 return 1
775 WORDS=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi5)' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l)
777 if [ $WORDS -ne 0 ]; then
778 echo Got $WORDS links for dangling-multi5
779 return 1
782 WORDS=$(TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=Administrator)' --scope=sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l)
784 if [ $WORDS -ne 2 ]; then
785 echo Got $WORDS links for Administrator
786 return 1
790 dangling_link_does_not_prevent_delete()
794 # Step1: add user "dangling"
796 ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished1.ldif
797 dn='CN=dangling-for-vanish,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp'
798 cat >$ldif <<EOF
799 dn: $dn
800 changetype: add
801 objectclass: user
802 samaccountname: dangling-v
803 objectGUID: fd8a04ac-cea0-4921-b1a6-c173e1155c23
806 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
807 if [ "$?" != "0" ]; then
808 echo "ldbmodify returned:\n$out"
809 return 1
813 # Step2: add a dangling backlink from
814 # "CN=dangling-for-vanish" to "CN=Enterprise Admins"
816 ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished2.ldif
818 echo "dn: $dn"
819 echo "changetype: modify"
820 echo "add: memberOf"
821 echo "memberOf: <GUID=304ad703-468b-465e-9787-470b3dfd7d75>;<SID=S-1-5-21-4177067393-1453636373-93818738-519>;CN=Enterprise Admins,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
822 } >$ldif
824 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
825 if [ "$?" != "0" ]; then
826 echo "ldbmodify returned:\n$out"
827 return 1
830 out=$(TZ=UTC $ldbdel -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb "$dn")
831 if [ "$?" != "0" ]; then
832 echo "ldbdel returned:\n$out"
833 return 1
837 dangling_link_to_unknown_does_not_prevent_delete()
841 # Step1: add user "dangling"
843 ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished1.ldif
844 dn='CN=dangling-for-vanish,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp'
845 cat >$ldif <<EOF
846 dn: $dn
847 changetype: add
848 objectclass: user
849 samaccountname: dangling-v
850 objectGUID: a4090081-ac2a-410c-8924-b255375160e8
853 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
854 if [ "$?" != "0" ]; then
855 echo "ldbmodify returned:\n$out"
856 return 1
860 # Step2: add a dangling backlink from
861 # "CN=dangling-for-vanish" to "CN=NOT Enterprise Admins"
863 ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished2.ldif
865 echo "dn: $dn"
866 echo "changetype: modify"
867 echo "add: memberOf"
868 echo "memberOf: <GUID=09a47bff-0227-44e1-a8e4-63f9e726515d>;<SID=S-1-5-21-4177067393-1453636373-93818738-588>;CN=NOT Enterprise Admins,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
869 } >$ldif
871 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
872 if [ "$?" != "0" ]; then
873 echo "ldbmodify returned:\n$out"
874 return 1
877 out=$(TZ=UTC $ldbdel -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb "$dn")
878 if [ "$?" != "0" ]; then
879 echo "ldbdel returned:\n$out"
880 return 1
884 dangling_link_to_known_and_unknown_does_not_prevent_delete()
888 # Step1: add user "dangling"
890 ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished1.ldif
891 dn='CN=dangling-for-vanish,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp'
892 cat >$ldif <<EOF
893 dn: $dn
894 changetype: add
895 objectclass: user
896 samaccountname: dangling-v
897 objectGUID: 2882ffb1-31c3-485e-a7fc-184dfafc32d4
900 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
901 if [ "$?" != "0" ]; then
902 echo "ldbmodify returned:\n$out"
903 return 1
907 # Step2: add a dangling backlink from
908 # "CN=dangling-for-vanish" to "CN=Enterprise Admins",
909 # "CN=dangling-for-vanish" to "CN=NOT Enterprise Admins" and
910 # back to ourselves
912 ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished2.ldif
914 echo "dn: $dn"
915 echo "changetype: modify"
916 echo "add: memberOf"
917 echo "memberOf: <GUID=304ad703-468b-465e-9787-470b3dfd7d75>;<SID=S-1-5-21-4177067393-1453636373-93818738-519>;CN=Enterprise Admins,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
918 echo "memberOf: <GUID=09a47bff-0227-44e1-a8e4-63f9e726515d>;<SID=S-1-5-21-4177067393-1453636373-93818738-588>;CN=NOT Enterprise Admins,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
919 echo "memberOf: <GUID=2882ffb1-31c3-485e-a7fc-184dfafc32d4>;CN=dangling-for-vanish,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
920 } >$ldif
922 out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif)
923 if [ "$?" != "0" ]; then
924 echo "ldbmodify returned:\n$out"
925 return 1
928 out=$(TZ=UTC $ldbdel -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb "$dn")
929 if [ "$?" != "0" ]; then
930 echo "ldbdel returned:\n$out"
931 return 1
935 remove_directory $PREFIX_ABS/${RELEASE}
937 testit $RELEASE undump || failed=$(expr $failed + 1)
938 testit_expect_failure "dbcheck_acl_reset" dbcheck_acl_reset || failed=$(expr $failed + 1)
939 testit "dbcheck_acl_clean" dbcheck_acl_clean || failed=$(expr $failed + 1)
940 testit "add_two_more_users" add_two_more_users || failed=$(expr $failed + 1)
941 testit "add_four_more_links" add_four_more_links || failed=$(expr $failed + 1)
942 testit "remove_one_link" remove_one_link || failed=$(expr $failed + 1)
943 testit "remove_one_user" remove_one_user || failed=$(expr $failed + 1)
944 testit "move_one_user" move_one_user || failed=$(expr $failed + 1)
945 testit "add_dangling_link" add_dangling_link || failed=$(expr $failed + 1)
946 testit "add_dangling_backlink" add_dangling_backlink || failed=$(expr $failed + 1)
947 testit "add_deleted_dangling_backlink" add_deleted_dangling_backlink || failed=$(expr $failed + 1)
948 testit "revive_links_on_deleted_group" revive_links_on_deleted_group || failed=$(expr $failed + 1)
949 testit "revive_backlink_on_deleted_group" revive_backlink_on_deleted_group || failed=$(expr $failed + 1)
950 testit "add_deleted_target_link" add_deleted_target_link || failed=$(expr $failed + 1)
951 testit "add_deleted_target_backlink" add_deleted_target_backlink || failed=$(expr $failed + 1)
952 testit "dbcheck_dangling" dbcheck_dangling || failed=$(expr $failed + 1)
953 testit "dbcheck_clean" dbcheck_clean || failed=$(expr $failed + 1)
954 testit "check_expected_after_deleted_links" check_expected_after_deleted_links || failed=$(expr $failed + 1)
955 testit "check_expected_after_links" check_expected_after_links || failed=$(expr $failed + 1)
956 testit "check_expected_after_objects" check_expected_after_objects || failed=$(expr $failed + 1)
957 testit "duplicate_member" duplicate_member || failed=$(expr $failed + 1)
958 testit "dbcheck_duplicate_member" dbcheck_duplicate_member || failed=$(expr $failed + 1)
959 testit "check_expected_after_duplicate_links" check_expected_after_duplicate_links || failed=$(expr $failed + 1)
960 testit "duplicate_clean" dbcheck_clean || failed=$(expr $failed + 1)
961 testit "forward_link_corruption" forward_link_corruption || failed=$(expr $failed + 1)
962 testit "dbcheck_forward_link_corruption" dbcheck_forward_link_corruption || failed=$(expr $failed + 1)
963 testit "check_expected_after_dbcheck_forward_link_corruption" check_expected_after_dbcheck_forward_link_corruption || failed=$(expr $failed + 1)
964 testit "forward_link_corruption_clean" dbcheck_clean || failed=$(expr $failed + 1)
965 testit "oneway_link_corruption" oneway_link_corruption || failed=$(expr $failed + 1)
966 testit "dbcheck_oneway_link_corruption" dbcheck_oneway_link_corruption || failed=$(expr $failed + 1)
967 testit "check_expected_after_dbcheck_oneway_link_corruption" check_expected_after_dbcheck_oneway_link_corruption || failed=$(expr $failed + 1)
968 testit "oneway_link_corruption_clean" dbcheck_clean || failed=$(expr $failed + 1)
969 testit "dangling_one_way_link" dangling_one_way_link || failed=$(expr $failed + 1)
970 testit "dbcheck_one_way" dbcheck_one_way || failed=$(expr $failed + 1)
971 testit "dbcheck_clean2" dbcheck_clean || failed=$(expr $failed + 1)
972 testit "missing_link_sid_corruption" missing_link_sid_corruption || failed=$(expr $failed + 1)
973 testit "dbcheck_missing_link_sid_corruption" dbcheck_missing_link_sid_corruption || failed=$(expr $failed + 1)
974 testit "missing_link_sid_clean" dbcheck_clean || failed=$(expr $failed + 1)
975 testit "add_lost_deleted_user1" add_lost_deleted_user1 || failed=$(expr $failed + 1)
976 testit "dbcheck_lost_deleted_user1" dbcheck_lost_deleted_user1 || failed=$(expr $failed + 1)
977 testit "lost_deleted_user1_clean_A" dbcheck_clean || failed=$(expr $failed + 1)
978 testit "remove_lost_deleted_user1" remove_lost_deleted_user1 || failed=$(expr $failed + 1)
979 testit "lost_deleted_user1_clean_B" dbcheck_clean || failed=$(expr $failed + 1)
980 testit "add_lost_deleted_user2" add_lost_deleted_user2 || failed=$(expr $failed + 1)
981 testit "dbcheck_lost_deleted_user2" dbcheck_lost_deleted_user2 || failed=$(expr $failed + 1)
982 testit "lost_deleted_user2_clean" dbcheck_clean || failed=$(expr $failed + 1)
983 testit "add_lost_deleted_user3" add_lost_deleted_user3 || failed=$(expr $failed + 1)
984 testit "dbcheck_lost_deleted_user3" dbcheck_lost_deleted_user3 || failed=$(expr $failed + 1)
985 testit "lost_deleted_user3_clean_A" dbcheck_clean || failed=$(expr $failed + 1)
986 testit "remove_lost_deleted_user3" remove_lost_deleted_user3 || failed=$(expr $failed + 1)
987 testit "lost_deleted_user3_clean_B" dbcheck_clean || failed=$(expr $failed + 1)
988 testit "dangling_one_way_dn" dangling_one_way_dn || failed=$(expr $failed + 1)
989 testit "deleted_one_way_dn" deleted_one_way_dn || failed=$(expr $failed + 1)
990 testit "dbcheck_clean3" dbcheck_clean || failed=$(expr $failed + 1)
991 testit "add_dangling_multi_valued" add_dangling_multi_valued || failed=$(expr $failed + 1)
992 testit "dbcheck_dangling_multi_valued" dbcheck_dangling_multi_valued || failed=$(expr $failed + 1)
993 testit "dangling_multi_valued_check_missing" dangling_multi_valued_check_missing || failed=$(expr $failed + 1)
994 testit "dangling_multi_valued_check_equal_or_too_many" dangling_multi_valued_check_equal_or_too_many || failed=$(expr $failed + 1)
995 # Currently this cannot pass
996 testit "dbcheck_dangling_multi_valued_clean" dbcheck_clean || failed=$(expr $failed + 1)
997 testit "dangling_link_does_not_prevent_delete" dangling_link_does_not_prevent_delete || failed=$(expr $failed + 1)
998 testit "dangling_link_to_unknown_does_not_prevent_delete" dangling_link_to_unknown_does_not_prevent_delete || failed=$(expr $failed + 1)
999 testit "dangling_link_to_known_and_unknown_does_not_prevent_delete" dangling_link_to_known_and_unknown_does_not_prevent_delete || failed=$(expr $failed + 1)
1001 remove_directory $PREFIX_ABS/${RELEASE}
1003 exit $failed