VERSION: Bump version number up to 4.0.4.
[samba.git] / source4 / scripting / python / samba / tests / samba3sam.py
index 7353391519f9c615e69c163c818eb043a34a458e..9c017fb79c3f9c6d50fc05bab9d43022da2d3d0f 100644 (file)
@@ -1,21 +1,19 @@
-#!/usr/bin/env python
-
 # Unix SMB/CIFS implementation.
 # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2005-2008
 # Copyright (C) Martin Kuehl <mkhl@samba.org> 2006
 #
 # This is a Python port of the original in testprogs/ejs/samba3sam.js
-#   
+#
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
-#   
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-#   
+#
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
@@ -55,10 +53,10 @@ class MapBaseTestCase(TestCaseInTempDir):
                  "@TO": "sambaDomainName=TESTS," + s3.basedn})
 
         ldb.add({"dn": "@MODULES",
-                 "@LIST": "rootdse,paged_results,server_sort,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,samba3sid,partition"})
+                 "@LIST": "rootdse,paged_results,server_sort,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,samba3sid,show_deleted,partition"})
 
         ldb.add({"dn": "@PARTITION",
-            "partition": ["%s" % (s4.basedn_casefold), 
+            "partition": ["%s" % (s4.basedn_casefold),
                           "%s" % (s3.basedn_casefold)],
             "replicateEntries": ["@ATTRIBUTES", "@INDEXLIST"],
             "modules": "*:"})
@@ -81,7 +79,7 @@ class MapBaseTestCase(TestCaseInTempDir):
         tempdir = self.tempdir
 
         class Target:
-            """Simple helper class that contains data for a specific SAM 
+            """Simple helper class that contains data for a specific SAM
             connection."""
 
             def __init__(self, basedn, dn, lp):
@@ -122,6 +120,11 @@ class MapBaseTestCase(TestCaseInTempDir):
         os.unlink(self.ldbfile)
         os.unlink(self.samba3.file)
         os.unlink(self.samba4.file)
+        pdir = "%s.d" % self.ldbfile
+        mdata = os.path.join(pdir, "metadata.tdb")
+        if os.path.exists(mdata):
+            os.unlink(mdata)
+            os.rmdir(pdir)
         super(MapBaseTestCase, self).tearDown()
 
     def assertSidEquals(self, text, ndr_sid):
@@ -166,9 +169,9 @@ class Samba3SamTestCase(MapBaseTestCase):
         """Looking up mapped entry containing SID"""
         msg = self.ldb.search(expression="(cn=Replicator)")
         self.assertEquals(len(msg), 1)
-        self.assertEquals(str(msg[0].dn), 
+        self.assertEquals(str(msg[0].dn),
                           "cn=Replicator,ou=Groups,dc=vernstok,dc=nl")
-        self.assertTrue("objectSid" in msg[0]) 
+        self.assertTrue("objectSid" in msg[0])
         self.assertSidEquals("S-1-5-21-4231626423-2410014848-2360679739-552",
                              msg[0]["objectSid"])
         oc = set(msg[0]["objectClass"])
@@ -177,28 +180,28 @@ class Samba3SamTestCase(MapBaseTestCase):
     def test_search_by_objclass(self):
         """Looking up by objectClass"""
         msg = self.ldb.search(expression="(|(objectClass=user)(cn=Administrator))")
-        self.assertEquals(set([str(m.dn) for m in msg]), 
-                set(["unixName=Administrator,ou=Users,dc=vernstok,dc=nl", 
+        self.assertEquals(set([str(m.dn) for m in msg]),
+                set(["unixName=Administrator,ou=Users,dc=vernstok,dc=nl",
                      "unixName=nobody,ou=Users,dc=vernstok,dc=nl"]))
 
     def test_s3sam_modify(self):
         # Adding a record that will be fallbacked
-        self.ldb.add({"dn": "cn=Foo", 
-            "foo": "bar", 
-            "blah": "Blie", 
-            "cn": "Foo", 
+        self.ldb.add({"dn": "cn=Foo",
+            "foo": "bar",
+            "blah": "Blie",
+            "cn": "Foo",
             "showInAdvancedViewOnly": "TRUE"}
             )
 
         # Checking for existence of record (local)
-        # TODO: This record must be searched in the local database, which is 
+        # TODO: This record must be searched in the local database, which is
         # currently only supported for base searches
         # msg = ldb.search(expression="(cn=Foo)", ['foo','blah','cn','showInAdvancedViewOnly')]
         # TODO: Actually, this version should work as well but doesn't...
-        # 
-        #    
-        msg = self.ldb.search(expression="(cn=Foo)", base="cn=Foo", 
-                scope=SCOPE_BASE, 
+        #
+        #
+        msg = self.ldb.search(expression="(cn=Foo)", base="cn=Foo",
+                scope=SCOPE_BASE,
                 attrs=['foo','blah','cn','showInAdvancedViewOnly'])
         self.assertEquals(len(msg), 1)
         self.assertEquals(str(msg[0]["showInAdvancedViewOnly"]), "TRUE")
@@ -213,14 +216,14 @@ class Samba3SamTestCase(MapBaseTestCase):
                  "cn": "Niemand"})
 
         # Checking for existence of record (remote)
-        msg = self.ldb.search(expression="(unixName=bin)", 
+        msg = self.ldb.search(expression="(unixName=bin)",
                               attrs=['unixName','cn','dn', 'sambaUnicodePwd'])
         self.assertEquals(len(msg), 1)
         self.assertEquals(str(msg[0]["cn"]), "Niemand")
         self.assertEquals(str(msg[0]["sambaUnicodePwd"]), "geheim")
 
         # Checking for existence of record (local && remote)
-        msg = self.ldb.search(expression="(&(unixName=bin)(sambaUnicodePwd=geheim))", 
+        msg = self.ldb.search(expression="(&(unixName=bin)(sambaUnicodePwd=geheim))",
                          attrs=['unixName','cn','dn', 'sambaUnicodePwd'])
         self.assertEquals(len(msg), 1)           # TODO: should check with more records
         self.assertEquals(str(msg[0]["cn"]), "Niemand")
@@ -228,7 +231,7 @@ class Samba3SamTestCase(MapBaseTestCase):
         self.assertEquals(str(msg[0]["sambaUnicodePwd"]), "geheim")
 
         # Checking for existence of record (local || remote)
-        msg = self.ldb.search(expression="(|(unixName=bin)(sambaUnicodePwd=geheim))", 
+        msg = self.ldb.search(expression="(|(unixName=bin)(sambaUnicodePwd=geheim))",
                          attrs=['unixName','cn','dn', 'sambaUnicodePwd'])
         #print "got %d replies" % len(msg)
         self.assertEquals(len(msg), 1)        # TODO: should check with more records
@@ -239,7 +242,7 @@ class Samba3SamTestCase(MapBaseTestCase):
         # Checking for data in destination database
         msg = self.samba3.db.search(expression="(cn=Niemand)")
         self.assertTrue(len(msg) >= 1)
-        self.assertEquals(str(msg[0]["sambaSID"]), 
+        self.assertEquals(str(msg[0]["sambaSID"]),
                 "S-1-5-21-4231626423-2410014848-2360679739-2001")
         self.assertEquals(str(msg[0]["displayName"]), "Niemand")
 
@@ -283,13 +286,13 @@ delete: description
         self.assertTrue(not "description" in msg[0])
 
         # Renaming record...
-        self.ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl", 
+        self.ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl",
                         "cn=Niemand2,cn=Users,dc=vernstok,dc=nl")
 
         # Checking whether DN has changed...
         msg = self.ldb.search(expression="(cn=Niemand2)")
         self.assertEquals(len(msg), 1)
-        self.assertEquals(str(msg[0].dn), 
+        self.assertEquals(str(msg[0].dn),
                           "cn=Niemand2,cn=Users,dc=vernstok,dc=nl")
 
         # Deleting record...
@@ -374,7 +377,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
             "objectClass": "posixAccount",
             "cn": "A",
             "sambaNextRid": "x",
-            "sambaBadPasswordCount": "x", 
+            "sambaBadPasswordCount": "x",
             "sambaLogonTime": "x",
             "description": "x",
             "sambaSID": "S-1-5-21-4231626423-2410014848-2360679739-552",
@@ -402,7 +405,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
 
         # Search remote record by local DN
         dn = self.samba4.dn("cn=A")
-        res = self.ldb.search(dn, scope=SCOPE_BASE, 
+        res = self.ldb.search(dn, scope=SCOPE_BASE,
                 attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn)
@@ -411,7 +414,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
 
         # Search remote record by remote DN
         dn = self.samba3.dn("cn=A")
-        res = self.samba3.db.search(dn, scope=SCOPE_BASE, 
+        res = self.samba3.db.search(dn, scope=SCOPE_BASE,
                 attrs=["dnsHostName", "lastLogon", "sambaLogonTime"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn)
@@ -421,7 +424,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
 
         # Search split record by local DN
         dn = self.samba4.dn("cn=X")
-        res = self.ldb.search(dn, scope=SCOPE_BASE, 
+        res = self.ldb.search(dn, scope=SCOPE_BASE,
                 attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn)
@@ -430,7 +433,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
 
         # Search split record by remote DN
         dn = self.samba3.dn("cn=X")
-        res = self.samba3.db.search(dn, scope=SCOPE_BASE, 
+        res = self.samba3.db.search(dn, scope=SCOPE_BASE,
                 attrs=["dnsHostName", "lastLogon", "sambaLogonTime"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn)
@@ -441,7 +444,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         # Testing search by attribute
 
         # Search by ignored attribute
-        res = self.ldb.search(expression="(revision=x)", scope=SCOPE_DEFAULT, 
+        res = self.ldb.search(expression="(revision=x)", scope=SCOPE_DEFAULT,
                 attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 2)
         res = sorted(res, key=attrgetter('dn'))
@@ -453,7 +456,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[1]["lastLogon"]), "y")
 
         # Search by kept attribute
-        res = self.ldb.search(expression="(description=y)", 
+        res = self.ldb.search(expression="(description=y)",
                 scope=SCOPE_DEFAULT, attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 2)
         res = sorted(res, key=attrgetter('dn'))
@@ -497,10 +500,10 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
                              res[0]["objectSid"])
         self.assertTrue("objectSid" in res[0])
 
-        # Search by generated attribute 
+        # Search by generated attribute
         # In most cases, this even works when the mapping is missing
         # a `convert_operator' by enumerating the remote db.
-        res = self.ldb.search(expression="(primaryGroupID=512)", 
+        res = self.ldb.search(expression="(primaryGroupID=512)",
                            attrs=["dnsHostName", "lastLogon", "primaryGroupID"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), self.samba4.dn("cn=A"))
@@ -517,10 +520,10 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         #        print obj + ": " + res[i][obj]
         #    }
         #    print "---"
-        #    
+        #
 
         # Search by remote name of renamed attribute */
-        res = self.ldb.search(expression="(sambaBadPasswordCount=*)", 
+        res = self.ldb.search(expression="(sambaBadPasswordCount=*)",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 0)
 
@@ -559,7 +562,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         # Testing search by parse tree
 
         # Search by conjunction of local attributes
-        res = self.ldb.search(expression="(&(codePage=x)(revision=x))", 
+        res = self.ldb.search(expression="(&(codePage=x)(revision=x))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 2)
         res = sorted(res, key=attrgetter('dn'))
@@ -571,7 +574,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[1]["lastLogon"]), "y")
 
         # Search by conjunction of remote attributes
-        res = self.ldb.search(expression="(&(lastLogon=x)(description=x))", 
+        res = self.ldb.search(expression="(&(lastLogon=x)(description=x))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 2)
         res = sorted(res, key=attrgetter('dn'))
@@ -581,9 +584,9 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[1].dn), self.samba4.dn("cn=X"))
         self.assertEquals(str(res[1]["dnsHostName"]), "x")
         self.assertEquals(str(res[1]["lastLogon"]), "x")
-        
-        # Search by conjunction of local and remote attribute 
-        res = self.ldb.search(expression="(&(codePage=x)(description=x))", 
+
+        # Search by conjunction of local and remote attribute
+        res = self.ldb.search(expression="(&(codePage=x)(description=x))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 2)
         res = sorted(res, key=attrgetter('dn'))
@@ -596,15 +599,15 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
 
         # Search by conjunction of local and remote attribute w/o match
         attrs = ["dnsHostName", "lastLogon"]
-        res = self.ldb.search(expression="(&(codePage=x)(nextRid=x))", 
+        res = self.ldb.search(expression="(&(codePage=x)(nextRid=x))",
                               attrs=attrs)
         self.assertEquals(len(res), 0)
-        res = self.ldb.search(expression="(&(revision=x)(lastLogon=z))", 
+        res = self.ldb.search(expression="(&(revision=x)(lastLogon=z))",
                               attrs=attrs)
         self.assertEquals(len(res), 0)
 
         # Search by disjunction of local attributes
-        res = self.ldb.search(expression="(|(revision=x)(dnsHostName=x))", 
+        res = self.ldb.search(expression="(|(revision=x)(dnsHostName=x))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 2)
         res = sorted(res, key=attrgetter('dn'))
@@ -616,7 +619,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[1]["lastLogon"]), "y")
 
         # Search by disjunction of remote attributes
-        res = self.ldb.search(expression="(|(badPwdCount=x)(lastLogon=x))", 
+        res = self.ldb.search(expression="(|(badPwdCount=x)(lastLogon=x))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 3)
         res = sorted(res, key=attrgetter('dn'))
@@ -631,7 +634,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[2]["lastLogon"]), "x")
 
         # Search by disjunction of local and remote attribute
-        res = self.ldb.search(expression="(|(revision=x)(lastLogon=y))", 
+        res = self.ldb.search(expression="(|(revision=x)(lastLogon=y))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 3)
         res = sorted(res, key=attrgetter('dn'))
@@ -646,12 +649,12 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[2]["lastLogon"]), "y")
 
         # Search by disjunction of local and remote attribute w/o match
-        res = self.ldb.search(expression="(|(codePage=y)(nextRid=z))", 
+        res = self.ldb.search(expression="(|(codePage=y)(nextRid=z))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 0)
 
         # Search by negated local attribute
-        res = self.ldb.search(expression="(!(revision=x))", 
+        res = self.ldb.search(expression="(!(revision=x))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 6)
         res = sorted(res, key=attrgetter('dn'))
@@ -669,7 +672,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[3]["lastLogon"]), "z")
 
         # Search by negated remote attribute
-        res = self.ldb.search(expression="(!(description=x))", 
+        res = self.ldb.search(expression="(!(description=x))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 4)
         res = sorted(res, key=attrgetter('dn'))
@@ -681,7 +684,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[1]["lastLogon"]), "z")
 
         # Search by negated conjunction of local attributes
-        res = self.ldb.search(expression="(!(&(codePage=x)(revision=x)))", 
+        res = self.ldb.search(expression="(!(&(codePage=x)(revision=x)))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 6)
         res = sorted(res, key=attrgetter('dn'))
@@ -699,7 +702,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[3]["lastLogon"]), "z")
 
         # Search by negated conjunction of remote attributes
-        res = self.ldb.search(expression="(!(&(lastLogon=x)(description=x)))", 
+        res = self.ldb.search(expression="(!(&(lastLogon=x)(description=x)))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 6)
         res = sorted(res, key=attrgetter('dn'))
@@ -717,7 +720,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[3]["lastLogon"]), "z")
 
         # Search by negated conjunction of local and remote attribute
-        res = self.ldb.search(expression="(!(&(codePage=x)(description=x)))", 
+        res = self.ldb.search(expression="(!(&(codePage=x)(description=x)))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 6)
         res = sorted(res, key=attrgetter('dn'))
@@ -735,7 +738,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[3]["lastLogon"]), "z")
 
         # Search by negated disjunction of local attributes
-        res = self.ldb.search(expression="(!(|(revision=x)(dnsHostName=x)))", 
+        res = self.ldb.search(expression="(!(|(revision=x)(dnsHostName=x)))",
                               attrs=["dnsHostName", "lastLogon"])
         res = sorted(res, key=attrgetter('dn'))
         self.assertEquals(str(res[0].dn), self.samba4.dn("cn=A"))
@@ -752,7 +755,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[3]["lastLogon"]), "z")
 
         # Search by negated disjunction of remote attributes
-        res = self.ldb.search(expression="(!(|(badPwdCount=x)(lastLogon=x)))", 
+        res = self.ldb.search(expression="(!(|(badPwdCount=x)(lastLogon=x)))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 5)
         res = sorted(res, key=attrgetter('dn'))
@@ -767,7 +770,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[2]["lastLogon"]), "z")
 
         # Search by negated disjunction of local and remote attribute
-        res = self.ldb.search(expression="(!(|(revision=x)(lastLogon=y)))", 
+        res = self.ldb.search(expression="(!(|(revision=x)(lastLogon=y)))",
                               attrs=["dnsHostName", "lastLogon"])
         self.assertEquals(len(res), 5)
         res = sorted(res, key=attrgetter('dn'))
@@ -810,7 +813,7 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         """Modification of local records."""
         # Add local record
         dn = "cn=test,dc=idealx,dc=org"
-        self.ldb.add({"dn": dn, 
+        self.ldb.add({"dn": dn,
                  "cn": "test",
                  "foo": "bar",
                  "revision": "1",
@@ -824,11 +827,11 @@ objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
         self.assertEquals(str(res[0]["revision"]), "1")
         self.assertEquals(str(res[0]["description"]), "test")
         # Check it's not in the local db
-        res = self.samba4.db.search(expression="(cn=test)", 
+        res = self.samba4.db.search(expression="(cn=test)",
                                     scope=SCOPE_DEFAULT, attrs=attrs)
         self.assertEquals(len(res), 0)
         # Check it's not in the remote db
-        res = self.samba3.db.search(expression="(cn=test)", 
+        res = self.samba3.db.search(expression="(cn=test)",
                                     scope=SCOPE_DEFAULT, attrs=attrs)
         self.assertEquals(len(res), 0)
 
@@ -871,13 +874,13 @@ description: foo
         # Add remote record
         dn = self.samba4.dn("cn=test")
         dn2 = self.samba3.dn("cn=test")
-        self.samba3.db.add({"dn": dn2, 
+        self.samba3.db.add({"dn": dn2,
                    "cn": "test",
                    "description": "foo",
                    "sambaBadPasswordCount": "3",
                    "sambaNextRid": "1001"})
         # Check it's there
-        res = self.samba3.db.search(dn2, scope=SCOPE_BASE, 
+        res = self.samba3.db.search(dn2, scope=SCOPE_BASE,
                 attrs=["description", "sambaBadPasswordCount", "sambaNextRid"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn2)
@@ -906,7 +909,7 @@ badPwdCount: 4
 """
         self.ldb.modify_ldif(ldif)
         # Check in mapped db
-        res = self.ldb.search(dn, scope=SCOPE_BASE, 
+        res = self.ldb.search(dn, scope=SCOPE_BASE,
                 attrs=["description", "badPwdCount", "nextRid"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn)
@@ -914,7 +917,7 @@ badPwdCount: 4
         self.assertEquals(str(res[0]["badPwdCount"]), "4")
         self.assertEquals(str(res[0]["nextRid"]), "1001")
         # Check in remote db
-        res = self.samba3.db.search(dn2, scope=SCOPE_BASE, 
+        res = self.samba3.db.search(dn2, scope=SCOPE_BASE,
                 attrs=["description", "sambaBadPasswordCount", "sambaNextRid"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn2)
@@ -927,16 +930,16 @@ badPwdCount: 4
         self.ldb.rename(dn, dn2)
         # Check in mapped db
         dn = dn2
-        res = self.ldb.search(dn, scope=SCOPE_BASE, 
+        res = self.ldb.search(dn, scope=SCOPE_BASE,
                 attrs=["description", "badPwdCount", "nextRid"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn)
         self.assertEquals(str(res[0]["description"]), "test")
         self.assertEquals(str(res[0]["badPwdCount"]), "4")
         self.assertEquals(str(res[0]["nextRid"]), "1001")
-        # Check in remote db 
+        # Check in remote db
         dn2 = self.samba3.dn("cn=toast")
-        res = self.samba3.db.search(dn2, scope=SCOPE_BASE, 
+        res = self.samba3.db.search(dn2, scope=SCOPE_BASE,
                 attrs=["description", "sambaBadPasswordCount", "sambaNextRid"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn2)
@@ -958,7 +961,7 @@ badPwdCount: 4
         # Add remote record (same as before)
         dn = self.samba4.dn("cn=test")
         dn2 = self.samba3.dn("cn=test")
-        self.samba3.db.add({"dn": dn2, 
+        self.samba3.db.add({"dn": dn2,
                    "cn": "test",
                    "description": "foo",
                    "sambaBadPasswordCount": "3",
@@ -1027,7 +1030,7 @@ description: test
         self.assertTrue(not "nextRid" in res[0])
         self.assertEquals(str(res[0]["revision"]), "1")
         # Check in remote db
-        attrs = ["description", "sambaBadPasswordCount", "sambaNextRid", 
+        attrs = ["description", "sambaBadPasswordCount", "sambaNextRid",
                  "revision"]
         res = self.samba3.db.search(dn2, scope=SCOPE_BASE, attrs=attrs)
         self.assertEquals(len(res), 1)
@@ -1066,7 +1069,7 @@ revision: 2
         self.assertTrue(not "nextRid" in res[0])
         self.assertEquals(str(res[0]["revision"]), "2")
         # Check in remote db
-        attrs = ["description", "sambaBadPasswordCount", "sambaNextRid", 
+        attrs = ["description", "sambaBadPasswordCount", "sambaNextRid",
                  "revision"]
         res = self.samba3.db.search(dn2, scope=SCOPE_BASE, attrs=attrs)
         self.assertEquals(len(res), 1)
@@ -1099,8 +1102,8 @@ revision: 2
         self.assertEquals(str(res[0]["revision"]), "2")
         # Check in remote db
         dn2 = self.samba3.dn("cn=toast")
-        res = self.samba3.db.search(dn2, scope=SCOPE_BASE, 
-          attrs=["description", "sambaBadPasswordCount", "sambaNextRid", 
+        res = self.samba3.db.search(dn2, scope=SCOPE_BASE,
+          attrs=["description", "sambaBadPasswordCount", "sambaNextRid",
                  "revision"])
         self.assertEquals(len(res), 1)
         self.assertEquals(str(res[0].dn), dn2)