[SCM] Samba Shared Repository - branch master updated
Andrew Bartlett
abartlet at samba.org
Sat May 30 15:56:04 MDT 2015
The branch, master has been updated
via 0791bb0 KCC: improve docstring for KCC.load_samdb()
via 3c41fcf KCC: improve docstring for KCC.list_dsas()
via b7f3ddc KCC: slightly improve docstring for KCC.create_connection()
via 3bc2880 KCC: improve docstring for KCC.is_bridgehead_failed()
via 0175832 KCC: Slightly improve docstring for KCC.get_all_bridgeheads()
via 40d451a KCC: Slightly improve docstring for KCC.get_bridgehead()
via 6a28fc8 KCC: improve docstring for KCC.load_all_partitions()
via 2f6c70a KCC: improve docstring for KCC.add_transports()
via f21d5ee KCC: improve docstring for KCC.setup_graph()
via 9f3fcb0 KCC: improve docstring for KCC.translate_ntdsconn()
via ed3035a KCC: improve docstring for KCC.modify_repsFrom()
via a2ac039 KCC: improve docstring for KCC.is_stale_link_connection()
via aa4588d KCC: improve docstring for KCC.merge_failed_links()
via 692d9c9 KCC: improve docstring and comment for kcc.remove_unneeded_ntdsconn()
via 5b42154 KCC: improve docstring for KCC.load_my_dsa()
via 59a0790 KCC: improve docstring for KCC.load_my_site()
via d77e149 KCC: improve docstring for KCC.load_mysite()
via f66a2f0 KCC: improve docstring and comments for KCC.load_site()
via 7f7339c KCC: improve docstring for KCC.load_all_sitelinks()
via 2b304cd KCC: improve docstring for KCC.load_all_transports()
via 64f5aa7 KCC: docstring for the KCC class
via 0724f5d KCC: improve docstring for is_smtp_replication_available()
via 9fcbc8d KCC: docstring for sort_dsa_by_gc_and_guid
via 482d7f2 KCC: Docstring for sort_replica_by_dsa_guid
via d176e8d KCC: tests/ldif_utils tests ldif import
via 55850a3 KCC: ldif_utils: ldif_to_samdb doesn't need creds; begin selftest
via 6965ed8 KCC: add multisite ldif file for KCC tests
via 11633f7 kcc: translate over other DSA for repsFrom graph
via 6d99636 kcc: prevent non-determinism when running translation
from a937590 ctdb: remove various dead prototypes from the ctdb private header.
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 0791bb07ca4c356dab60e2a8223b1ebbc6ea0060
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Apr 30 11:34:21 2015 +1200
KCC: improve docstring for KCC.load_samdb()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
Autobuild-Date(master): Sat May 30 23:55:22 CEST 2015 on sn-devel-104
commit 3c41fcffb6cb26219c4635146ce0ebe1068f0d60
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Apr 30 11:33:59 2015 +1200
KCC: improve docstring for KCC.list_dsas()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit b7f3ddca085116481f04c6f2bea7111df1570859
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:32:27 2015 +1200
KCC: slightly improve docstring for KCC.create_connection()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 3bc288019bec26bd9b7077a54416a8ec920d6b31
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:31:51 2015 +1200
KCC: improve docstring for KCC.is_bridgehead_failed()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 017583269c4050a635adeca52c0c7fbf3250dc33
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:30:30 2015 +1200
KCC: Slightly improve docstring for KCC.get_all_bridgeheads()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 40d451a7da63b145434bf2ed4fa13bcb257ed0ac
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:29:47 2015 +1200
KCC: Slightly improve docstring for KCC.get_bridgehead()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 6a28fc83641b687d3821c1f2689f29ff22f58312
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:22:40 2015 +1200
KCC: improve docstring for KCC.load_all_partitions()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 2f6c70a450163e1fc92de34eefc96581041b9807
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:14:04 2015 +1200
KCC: improve docstring for KCC.add_transports()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit f21d5ee8d7dd65bbed46da2b2c1c6ca58b66ee68
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:13:23 2015 +1200
KCC: improve docstring for KCC.setup_graph()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 9f3fcb065cc26f74248ebf4f47331cb475abe905
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:11:43 2015 +1200
KCC: improve docstring for KCC.translate_ntdsconn()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit ed3035a68009cc5e6477f7c9156cea418ff18d1f
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:10:46 2015 +1200
KCC: improve docstring for KCC.modify_repsFrom()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit a2ac039d37ffe51c5d689e28e7f67a9d5064dfd8
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:06:58 2015 +1200
KCC: improve docstring for KCC.is_stale_link_connection()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit aa4588db63e8d9de22963272cd450b2c91085138
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:05:06 2015 +1200
KCC: improve docstring for KCC.merge_failed_links()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 692d9c912775003991435a0057a63b4da3be60e6
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:01:13 2015 +1200
KCC: improve docstring and comment for kcc.remove_unneeded_ntdsconn()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 5b421545f344944f44020a61558af34f32d0266d
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:56:36 2015 +1200
KCC: improve docstring for KCC.load_my_dsa()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 59a07905d5163d01da3a79cb52bc34d18c1871bf
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:56:05 2015 +1200
KCC: improve docstring for KCC.load_my_site()
Separating :return: from :raise:
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit d77e149fac0e16c0bb6b479e28b678320c15739f
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:54:35 2015 +1200
KCC: improve docstring for KCC.load_mysite()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit f66a2f031784ec17ee1e124a6bb53c5a519b5c57
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:53:35 2015 +1200
KCC: improve docstring and comments for KCC.load_site()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 7f7339cced2d20b67195db03add0f91cc9f01152
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:52:59 2015 +1200
KCC: improve docstring for KCC.load_all_sitelinks()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 2b304cde65d38d6ac58963b3fa93607900fae12e
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:52:33 2015 +1200
KCC: improve docstring for KCC.load_all_transports()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 64f5aa7bfd1844ac5adf4e8b6fad474c74a84a01
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:51:33 2015 +1200
KCC: docstring for the KCC class
The params describe the __init__ method arguments.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 0724f5dab43187d2dcc9ef15d09f3ce9dc2663fd
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:48:51 2015 +1200
KCC: improve docstring for is_smtp_replication_available()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 9fcbc8d1efc7b0c8d0bd2c9c01e1da412c0f5f7e
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:48:08 2015 +1200
KCC: docstring for sort_dsa_by_gc_and_guid
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 482d7f27fe6d7de0ff9afa138204d105ca4a5886
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Apr 24 16:47:36 2015 +1200
KCC: Docstring for sort_replica_by_dsa_guid
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit d176e8d441bb3ba49b0a6cbae38446aff5cbf0c2
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Apr 16 17:26:51 2015 +1200
KCC: tests/ldif_utils tests ldif import
Thanks as usual to Andrew Bartlett for his help.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 55850a3dad999297a7e31befadc700bebb23ca7a
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:38:51 2015 +1200
KCC: ldif_utils: ldif_to_samdb doesn't need creds; begin selftest
The tests are based on the testdata/ldif-utils-test-multisite.ldif
which describes a multisite windows network. It was constructed by
Garming Sam.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 6965ed844d5fd0a4a968300826de46885720c14e
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Apr 28 11:39:49 2015 +1200
KCC: add multisite ldif file for KCC tests
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 11633f791f44a863c96d42aa02830caf007eb79f
Author: Garming Sam <garming at catalyst.net.nz>
Date: Fri Apr 10 16:17:28 2015 +1200
kcc: translate over other DSA for repsFrom graph
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 6d99636cf1ab7de4caedfa909f1255599aef5cf5
Author: Garming Sam <garming at catalyst.net.nz>
Date: Fri Apr 10 16:15:28 2015 +1200
kcc: prevent non-determinism when running translation
RODC connections could appear first some runs while not always. This would
mean that repsFrom could accidentally be deleted.
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
python/samba/kcc_utils.py | 19 +-
python/samba/ldif_utils.py | 5 +-
python/samba/tests/ldif_utils.py | 124 ++++
selftest/tests.py | 1 +
source4/scripting/bin/samba_kcc | 239 ++++++--
testdata/ldif-utils-test-multisite.ldif | 1007 +++++++++++++++++++++++++++++++
6 files changed, 1327 insertions(+), 68 deletions(-)
create mode 100644 python/samba/tests/ldif_utils.py
create mode 100644 testdata/ldif-utils-test-multisite.ldif
Changeset truncated at 500 lines:
diff --git a/python/samba/kcc_utils.py b/python/samba/kcc_utils.py
index f45a972..2e0be7f 100644
--- a/python/samba/kcc_utils.py
+++ b/python/samba/kcc_utils.py
@@ -750,11 +750,12 @@ class DirectoryServiceAgent(object):
:param from_dnstr: search for this from server entry
"""
- #XXX is this connection always unique?
+ answer = []
for connect in self.connect_table.values():
if connect.get_from_dnstr() == from_dnstr:
- return connect
- return None
+ answer.append(connect)
+
+ return answer
def dumpstr_current_replica_table(self):
'''Debug dump string output of current replica table'''
@@ -1725,7 +1726,7 @@ class GraphNode(object):
is a corresponding nTDSConnection object in the dsa.
"""
for edge_dnstr in self.edge_from:
- connect = dsa.get_connection_by_from_dnstr(edge_dnstr)
+ connections = dsa.get_connection_by_from_dnstr(edge_dnstr)
# For each edge directed to the NC replica that
# "should be present" on the local DC, the KCC determines
@@ -1739,8 +1740,16 @@ class GraphNode(object):
# the DC on which ri "is present".
#
# c.options does not contain NTDSCONN_OPT_RODC_TOPOLOGY
- if connect and not connect.is_rodc_topology():
+
+ found_valid = False
+ for connect in connections:
+ if connect.is_rodc_topology():
+ continue
+ found_valid = True
+
+ if found_valid:
continue
+
# if no such object exists then the KCC adds an object
# c with the following attributes
diff --git a/python/samba/ldif_utils.py b/python/samba/ldif_utils.py
index 55d2dd3..47f4fd0 100644
--- a/python/samba/ldif_utils.py
+++ b/python/samba/ldif_utils.py
@@ -38,7 +38,7 @@ def write_search_result(samdb, f, res):
f.write("%s" % lstr)
-def ldif_to_samdb(dburl, lp, creds, ldif_file, forced_local_dsa=None):
+def ldif_to_samdb(dburl, lp, ldif_file, forced_local_dsa=None):
"""Routine to import all objects and attributes that are relevent
to the KCC algorithms from a previously exported LDIF file.
@@ -83,8 +83,7 @@ dsServiceName: CN=NTDS Settings,%s
# We have an abbreviated list of options here because we have built
# an abbreviated database. We use the rootdse and extended-dn
# modules only during this re-open
- samdb = SamDB(url=dburl, session_info=system_session(),
- credentials=creds, lp=lp,
+ samdb = SamDB(url=dburl, session_info=system_session(), lp=lp,
options=["modules:rootdse,extended_dn_in,"
"extended_dn_out_ldb"])
return samdb
diff --git a/python/samba/tests/ldif_utils.py b/python/samba/tests/ldif_utils.py
new file mode 100644
index 0000000..73eccfe
--- /dev/null
+++ b/python/samba/tests/ldif_utils.py
@@ -0,0 +1,124 @@
+# Unix SMB/CIFS implementation. Tests for graph_utils.py routines
+# Copyright (C) Andrew Bartlett 2015
+#
+# Written by Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+"""Tests for samba.ldif_utils"""
+
+import samba
+import os
+from tempfile import mkdtemp
+
+import samba.tests
+from samba import ldif_utils
+from samba import ldb
+from samba.dcerpc import misc
+
+
+from samba.param import LoadParm
+from samba.credentials import Credentials
+from samba.samdb import SamDB
+
+MULTISITE_LDIF = os.path.join(os.environ['SRCDIR_ABS'],
+ "testdata/ldif-utils-test-multisite.ldif")
+
+MULTISITE_LDIF_DSAS = (
+ ("CN=WIN08,CN=Servers,CN=Site-4,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-4"),
+ ("CN=WIN07,CN=Servers,CN=Site-4,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-4"),
+ ("CN=WIN06,CN=Servers,CN=Site-3,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-3"),
+ ("CN=WIN09,CN=Servers,CN=Site-5,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-5"),
+ ("CN=WIN10,CN=Servers,CN=Site-5,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-5"),
+ ("CN=WIN02,CN=Servers,CN=Site-2,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-2"),
+ ("CN=WIN04,CN=Servers,CN=Site-2,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-2"),
+ ("CN=WIN03,CN=Servers,CN=Site-2,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-2"),
+ ("CN=WIN05,CN=Servers,CN=Site-2,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Site-2"),
+ ("CN=WIN01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com",
+ "Default-First-Site-Name"),
+)
+
+
+class LdifUtilTests(samba.tests.TestCase):
+ def setUp(self):
+ super(LdifUtilTests, self).setUp()
+ self.lp = LoadParm()
+ self.creds = Credentials()
+ self.creds.guess(self.lp)
+ #self.creds.set_machine_account(self.lp)
+ self.tmpdir = mkdtemp()
+
+ def tearDown(self):
+ #shutil.rmtree(self.tmpdir)
+ pass
+
+ def test_write_search_url(self):
+ pass
+ #write_search_result(samdb, f, res)
+
+ def test_ldif_to_samdb(self):
+ dburl = os.path.join(self.tmpdir, "ldap")
+ samdb = ldif_utils.ldif_to_samdb(dburl, self.lp, MULTISITE_LDIF)
+ self.assertIsInstance(samdb, SamDB)
+
+ dsa = ("CN=WIN01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,"
+ "CN=Configuration,DC=ad,DC=samba,DC=example,DC=com")
+ res = samdb.search(ldb.Dn(samdb, "CN=NTDS Settings," + dsa),
+ scope=ldb.SCOPE_BASE, attrs=["objectGUID"])
+
+ ntds_guid = misc.GUID(samdb.get_ntds_GUID())
+ self.assertEqual(misc.GUID(res[0]["objectGUID"][0]), ntds_guid)
+
+ service_name_res = samdb.search(base="",
+ scope=ldb.SCOPE_BASE,
+ attrs=["dsServiceName"])
+ dn = ldb.Dn(samdb,
+ service_name_res[0]["dsServiceName"][0])
+ self.assertEqual(dn, ldb.Dn(samdb, "CN=NTDS Settings," + dsa))
+
+ def test_ldif_to_samdb_forced_local_dsa(self):
+ for dsa, site in MULTISITE_LDIF_DSAS:
+ dburl = os.path.join(self.tmpdir, "ldif-to-samba-forced-local-dsa"
+ "-%s" % dsa)
+ samdb = ldif_utils.ldif_to_samdb(dburl, self.lp, MULTISITE_LDIF,
+ forced_local_dsa=dsa)
+ self.assertIsInstance(samdb, SamDB)
+ self.assertEqual(samdb.server_site_name(), site)
+
+ res = samdb.search(ldb.Dn(samdb, "CN=NTDS Settings," + dsa),
+ scope=ldb.SCOPE_BASE, attrs=["objectGUID"])
+
+ ntds_guid = misc.GUID(samdb.get_ntds_GUID())
+ self.assertEqual(misc.GUID(res[0]["objectGUID"][0]), ntds_guid)
+
+ service_name_res = samdb.search(base="",
+ scope=ldb.SCOPE_BASE,
+ attrs=["dsServiceName"])
+ dn = ldb.Dn(samdb,
+ service_name_res[0]["dsServiceName"][0])
+ self.assertEqual(dn, ldb.Dn(samdb, "CN=NTDS Settings," + dsa))
+
+ def samdb_to_ldif_file(self):
+ #samdb_to_ldif_file(samdb, dburl, lp, creds, ldif_file):
+ pass
diff --git a/selftest/tests.py b/selftest/tests.py
index 8cf35ac..e6a9207 100644
--- a/selftest/tests.py
+++ b/selftest/tests.py
@@ -97,4 +97,5 @@ planpythontestsuite("none", "samba.tests.xattr")
planpythontestsuite("none", "samba.tests.ntacls")
planpythontestsuite("none", "samba.tests.policy")
planpythontestsuite("none", "samba.tests.graph_utils")
+planpythontestsuite("none", "samba.tests.ldif_utils")
plantestsuite("wafsamba.duplicate_symbols", "none", [os.path.join(srcdir(), "buildtools/wafsamba/test_duplicate_symbol.sh")])
diff --git a/source4/scripting/bin/samba_kcc b/source4/scripting/bin/samba_kcc
index 8ba4dec..1c1e6d9 100755
--- a/source4/scripting/bin/samba_kcc
+++ b/source4/scripting/bin/samba_kcc
@@ -66,6 +66,12 @@ class KCC(object):
A container for objects and methods allowing a run of the KCC. Produces a
set of connections in the samdb for which the Distributed Replication
Service can then utilize to replicate naming contexts
+
+ :param unix_now: The putative current time in seconds since 1970.
+ :param read_only: Don't write to the database.
+ :param verify: Check topological invariants for the generated graphs
+ :param debug: Write verbosely to stderr.
+ "param dot_files: write Graphviz files in /tmp showing topology
"""
def __init__(self):
"""Initializes the partitions class which can hold
@@ -105,7 +111,8 @@ class KCC(object):
def load_all_transports(self):
"""Loads the inter-site transport objects for Sites
- ::returns: Raises KCCError on error
+ :return: None
+ :raise KCCError: if no IP transport is found
"""
try:
res = self.samdb.search("CN=Inter-Site Transports,CN=Sites,%s" %
@@ -133,7 +140,8 @@ class KCC(object):
def load_all_sitelinks(self):
"""Loads the inter-site siteLink objects
- ::returns: Raises KCCError on error
+ :return: None
+ :raise KCCError: if site-links aren't found
"""
try:
res = self.samdb.search("CN=Inter-Site Transports,CN=Sites,%s" %
@@ -159,14 +167,19 @@ class KCC(object):
self.sitelink_table[dnstr] = sitelink
def load_site(self, dn_str):
- """Helper for load_my_site and load_all_sites. It puts all the site's
- DSAs into the KCC indices.
+ """Helper for load_my_site and load_all_sites.
+
+ Put all the site's DSAs into the KCC indices.
+
+ :param dn_str: a site dn_str
+ :return: the Site object pertaining to the dn_str
"""
site = Site(dn_str, unix_now)
site.load_site(self.samdb)
- # I am not sure why, but we avoid replacing the site with an
- # identical copy.
+ # We avoid replacing the site with an identical copy in case
+ # somewhere else has a reference to the old one, which would
+ # lead to all manner of confusion and chaos.
guid = str(site.site_guid)
if guid not in self.site_table:
self.site_table[guid] = site
@@ -177,9 +190,9 @@ class KCC(object):
return self.site_table[guid]
def load_my_site(self):
- """Loads the Site class for the local DSA
+ """Load the Site object for the local DSA.
- ::returns: Raises an Exception on error
+ :return: None
"""
self.my_site_dnstr = ("CN=%s,CN=Sites,%s" % (
self.samdb.server_site_name(),
@@ -188,10 +201,10 @@ class KCC(object):
self.my_site = self.load_site(self.my_site_dnstr)
def load_all_sites(self):
- """Discover all sites and instantiate and load each
- NTDS Site settings.
+ """Discover all sites and create Site objects.
- ::returns: Raises KCCError on error
+ :return: None
+ :raise: KCCError if sites can't be found
"""
try:
res = self.samdb.search("CN=Sites,%s" %
@@ -208,7 +221,8 @@ class KCC(object):
def load_my_dsa(self):
"""Discover my nTDSDSA dn thru the rootDSE entry
- ::returns: Raises KCCError on error.
+ :return: None
+ :raise: KCCError if DSA can't be found
"""
dn = ldb.Dn(self.samdb, "<GUID=%s>" % self.samdb.get_ntds_GUID())
try:
@@ -260,13 +274,13 @@ class KCC(object):
self.dsa_by_guid[str(self.my_dsa.dsa_guid)] = self.my_dsa
def load_all_partitions(self):
- """Discover all NCs thru the Partitions dn and
- instantiate and load the NCs.
+ """Discover and load all partitions.
Each NC is inserted into the part_table by partition
dn string (not the nCName dn string)
- ::returns: Raises KCCError on error
+ :return: None
+ :raise: KCCError if partitions can't be found
"""
try:
res = self.samdb.search("CN=Partitions,%s" %
@@ -355,12 +369,16 @@ class KCC(object):
self.kcc_failed_connections.difference_update(restore_connections)
def is_stale_link_connection(self, target_dsa):
- """Returns False if no tuple z exists in the kCCFailedLinks or
- kCCFailedConnections variables such that z.UUIDDsa is the
- objectGUID of the target dsa, z.FailureCount > 0, and
- the current time - z.TimeFirstFailure > 2 hours.
+ """Check whether a link to a remote DSA is stale
+
+ Used in MS-ADTS 6.2.2.2 Intrasite Connection Creation
+
+ Returns True if the remote seems to have been down for at
+ least two hours, otherwise False.
+
+ :param target_dsa: the remote DSA object
+ :return: True if link is stale, otherwise False
"""
- # Returns True if tuple z exists...
failed_link = self.kcc_failed_links.get(str(target_dsa.dsa_guid))
if failed_link:
# failure_count should be > 0, but check anyways
@@ -390,12 +408,17 @@ class KCC(object):
pass
def remove_unneeded_ntdsconn(self, all_connected):
- """Removes unneeded NTDS Connections after computation
- of KCC intra and inter-site topology has finished.
+ """Remove unneeded NTDS Connections once topology is calculated
+
+ Based on MS-ADTS 6.2.2.4 Removing Unnecessary Connections
+
+ :param all_connected: indicates whether all sites are connected
+ :return: None
"""
mydsa = self.my_dsa
- # Loop thru connections
+ # New connections won't have GUIDs which are needed for
+ # sorting. Add them.
for cn_conn in mydsa.connect_table.values():
if cn_conn.guid is None:
if opts.readonly:
@@ -540,7 +563,9 @@ class KCC(object):
mydsa.commit_connections(self.samdb)
def modify_repsFrom(self, n_rep, t_repsFrom, s_rep, s_dsa, cn_conn):
- """Part of MS-ADTS 6.2.2.5.
+ """Update an repsFrom object if required.
+
+ Part of MS-ADTS 6.2.2.5.
Update t_repsFrom if necessary to satisfy requirements. Such
updates are typically required when the IDL_DRSGetNCChanges
@@ -548,19 +573,18 @@ class KCC(object):
enable compression when the server is moved from the
client's site to another site.
+ The repsFrom.update_flags bit field may be modified
+ auto-magically if any changes are made here. See
+ kcc_utils.RepsFromTo for gory details.
+
+
:param n_rep: NC replica we need
:param t_repsFrom: repsFrom tuple to modify
:param s_rep: NC replica at source DSA
:param s_dsa: source DSA
:param cn_conn: Local DSA NTDSConnection child
- ::returns: (update) bit field containing which portion of the
- repsFrom was modified. This bit field is suitable as input
- to IDL_DRSReplicaModify ulModifyFields element, as it consists
- of these bits:
- drsuapi.DRSUAPI_DRS_UPDATE_SCHEDULE
- drsuapi.DRSUAPI_DRS_UPDATE_FLAGS
- drsuapi.DRSUAPI_DRS_UPDATE_ADDRESS
+ :return: None
"""
s_dnstr = s_dsa.dsa_dnstr
update = 0x0
@@ -881,20 +905,31 @@ class KCC(object):
else:
return False, None
- def translate_ntdsconn(self):
- """This function adjusts values of repsFrom abstract attributes of NC
+ def translate_ntdsconn(self, current_dsa=None):
+ """Adjust repsFrom to match NTDSConnections
+
+ This function adjusts values of repsFrom abstract attributes of NC
replicas on the local DC to match those implied by
nTDSConnection objects.
- [MS-ADTS] 6.2.2.5
+
+ Based on [MS-ADTS] 6.2.2.5
+
+ :param current_dsa: optional DSA on whose behalf we are acting.
+ :return: None
"""
- if self.my_dsa.is_translate_ntdsconn_disabled():
+ count = 0
+
+ if current_dsa is None:
+ current_dsa = self.my_dsa
+
+ if current_dsa.is_translate_ntdsconn_disabled():
logger.debug("skipping translate_ntdsconn() "
"because disabling flag is set")
return
logger.debug("translate_ntdsconn(): enter")
- current_rep_table, needed_rep_table = self.my_dsa.get_rep_tables()
+ current_rep_table, needed_rep_table = current_dsa.get_rep_tables()
# Filled in with replicas we currently have that need deleting
delete_reps = set()
@@ -959,7 +994,15 @@ class KCC(object):
# Retrieve my DSAs connection object (if it exists)
# that specifies the fromServer equivalent to
# the DSA that is specified in the repsFrom source
- cn_conn = self.my_dsa.get_connection_by_from_dnstr(s_dnstr)
+ connections = current_dsa.get_connection_by_from_dnstr(s_dnstr)
+
+ count = 0
+ cn_conn = None
+
+ for con in connections:
+ if con.is_rodc_topology():
+ continue
+ cn_conn = con
# Let (cn) be the nTDSConnection object such that (cn)
# is a child of the local DC's nTDSDSA object and
@@ -972,7 +1015,7 @@ class KCC(object):
# [...]
#XXX varying possible interpretations of rodc_topology
- if cn_conn is None or cn_conn.is_rodc_topology():
+ if cn_conn is None:
t_repsFrom.to_be_deleted = True
continue
@@ -998,7 +1041,7 @@ class KCC(object):
# Loop thru connections and add implied repsFrom tuples
# for each NTDSConnection under our local DSA if the
# repsFrom is not already present
- for cn_conn in self.my_dsa.connect_table.values():
+ for cn_conn in current_dsa.connect_table.values():
implied, s_dsa = self.is_repsFrom_implied(n_rep, cn_conn)
if not implied:
@@ -1010,7 +1053,7 @@ class KCC(object):
# to have the correct attributes above
for t_repsFrom in n_rep.rep_repsFrom:
guidstr = str(t_repsFrom.source_dsa_obj_guid)
- #XXXX what?
+ #XXX what?
if s_dsa is self.get_dsa_by_guidstr(guidstr):
s_dsa = None
break
@@ -1050,13 +1093,17 @@ class KCC(object):
def merge_failed_links(self):
"""Merge of kCCFailedLinks and kCCFailedLinks from bridgeheads.
+
The KCC on a writable DC attempts to merge the link and connection
failure information from bridgehead DCs in its own site to help it
identify failed bridgehead DCs.
- """
- # MS-TECH Ref 6.2.2.3.2 Merge of kCCFailedLinks and kCCFailedLinks
- # from Bridgeheads
+ Based on MS-ADTS 6.2.2.3.2 "Merge of kCCFailedLinks and kCCFailedLinks
+ from Bridgeheads"
+
--
Samba Shared Repository
More information about the samba-cvs
mailing list