samba/0001-samba-tool-dbcheck-Avoid-creating-child-DNs-via-ldb.patch
Mikhail Novosyolov 76f139c760 upd to 4.18.3
2023-07-04 17:52:19 +03:00

74 lines
3.2 KiB
Diff

From 5149b8a6244ddda1303f6d942ee929721da70407 Mon Sep 17 00:00:00 2001
From: Andrew Bartlett <abartlet@samba.org>
Date: Mon, 11 Mar 2019 13:29:40 +1300
Subject: [PATCH 1/2] samba-tool dbcheck: Avoid creating child DNs via ldb.Dn()
format arguments
If we call dn.add_base() we avoid a problematic round-trip via the linearized DN.
This has been particularly a problem in the python bindings, while now resolved, as strings
are different between Python2 and Python3.
[ mikhailnov: rediffed for v4.10.8 ]
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Signed-off-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
---
python/samba/dbchecker.py | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/python/samba/dbchecker.py b/python/samba/dbchecker.py
index c9341f6500c..f1debd1abea 100644
--- a/python/samba/dbchecker.py
+++ b/python/samba/dbchecker.py
@@ -109,10 +109,17 @@ class dbcheck(object):
self.expired_tombstones = 0
self.reset_all_well_known_acls = False
self.in_transaction = in_transaction
- self.infrastructure_dn = ldb.Dn(samdb, "CN=Infrastructure," + samdb.domain_dn())
- self.naming_dn = ldb.Dn(samdb, "CN=Partitions,%s" % samdb.get_config_basedn())
+
+ self.infrastructure_dn = ldb.Dn(samdb, "CN=Infrastructure")
+ self.infrastructure_dn.add_base(samdb.domain_dn())
+
+ self.naming_dn = ldb.Dn(samdb, "CN=Partitions")
+ self.naming_dn.add_base(samdb.get_config_basedn())
+
self.schema_dn = samdb.get_schema_basedn()
- self.rid_dn = ldb.Dn(samdb, "CN=RID Manager$,CN=System," + samdb.domain_dn())
+ self.rid_dn = ldb.Dn(samdb, "CN=RID Manager$,CN=System")
+ self.rid_dn.add_base(samdb.domain_dn())
+
self.ntds_dsa = ldb.Dn(samdb, samdb.get_dsServiceName())
self.class_schemaIDGUID = {}
self.wellknown_sds = get_wellknown_sds(self.samdb)
@@ -189,7 +196,9 @@ class dbcheck(object):
if len(forest) == 1:
self.dns_partitions.append((ldb.Dn(self.samdb, domaindns_zone), forest[0]))
- fsmo_dn = ldb.Dn(self.samdb, "CN=RID Manager$,CN=System," + self.samdb.domain_dn())
+ fsmo_dn = ldb.Dn(self.samdb, "CN=RID Manager$,CN=System")
+ fsmo_dn.add_base(self.samdb.domain_dn())
+
rid_master = get_fsmo_roleowner(self.samdb, fsmo_dn, "rid")
if ldb.Dn(self.samdb, self.samdb.get_dsServiceName()) == rid_master:
self.is_rid_master = True
@@ -2623,13 +2632,14 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
parent_dn = obj.dn.parent()
try:
- expected_dn = ldb.Dn(self.samdb, "RDN=RDN,%s" % (parent_dn))
+ expected_dn = ldb.Dn(self.samdb, "RDN=RDN")
except ValueError as e:
self.unfixable_errors += 1
self.report(f"ERROR: could not handle parent DN '{parent_dn}': "
"skipping RDN checks")
else:
expected_dn.set_component(0, obj.dn.get_rdn_name(), name_val)
+ expected_dn.add_base(parent_dn)
if obj.dn == deleted_objects_dn:
expected_dn = obj.dn
--
2.35.2