dbcheck: look in hasMasterNCs as well for determining the instance type of a NC
authorMatthieu Patou <mat@matws.net>
Wed, 24 Oct 2012 05:09:20 +0000 (22:09 -0700)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 21 Jan 2013 21:31:19 +0000 (22:31 +0100)
Forest of level 2000 don't hve the msDS-hasMasterNCs parameter

Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/scripting/python/samba/dbchecker.py

index 91ae0b68ea6308d829261c6cbe28fea4f078cd09..bc68457a05f7e1dcd576d60439326f8e90c1fc2e 100644 (file)
@@ -59,11 +59,19 @@ class dbcheck(object):
         self.rid_dn = ldb.Dn(samdb, "CN=RID Manager$,CN=System," + samdb.domain_dn())
         self.ntds_dsa = samdb.get_dsServiceName()
 
-        res = self.samdb.search(base=self.ntds_dsa, scope=ldb.SCOPE_BASE, attrs=['msDS-hasMasterNCs'])
+        res = self.samdb.search(base=self.ntds_dsa, scope=ldb.SCOPE_BASE, attrs=['msDS-hasMasterNCs', 'hasMasterNCs'])
         if "msDS-hasMasterNCs" in res[0]:
             self.write_ncs = res[0]["msDS-hasMasterNCs"]
         else:
-            self.write_ncs = None
+            # If the Forest Level is less than 2003 then there is no
+            # msDS-hasMasterNCs, so we fall back to hasMasterNCs
+            # no need to merge as all the NCs that are in hasMasterNCs must
+            # also be in msDS-hasMasterNCs (but not the opposite)
+            if "hasMasterNCs" in res[0]:
+                self.write_ncs = res[0]["hasMasterNCs"]
+            else:
+                self.write_ncs = None
+
 
     def check_database(self, DN=None, scope=ldb.SCOPE_SUBTREE, controls=[], attrs=['*']):
         '''perform a database check, returning the number of errors found'''