From: Douglas Bagnall Date: Thu, 20 Dec 2018 03:01:24 +0000 (+1300) Subject: python/kcc lib: cope with differently formed repsToFrom X-Git-Tag: ldb-1.6.1~447 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7fc60ea55ca56da1a9a37f642bfa03f4da2b45fa;p=thirdparty%2Fsamba.git python/kcc lib: cope with differently formed repsToFrom samba-tool visualise reuses these libraries to parse reps from other DCs, and Windows sometimes sends more data than we are expecting Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/kcc/kcc_utils.py b/python/samba/kcc/kcc_utils.py index 81d381abd99..3e9a988b778 100644 --- a/python/samba/kcc/kcc_utils.py +++ b/python/samba/kcc/kcc_utils.py @@ -19,7 +19,8 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . - +from __future__ import print_function +import sys import ldb import uuid @@ -314,8 +315,13 @@ class NCReplica(NamingContext): # Possibly no repsFrom if this is a singleton DC if "repsFrom" in msg: for value in msg["repsFrom"]: - rep = RepsFromTo(self.nc_dnstr, - ndr_unpack(drsblobs.repsFromToBlob, value)) + try: + unpacked = ndr_unpack(drsblobs.repsFromToBlob, value) + except RuntimeError as e: + print("bad repsFrom NDR: %r" % (value), + file=sys.stderr) + continue + rep = RepsFromTo(self.nc_dnstr, unpacked) self.rep_repsFrom.append(rep) def commit_repsFrom(self, samdb, ro=False): @@ -468,8 +474,13 @@ class NCReplica(NamingContext): # Possibly no repsTo if this is a singleton DC if "repsTo" in msg: for value in msg["repsTo"]: - rep = RepsFromTo(self.nc_dnstr, - ndr_unpack(drsblobs.repsFromToBlob, value)) + try: + unpacked = ndr_unpack(drsblobs.repsFromToBlob, value) + except RuntimeError as e: + print("bad repsTo NDR: %r" % (value), + file=sys.stderr) + continue + rep = RepsFromTo(self.nc_dnstr, unpacked) self.rep_repsTo.append(rep) def commit_repsTo(self, samdb, ro=False):