]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
python:upgrade/upgradeprovision: use dn.copy to align ldbs
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Sun, 17 Mar 2024 05:07:44 +0000 (18:07 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 10 Apr 2024 05:13:32 +0000 (05:13 +0000)
We need to do this when the dn is on a message from another ldb.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/upgrade.py
python/samba/upgradehelpers.py
source4/scripting/bin/samba_upgradeprovision

index 969f8ab8c0f5665f11733693e8b0af92ea99fc95..523e1a53952c6ac1ec0dbeb06c39e71a9f00e746 100644 (file)
@@ -178,7 +178,7 @@ def add_idmap_entry(idmapdb, sid, xid, xid_type, logger):
     if found:
         try:
             m = ldb.Message()
-            m.dn = msg[0]['dn']
+            m.dn = msg[0]['dn'].copy(m.ldb)
             m['xidNumber'] = ldb.MessageElement(
                 str(xid), ldb.FLAG_MOD_REPLACE, 'xidNumber')
             m['type'] = ldb.MessageElement(
index badfc46018990151fd1c98a3c68e1741daae6e3a..f100ba23d209429a6a478b8d3c4566c2d2193ad8 100644 (file)
@@ -325,7 +325,7 @@ def update_secrets(newsecrets_ldb, secrets_ldb, messagefunc):
     if len(current) == 0:
         # No modules present
         delta = secrets_ldb.msg_diff(ldb.Message(), reference[0])
-        delta.dn = reference[0].dn
+        delta.dn = reference[0].dn.copy(delta.ldb)
         secrets_ldb.add(reference[0])
     else:
         delta = secrets_ldb.msg_diff(current[0], reference[0])
@@ -366,7 +366,7 @@ def update_secrets(newsecrets_ldb, secrets_ldb, messagefunc):
                     reference[0].dn)
         for att in delta:
             messagefunc(CHANGE, " Adding attribute %s" % att)
-        delta.dn = reference[0].dn
+        delta.dn = reference[0].dn.copy(delta.ldb)
         secrets_ldb.add(delta)
 
     for entry in listPresent:
@@ -531,7 +531,7 @@ def delta_update_basesamdb(refsampath, sampath, creds, session, lp, message):
             if str(refentry.dn) == "@PROVISION" and\
                     delta.get(samba.provision.LAST_PROVISION_USN_ATTRIBUTE):
                 delta.remove(samba.provision.LAST_PROVISION_USN_ATTRIBUTE)
-            delta.dn = refentry.dn
+            delta.dn = refentry.dn.copy(delta.ldb)
             sam.add(delta)
         else:
             delta = sam.msg_diff(entry[0], refentry)
@@ -541,7 +541,7 @@ def delta_update_basesamdb(refsampath, sampath, creds, session, lp, message):
                     delta.get(samba.provision.LAST_PROVISION_USN_ATTRIBUTE):
                 delta.remove(samba.provision.LAST_PROVISION_USN_ATTRIBUTE)
             if len(delta.items()) > 1:
-                delta.dn = refentry.dn
+                delta.dn = refentry.dn.copy(delta.ldb)
                 sam.modify(delta)
 
     return deltaattr
index 47a4def003c7c16d006fccf4d2be7246eca65655..24310d2f6ccd9703a8f30277a7c4339ccdb10eda 100755 (executable)
@@ -1031,7 +1031,7 @@ def update_present(ref_samdb, samdb, basedn, listPresent, usns):
                                                current, hash_attr_usn,
                                                basedn, usns, samdb)
 
-        delta.dn = dn
+        delta.dn = dn.copy(delta.ldb)
 
 
         if len(delta) >1:
@@ -1216,7 +1216,7 @@ def fix_wellknown_sd(samdb, names):
         list_wellknown_dns.append(dn)
         if dn in dnToRecalculate:
             delta = Message()
-            delta.dn = dn
+            delta.dn = dn.copy(samdb)
             descr = descriptor_fn(names.domainsid, name_map=names.name_map)
             delta["nTSecurityDescriptor"] = MessageElement(descr, FLAG_MOD_REPLACE,
                                                             "nTSecurityDescriptor" )
@@ -1250,7 +1250,7 @@ def rebuild_sd(samdb, names):
         if dn in listWellknown:
             continue
         delta = Message()
-        delta.dn = dn
+        delta.dn = dn.copy(samdb)
         sd_flags = SECINFO_OWNER | SECINFO_GROUP | SECINFO_DACL | SECINFO_SACL
         try:
             descr = get_empty_descriptor(names.domainsid)