[PATCH] samba_kcc: do not commit new nTDSConnection if we are rodc
Douglas Bagnall
douglas.bagnall at catalyst.net.nz
Tue Nov 14 21:12:17 UTC 2017
thanks Andrej,
On 13/11/17 23:30, Andrej Gessel via samba-technical wrote:
> Here some more information about: https://lists.samba.org/archive/samba/2017-November/212050.html
>
>
>
> Thanks
> -----------------------------------------------------------------
> Andrej Gessel (andrej.gessel at janztec.com<mailto:andrej.gessel at janztec.com>)
> Entwicklung Software
>
>
> 0001-samba_kcc-do-not-commit-new-nTDSConnection-if-we-are.patch
>
>
> From 3ebd0e65a12ba51093c097c9993aa766cebc7fd0 Mon Sep 17 00:00:00 2001
> From: Andrej Gessel <Andrej.Gessel at janztec.com>
> Date: Mon, 13 Nov 2017 11:07:43 +0100
> Subject: [PATCH] samba_kcc: do not commit new nTDSConnection, if we are rodc
>
> Traceback (most recent call last):
> /usr/local/samba/sbin/samba_kcc: File "/usr/local/samba/sbin/samba_kcc", line 337, in <module>
> /usr/local/samba/sbin/samba_kcc: attempt_live_connections=opts.attempt_live_connections)
> /usr/local/samba/sbin/samba_kcc: File
> "/usr/local/samba/lib/python2.7/site-packages/samba/kcc/__init__.py", line 2644, in run
> /usr/local/samba/sbin/samba_kcc: all_connected = self.intersite(ping)
> /usr/local/samba/sbin/samba_kcc: File
> "/usr/local/samba/lib/python2.7/site-packages/samba/kcc/__init__.py", line 1883, in intersite
> /usr/local/samba/sbin/samba_kcc: all_connected = self.create_intersite_connections()
> /usr/local/samba/sbin/samba_kcc: File
> "/usr/local/samba/lib/python2.7/site-packages/samba/kcc/__init__.py", line 1817, in create_intersite_connections
> /usr/local/samba/sbin/samba_kcc: part, True)
> /usr/local/samba/sbin/samba_kcc: File
> "/usr/local/samba/lib/python2.7/site-packages/samba/kcc/__init__.py", line 1769, in create_connections
> /usr/local/samba/sbin/samba_kcc: partial_ok, detect_failed)
> /usr/local/samba/sbin/samba_kcc: File
> "/usr/local/samba/lib/python2.7/site-packages/samba/kcc/__init__.py", line 1594, in create_connection
> /usr/local/samba/sbin/samba_kcc: lbh.commit_connections(self.samdb)
> /usr/local/samba/sbin/samba_kcc: File "/usr/local/samba/lib/python2.7/site-packages/samba/kcc/kcc_utils.py", line 827, in commit_connections
> /usr/local/samba/sbin/samba_kcc: connect.commit_added(samdb, ro)
> /usr/local/samba/sbin/samba_kcc: File "/usr/local/samba/lib/python2.7/site-packages/samba/kcc/kcc_utils.py", line 1123, in commit_added
> /usr/local/samba/sbin/samba_kcc: (self.dnstr, estr))
> /usr/local/samba/sbin/samba_kcc: samba.kcc.kcc_utils.KCCError: Could not add nTDSConnection for (CN=862f0429-c72c-4a81-ae9a-96820bb2f96d,CN=NTDS Settings,
> CN=BUILDHOST,CN=Servers,CN=Testsite,CN=Sites,CN=Configuration,DC=samdom,DC=com) - (Invalid LDB reply type 1)
> ../source4/dsdb/kcc/kcc_periodic.c:693: Failed samba_kcc - NT_STATUS_ACCESS_DENIED
>
> Signed-off-by: Andrej Gessel <Andrej.Gessel at janztec.com>
> ---
> python/samba/kcc/__init__.py | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/python/samba/kcc/__init__.py b/python/samba/kcc/__init__.py
> index 6f973ea..2468e37 100644
> --- a/python/samba/kcc/__init__.py
> +++ b/python/samba/kcc/__init__.py
> @@ -1501,7 +1501,7 @@ class KCC(object):
> cn.set_modified(True)
>
> # Display any modified connection
> - if self.readonly:
> + if self.readonly or ldsa.is_ro():
> if cn.to_be_modified:
> logger.info("TO BE MODIFIED:\n%s" % cn)
>
> @@ -1585,11 +1585,11 @@ class KCC(object):
> rbh.dsa_dnstr, link_sched)
>
> # Display any added connection
> - if self.readonly:
> + if self.readonly or lbh.is_ro():
> if cn.to_be_added:
> logger.info("TO BE ADDED:\n%s" % cn)
>
> - lbh.commit_connections(self.samdb, ro=True)
> + lbh.commit_connections(self.samdb, ro=True)
> else:
> lbh.commit_connections(self.samdb)
>
> -- 2.7.4
>
This looks good to me, but could do with a test.
Does `samba-tool drs kcc $SERVER` trigger it? if so, a test like this
might suffice:
diff --git a/python/samba/tests/samba_tool/rodc.py
b/python/samba/tests/samba_tool/rodc.py
index 4851a53910a..9bac19a3b46 100644
--- a/python/samba/tests/samba_tool/rodc.py
+++ b/python/samba/tests/samba_tool/rodc.py
@@ -126,3 +126,7 @@ class RodcCmdTestCase(SambaToolCmdTest):
"sambatool6", "sambatool5",
"--server",
os.environ["DC_SERVER"])
self.assertCmdFail(result, "ensuring rodc prefetch quit on
non-replicated user")
+
+ def test_kcc_does_not_crash(self):
+ (result, out, err) = self.runsubcmd("drs", "kcc",
os.environ["DC_SERVER"])
+ self.assertCmdSuccess(result, out, err, "ensuring kcc runs on
the rodc")
Could you try that (with modifications as necessary to make it
actually run)? Garming might have a better idea.
cheers,
Douglas
More information about the samba-technical
mailing list