drs_utils: Avoid invalid dereference of v8 requests
authorTim Beale <timbeale@catalyst.net.nz>
Mon, 5 Nov 2018 04:01:55 +0000 (17:01 +1300)
committerTim Beale <timbeale@samba.org>
Tue, 6 Nov 2018 06:15:33 +0000 (07:15 +0100)
commit2229f4620d563ce0f0ea256dd89ce248c6656b9e
tree93c297650ceb2c803fd037a6d33072f8a09e56de
parent63bfdb3c1150eec64bf3d78e1f2b9749ef077831
drs_utils: Avoid invalid dereference of v8 requests

req.more_flags only exists for v10 requests, so we throw an exception if
we try to dereference that field on a v8 (or v5) request. Unfortunately,
we were checking that we support v10 *after* we had tried to access the
more_flags. This patch fixes up the order of the checks.

This may be a problem trying to replicate with an older Windows DC
(pre-2008R2), and was reported on the samba mailing-list at one point:
https://lists.samba.org/archive/samba/2018-June/216541.html

Unfortunately this patch doesn't help the overall situation at all (the
join will fail because we can't resolve the link target and we can't use
GET_TGT). But it now gives you a more meaningful error, i.e.

  ERROR(runtime): uncaught exception - (8639, "Failed to process 'chunk'
    of DRS replicated objects: DOS code 0x000021bf"
instead of:
  ERROR(<type 'exceptions.AttributeError'>): uncaught exception -
    'drsuapi.DsGetNCChangesRequest8' object has no attribute 'more_flags'

Signed-off-by: Tim Beale <timbeale@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Autobuild-User(master): Tim Beale <timbeale@samba.org>
Autobuild-Date(master): Tue Nov  6 07:15:33 CET 2018 on sn-devel-144
python/samba/drs_utils.py