s4 upgradeprovision: Fixes for increment_keyversion
authorMatthieu Patou <mat@matws.net>
Tue, 10 Aug 2010 14:19:40 +0000 (18:19 +0400)
committerMatthieu Patou <mat@matws.net>
Thu, 19 Aug 2010 11:59:04 +0000 (15:59 +0400)
fix

source4/scripting/bin/upgradeprovision
source4/scripting/python/samba/samdb.py
source4/scripting/python/samba/upgradehelpers.py

index f171aebe5891e09173fb756eba350788351a57ff..0c810307acbbbca0182911b64628aa7c7dc68774 100755 (executable)
@@ -1337,7 +1337,8 @@ def sync_calculated_attributes(samdb, names):
    """
    listAttrs = ["msDs-KeyVersionNumber"]
    hash = search_constructed_attrs_stored(samdb, names.rootdn, listAttrs)
-   increment_calculated_keyversion_number(samdb, names.rootdn,
+   if hash.has_key("msDs-KeyVersionNumber"):
+       increment_calculated_keyversion_number(samdb, names.rootdn,
                                             hash["msDs-KeyVersionNumber"])
 
 def setup_path(file):
index f358747b5196ba1ce86d10ab4d1500fd420a163c..1765a07b6b61931894ead029ade7f6fc5c4b518e 100644 (file)
@@ -536,7 +536,7 @@ accountExpires: %u
         return None
 
 
-    def set_attribute_replmetadata_version(self, dn, att, value):
+    def set_attribute_replmetadata_version(self, dn, att, value, addifnotexist=False):
         res = self.search(expression="dn=%s" % dn,
                             scope=ldb.SCOPE_SUBTREE,
                             controls=["search_options:1:2"],
@@ -563,6 +563,23 @@ accountExpires: %u
                 o.originating_invocation_id = misc.GUID(self.get_invocation_id())
                 o.originating_usn = seq
                 o.local_usn = seq
+
+        if not found and addifnotexist and len(ctr.array) >0:
+            o2 = drsblobs.replPropertyMetaData1()
+            o2.attid = 589914
+            att_oid = self.get_oid_from_attid(o2.attid)
+            seq = self.sequence_number(ldb.SEQ_NEXT)
+            o2.version = value
+            o2.originating_change_time = now
+            o2.originating_invocation_id = misc.GUID(self.get_invocation_id())
+            o2.originating_usn = seq
+            o2.local_usn = seq
+            found = True
+            tab = ctr.array
+            tab.append(o2)
+            ctr.count = ctr.count + 1
+            ctr.array = tab
+
         if found :
             replBlob = ndr_pack(repl)
             msg = ldb.Message()
index 2bc1795fbca7d2e277e02e0fd322bf6d92306d5f..cc8322f361991fea188bea9e37c2e150bbd63bd6 100755 (executable)
@@ -732,6 +732,7 @@ def increment_calculated_keyversion_number(samdb, rootdn, hashDns):
                          scope=SCOPE_SUBTREE, attrs=["msDs-KeyVersionNumber"],
                          controls=["search_options:1:2"])
     done = 0
+    hashDone = {}
     if len(entry) == 0:
         raise ProvisioningError("Unable to find msDs-KeyVersionNumber")
     else:
@@ -739,7 +740,7 @@ def increment_calculated_keyversion_number(samdb, rootdn, hashDns):
             if hashDns.has_key(str(e.dn).lower()):
                 val = e.get("msDs-KeyVersionNumber")
                 if not val:
-                    continue
+                    val = "0"
                 version = int(str(hashDns[str(e.dn).lower()]))
                 if int(str(val)) < version:
                     done = done + 1