diff options
| author | Douglas Bagnall <douglas.bagnall@catalyst.net.nz> | 2018-12-20 16:01:24 +1300 |
|---|---|---|
| committer | Andrew Bartlett <abartlet@samba.org> | 2019-01-19 19:21:20 +0100 |
| commit | 7fc60ea55ca56da1a9a37f642bfa03f4da2b45fa (patch) | |
| tree | 3d67c30c75666813424710adff703b8d58cd060c /python/samba | |
| parent | 011ee2713f0b5b0236865bc21c171d6e4ce3d108 (diff) | |
| download | samba-7fc60ea55ca56da1a9a37f642bfa03f4da2b45fa.tar.gz samba-7fc60ea55ca56da1a9a37f642bfa03f4da2b45fa.tar.bz2 samba-7fc60ea55ca56da1a9a37f642bfa03f4da2b45fa.zip | |
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 <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'python/samba')
| -rw-r--r-- | python/samba/kcc/kcc_utils.py | 21 |
1 files changed, 16 insertions, 5 deletions
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 <http://www.gnu.org/licenses/>. - +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): |
