5 Usage: dbcheck-links.sh PREFIX RELEASE
14 . `dirname $0`/subunit.sh
16 release_dir=`dirname $0`/../../source4/selftest/provisions/$RELEASE
19 if [ -x "$BINDIR/ldbadd" ]; then
20 ldbadd="$BINDIR/ldbadd"
24 if [ -x "$BINDIR/ldbmodify" ]; then
25 ldbmodify="$BINDIR/ldbmodify"
29 if [ -x "$BINDIR/ldbdel" ]; then
30 ldbdel="$BINDIR/ldbdel"
34 if [ -x "$BINDIR/ldbsearch" ]; then
35 ldbsearch="$BINDIR/ldbsearch"
39 if [ -x "$BINDIR/ldbrename" ]; then
40 ldbrename="$BINDIR/ldbrename"
44 if test -x $BINDIR/tdbrestore;
46 `dirname $0`/../../source4/selftest/provisions/undump.sh $release_dir $PREFIX_ABS/$RELEASE $BINDIR/tdbrestore
48 `dirname $0`/../../source4/selftest/provisions/undump.sh $release_dir $PREFIX_ABS/$RELEASE
53 tmpfile=$PREFIX_ABS/$RELEASE/expected-dbcheck-link-output.txt.tmp
54 tmpldif1=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp1
56 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb -s base -b '' | grep highestCommittedUSN > $tmpldif1
58 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --fix --yes > $tmpfile
59 if [ "$?" != "1" ]; then
62 diff $tmpfile $release_dir/expected-dbcheck-link-output.txt
63 if [ "$?" != "0" ]; then
67 tmpldif2=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp2
68 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb -s base -b '' | grep highestCommittedUSN > $tmpldif2
70 diff $tmpldif1 $tmpldif2
71 if [ "$?" != "0" ]; then
77 tmpldif1=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp1
79 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb -s base -b '' | grep highestCommittedUSN > $tmpldif1
81 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb
82 if [ "$?" != "0" ]; then
85 tmpldif2=$PREFIX_ABS/$RELEASE/expected-dbcheck-output2.txt.tmp2
86 TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb -s base -b '' | grep highestCommittedUSN > $tmpldif2
88 diff $tmpldif1 $tmpldif2
89 if [ "$?" != "0" ]; then
95 ldif=$release_dir/add-dangling-forwardlink-user.ldif
96 TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
97 if [ "$?" != "0" ]; then
101 ldif=$release_dir/add-initially-normal-link.ldif
102 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
103 if [ "$?" != "0" ]; then
108 ldif=$release_dir/delete-only-backlink.ldif
109 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif
110 if [ "$?" != "0" ]; then
115 add_dangling_backlink() {
116 ldif=$release_dir/add-dangling-backlink-user.ldif
117 TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
118 if [ "$?" != "0" ]; then
122 ldif=$release_dir/add-dangling-backlink.ldif
123 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif
124 if [ "$?" != "0" ]; then
129 add_two_more_users() {
130 ldif=$release_dir/add-two-more-users.ldif
131 TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
132 if [ "$?" != "0" ]; then
137 add_four_more_links() {
138 ldif=$release_dir/add-four-more-links.ldif
139 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
140 if [ "$?" != "0" ]; then
146 ldif=$release_dir/remove-one-more-link.ldif
147 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
148 if [ "$?" != "0" ]; then
154 ldif=$release_dir/remove-one-more-user.ldif
155 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
156 if [ "$?" != "0" ]; then
162 TZ=UTC $ldbrename -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb 'cn=user1,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp' 'cn=user1x,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp'
163 if [ "$?" != "0" ]; then
168 check_expected_after_links() {
169 tmpldif=$PREFIX_ABS/$RELEASE/expected-links-after-link-dbcheck.ldif.tmp
170 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
171 diff $tmpldif $release_dir/expected-links-after-link-dbcheck.ldif
172 if [ "$?" != "0" ]; then
177 check_expected_after_deleted_links() {
178 tmpldif=$PREFIX_ABS/$RELEASE/expected-deleted-links-after-link-dbcheck.ldif.tmp
179 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
180 diff $tmpldif $release_dir/expected-deleted-links-after-link-dbcheck.ldif
181 if [ "$?" != "0" ]; then
186 check_expected_after_objects() {
187 tmpldif=$PREFIX_ABS/$RELEASE/expected-objects-after-link-dbcheck.ldif.tmp
188 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
189 diff $tmpldif $release_dir/expected-objects-after-link-dbcheck.ldif
190 if [ "$?" != "0" ]; then
196 ldif=$release_dir/dangling-one-way-link.ldif
197 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
198 if [ "$?" != "0" ]; then
203 dangling_multi_valued() {
204 # multi1 - All 4 backlinks
205 # multi2 - Missing all 4 backlinks
206 # multi3 - Missing 2 backlinks
207 # Administrator - Has 2 too many backlinks
208 # multi5 - Has 2 backlinks but no forward links
209 ldif=$release_dir/add-dangling-multilink-users.ldif
210 TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
211 if [ "$?" != "0" ]; then
215 ldif=$release_dir/add-initially-normal-multilink.ldif
216 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif
217 if [ "$?" != "0" ]; then
221 ldif=$release_dir/delete-only-multi-backlink.ldif
222 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif
223 if [ "$?" != "0" ]; then
227 ldif=$release_dir/add-dangling-multi-backlink.ldif
228 TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif
229 if [ "$?" != "0" ]; then
233 $PYTHON $BINDIR/samba-tool dbcheck -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --fix --yes
234 if [ "$?" != "1" ]; then
239 dangling_multi_valued_check_missing() {
240 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`
241 if [ $WORDS -ne 4 ]; then
242 echo Got only $WORDS links for dangling-multi2
245 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`
246 if [ $WORDS -ne 4 ]; then
247 echo Got only $WORDS links for dangling-multi3
252 dangling_multi_valued_check_equal_or_too_many() {
253 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`
254 if [ $WORDS -ne 4 ]; then
255 echo Got $WORDS links for dangling-multi1
259 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`
261 if [ $WORDS -ne 0 ]; then
262 echo Got $WORDS links for dangling-multi5
266 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`
268 if [ $WORDS -ne 2 ]; then
269 echo Got $WORDS links for Administrator
275 if [ -d $release_dir ]; then
276 testit $RELEASE undump
277 testit "add_two_more_users" add_two_more_users
278 testit "add_four_more_links" add_four_more_links
279 testit "remove_one_link" remove_one_link
280 testit "remove_one_user" remove_one_user
281 testit "move_one_user" move_one_user
282 testit "add_dangling_link" add_dangling_link
283 testit "add_dangling_backlink" add_dangling_backlink
284 testit "dbcheck" dbcheck
285 testit "dbcheck_clean" dbcheck_clean
286 testit "check_expected_after_deleted_links" check_expected_after_deleted_links
287 testit "check_expected_after_links" check_expected_after_links
288 testit "check_expected_after_objects" check_expected_after_objects
289 testit "dangling_one_way" dangling_one_way
290 testit "dbcheck_clean" dbcheck_clean
291 testit "dangling_multi_valued" dangling_multi_valued
292 testit "dangling_multi_valued_check_missing" dangling_multi_valued_check_missing
293 testit "dangling_multi_valued_check_equal_or_too_many" dangling_multi_valued_check_equal_or_too_many
294 # Currently this cannot pass
295 testit "dangling_multi_valued_dbcheck" dbcheck_clean
297 subunit_start_test $RELEASE
298 subunit_skip_test $RELEASE <<EOF
302 subunit_start_test "tombstones_expunge"
303 subunit_skip_test "tombstones_expunge" <<EOF
308 if [ -d $PREFIX_ABS/${RELEASE} ]; then
309 rm -fr $PREFIX_ABS/${RELEASE}