samba/0001-samba-tool-dbcheck-Avoid-creating-child-DNs-via-ldb..patch

70 lines
3 KiB
Diff
Raw Normal View History

From 63cf6814016d4a68a49773b1cf282bc78f42d5ba 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 3677564fea0..ffda828a522 100644
--- a/python/samba/dbchecker.py
+++ b/python/samba/dbchecker.py
@@ -112,10 +112,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)
@@ -190,7 +197,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
@@ -2509,8 +2518,9 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
controls += ["local_oid:%s:1" % dsdb.DSDB_CONTROL_DBCHECK_FIX_LINK_DN_NAME]
if parent_dn is None:
parent_dn = obj.dn.parent()
- expected_dn = ldb.Dn(self.samdb, "RDN=RDN,%s" % (parent_dn))
+ expected_dn = ldb.Dn(self.samdb, "RDN=RDN")
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.20.1