5 Usage: dbcheck-links.sh PREFIX RELEASE
14 .
`dirname $0`/subunit.sh
16 .
`dirname $0`/common-links.sh
19 tmpfile
=$PREFIX_ABS/$RELEASE/expected-dbcheck-link-output
${1}.txt.tmp
20 tmpldif1
=$PREFIX_ABS/$RELEASE/expected-dbcheck-output
${1}2.txt.tmp1
22 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
-s base
-b '' |
grep highestCommittedUSN
> $tmpldif1
24 $PYTHON $BINDIR/samba-tool dbcheck
-H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
$3 --fix --yes > $tmpfile
25 if [ "$?" != "$2" ]; then
28 sort $tmpfile > $tmpfile.sorted
29 sort $release_dir/expected-dbcheck-link-output
${1}.txt
> $tmpfile.expected
30 diff -u $tmpfile.sorted
$tmpfile.expected
31 if [ "$?" != "0" ]; then
35 tmpldif2
=$PREFIX_ABS/$RELEASE/expected-dbcheck-output
${1}2.txt.tmp2
36 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
-s base
-b '' |
grep highestCommittedUSN
> $tmpldif2
38 diff -u $tmpldif1 $tmpldif2
39 if [ "$?" != "0" ]; then
50 dbcheck
"_one_way" "0" "CN=Configuration,DC=release-4-5-0-pre1,DC=samba,DC=corp"
55 tmpldif1
=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp1
57 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
-s base
-b '' |
grep highestCommittedUSN
> $tmpldif1
59 $PYTHON $BINDIR/samba-tool dbcheck
-H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
60 if [ "$?" != "0" ]; then
63 tmpldif2
=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp2
64 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
-s base
-b '' |
grep highestCommittedUSN
> $tmpldif2
66 diff $tmpldif1 $tmpldif2
67 if [ "$?" != "0" ]; then
72 check_expected_after_links
() {
73 tmpldif
=$PREFIX_ABS/$RELEASE/expected-links-after-link-dbcheck.ldif.tmp
74 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
'(|(cn=swimmers)(cn=leaders)(cn=helpers))' -s sub
-b DC
=release-4-5-0-pre1
,DC
=samba
,DC
=corp
--show-deleted --sorted member
> $tmpldif
75 diff $tmpldif $release_dir/expected-links-after-link-dbcheck.ldif
76 if [ "$?" != "0" ]; then
81 check_expected_after_deleted_links
() {
82 tmpldif
=$PREFIX_ABS/$RELEASE/expected-deleted-links-after-link-dbcheck.ldif.tmp
83 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
'(|(cn=swimmers)(cn=leaders)(cn=helpers))' -s sub
-b DC
=release-4-5-0-pre1
,DC
=samba
,DC
=corp
--show-deleted --reveal --sorted member
> $tmpldif
84 diff $tmpldif $release_dir/expected-deleted-links-after-link-dbcheck.ldif
85 if [ "$?" != "0" ]; then
90 check_expected_after_objects
() {
91 tmpldif
=$PREFIX_ABS/$RELEASE/expected-objects-after-link-dbcheck.ldif.tmp
92 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
'(|(samaccountname=fred)(samaccountname=ddg)(samaccountname=usg)(samaccountname=user1)(samaccountname=user1x)(samaccountname=user2))' -s sub
-b DC
=release-4-5-0-pre1
,DC
=samba
,DC
=corp
--show-deleted --reveal --sorted samAccountName |
grep sAMAccountName
> $tmpldif
93 diff $tmpldif $release_dir/expected-objects-after-link-dbcheck.ldif
94 if [ "$?" != "0" ]; then
100 # We use an exisiting group so we have a stable GUID in the
102 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' -s base
--reveal --extended-dn member
)
103 DN
=$
(echo "${LDIF1}" |
grep '^dn: ')
104 MSG
=$
(echo "${LDIF1}" |
grep -v '^dn: ' |
grep -v '^#' |
grep -v '^$')
105 ldif
=$PREFIX_ABS/${RELEASE}/duplicate-member-multi.ldif
108 echo "changetype: modify"
109 echo "replace: member"
111 echo "${MSG}" |
sed -e 's!RMD_LOCAL_USN=[1-9][0-9]*!RMD_LOCAL_USN=0!'
114 TZ
=UTC
$ldbmodify -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb.d
/DC
%3DRELEASE-4-5-0-PRE1
,DC
%3DSAMBA
,DC
%3DCORP.ldb
$ldif
115 if [ "$?" != "0" ]; then
120 dbcheck_duplicate_member
() {
121 dbcheck
"_duplicate_member" "1" ""
125 check_expected_after_duplicate_links
() {
126 tmpldif
=$PREFIX_ABS/$RELEASE/expected-duplicates-after-link-dbcheck.ldif.tmp
127 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
'(|(cn=administrator)(cn=enterprise admins))' -s sub
-b DC
=release-4-5-0-pre1
,DC
=samba
,DC
=corp
--show-deleted --sorted memberOf member
> $tmpldif
128 diff $tmpldif $release_dir/expected-duplicates-after-link-dbcheck.ldif
129 if [ "$?" != "0" ]; then
134 forward_link_corruption
() {
136 # Step1: add a duplicate forward link from
137 # "CN=Enterprise Admins" to "CN=Administrator"
139 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' -s base
--reveal --extended-dn member
)
140 DN
=$
(echo "${LDIF1}" |
grep '^dn: ')
141 MSG
=$
(echo "${LDIF1}" |
grep -v '^dn: ' |
grep -v '^#' |
grep -v '^$')
142 ldif
=$PREFIX_ABS/${RELEASE}/forward_link_corruption1.ldif
145 echo "changetype: modify"
146 echo "replace: member"
148 echo "${MSG}" |
sed -e 's!RMD_LOCAL_USN=[1-9][0-9]*!RMD_LOCAL_USN=0!'
151 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)
152 if [ "$?" != "0" ]; then
153 echo "ldbmodify returned:\n$out"
158 # Step2: add user "dangling"
160 ldif
=$PREFIX_ABS/${RELEASE}/forward_link_corruption2.ldif
162 dn: CN=dangling,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp
165 samaccountname: dangling
166 objectGUID: fd8a04ac-cea0-4921-b1a6-c173e1155c22
169 out
=$
(TZ
=UTC
$ldbmodify -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
--relax $ldif)
170 if [ "$?" != "0" ]; then
171 echo "ldbmodify returned:\n$out"
176 # Step3: add a dangling backlink from
177 # "CN=dangling" to "CN=Enterprise Admins"
179 ldif
=$PREFIX_ABS/${RELEASE}/forward_link_corruption3.ldif
181 echo "dn: CN=dangling,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
182 echo "changetype: modify"
184 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"
187 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)
188 if [ "$?" != "0" ]; then
189 echo "ldbmodify returned:\n$out"
194 dbcheck_forward_link_corruption
() {
195 dbcheck
"-forward-link-corruption" "1" ""
199 check_expected_after_dbcheck_forward_link_corruption
() {
200 tmpldif
=$PREFIX_ABS/$RELEASE/expected-after-dbcheck-forward-link-corruption.ldif.tmp
201 TZ
=UTC
$ldbsearch -H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
'(|(cn=dangling)(cn=enterprise admins))' -s sub
-b DC
=release-4-5-0-pre1
,DC
=samba
,DC
=corp
--show-deleted --sorted memberOf member
> $tmpldif
202 diff $tmpldif $release_dir/expected-after-dbcheck-forward-link-corruption.ldif
203 if [ "$?" != "0" ]; then
208 dbcheck_dangling_multi_valued
() {
210 $PYTHON $BINDIR/samba-tool dbcheck
-H tdb
://$PREFIX_ABS/${RELEASE}/private
/sam.ldb
--fix --yes
211 if [ "$?" != "1" ]; then
216 dangling_multi_valued_check_missing
() {
217 WORDS
=`TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi2)' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l`
218 if [ $WORDS -ne 4 ]; then
219 echo Got only
$WORDS links
for dangling-multi2
222 WORDS
=`TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi3)' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l`
223 if [ $WORDS -ne 4 ]; then
224 echo Got only
$WORDS links
for dangling-multi3
229 dangling_multi_valued_check_equal_or_too_many
() {
230 WORDS
=`TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi1)' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l`
231 if [ $WORDS -ne 4 ]; then
232 echo Got
$WORDS links
for dangling-multi1
236 WORDS
=`TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=dangling-multi5)' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l`
238 if [ $WORDS -ne 0 ]; then
239 echo Got
$WORDS links
for dangling-multi5
243 WORDS
=`TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(samaccountname=Administrator)' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted msDS-RevealedDSAs | grep msDS-RevealedDSAs | wc -l`
245 if [ $WORDS -ne 2 ]; then
246 echo Got
$WORDS links
for Administrator
252 if [ -d $release_dir ]; then
253 testit
$RELEASE undump
254 testit
"add_two_more_users" add_two_more_users
255 testit
"add_four_more_links" add_four_more_links
256 testit
"remove_one_link" remove_one_link
257 testit
"remove_one_user" remove_one_user
258 testit
"move_one_user" move_one_user
259 testit
"add_dangling_link" add_dangling_link
260 testit
"add_dangling_backlink" add_dangling_backlink
261 testit
"add_deleted_dangling_backlink" add_deleted_dangling_backlink
262 testit
"revive_links_on_deleted_group" revive_links_on_deleted_group
263 testit
"revive_backlink_on_deleted_group" revive_backlink_on_deleted_group
264 testit
"add_deleted_target_link" add_deleted_target_link
265 testit
"add_deleted_target_backlink" add_deleted_target_backlink
266 testit
"dbcheck_dangling" dbcheck_dangling
267 testit
"dbcheck_clean" dbcheck_clean
268 testit
"check_expected_after_deleted_links" check_expected_after_deleted_links
269 testit
"check_expected_after_links" check_expected_after_links
270 testit
"check_expected_after_objects" check_expected_after_objects
271 testit
"duplicate_member" duplicate_member
272 testit
"dbcheck_duplicate_member" dbcheck_duplicate_member
273 testit
"check_expected_after_duplicate_links" check_expected_after_duplicate_links
274 testit
"duplicate_clean" dbcheck_clean
275 testit
"forward_link_corruption" forward_link_corruption
276 testit
"dbcheck_forward_link_corruption" dbcheck_forward_link_corruption
277 testit
"check_expected_after_dbcheck_forward_link_corruption" check_expected_after_dbcheck_forward_link_corruption
278 testit
"forward_link_corruption_clean" dbcheck_clean
279 testit
"dangling_one_way_link" dangling_one_way_link
280 testit
"dbcheck_one_way" dbcheck_one_way
281 testit
"dbcheck_clean2" dbcheck_clean
282 testit
"dangling_one_way_dn" dangling_one_way_dn
283 testit
"deleted_one_way_dn" deleted_one_way_dn
284 testit
"dbcheck_clean3" dbcheck_clean
285 testit
"add_dangling_multi_valued" add_dangling_multi_valued
286 testit
"dbcheck_dangling_multi_valued" dbcheck_dangling_multi_valued
287 testit
"dangling_multi_valued_check_missing" dangling_multi_valued_check_missing
288 testit
"dangling_multi_valued_check_equal_or_too_many" dangling_multi_valued_check_equal_or_too_many
289 # Currently this cannot pass
290 testit
"dbcheck_dangling_multi_valued_clean" dbcheck_clean
292 subunit_start_test
$RELEASE
293 subunit_skip_test
$RELEASE <<EOF
297 subunit_start_test
"tombstones_expunge"
298 subunit_skip_test
"tombstones_expunge" <<EOF
303 if [ -d $PREFIX_ABS/${RELEASE} ]; then
304 rm -fr $PREFIX_ABS/${RELEASE}