summaryrefslogtreecommitdiff
path: root/source4/scripting/python/samba/drs_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'source4/scripting/python/samba/drs_utils.py')
-rw-r--r--source4/scripting/python/samba/drs_utils.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/source4/scripting/python/samba/drs_utils.py b/source4/scripting/python/samba/drs_utils.py
index 95ccac5650..00efd78439 100644
--- a/source4/scripting/python/samba/drs_utils.py
+++ b/source4/scripting/python/samba/drs_utils.py
@@ -58,14 +58,15 @@ def drs_DsBind(drs):
bind_info.info.supported_extensions |= drsuapi.DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7
bind_info.info.supported_extensions |= drsuapi.DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT
(info, handle) = drs.DsBind(misc.GUID(drsuapi.DRSUAPI_DS_BIND_GUID), bind_info)
- return handle
+
+ return (handle, info.info.supported_extensions)
class drs_Replicate:
'''DRS replication calls'''
def __init__(self, binding_string, lp, creds, samdb):
self.drs = drsuapi.drsuapi(binding_string, lp, creds)
- self.drs_handle = drs_DsBind(self.drs)
+ (self.drs_handle, self.supported_extensions) = drs_DsBind(self.drs)
self.net = Net(creds=creds, lp=lp)
self.samdb = samdb
self.replication_state = self.net.replicate_init(self.samdb, lp, self.drs)
@@ -152,9 +153,21 @@ class drs_Replicate:
if not schema and rodc:
req8.partial_attribute_set = self.drs_get_rodc_partial_attribute_set()
+ if self.supported_extensions & drsuapi.DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8:
+ req_level = 8
+ req = req8
+ else:
+ req_level = 5
+ req5 = drsuapi.DsGetNCChangesRequest5()
+ for a in dir(req5):
+ if a[0] != '_':
+ setattr(req5, a, getattr(req8, a))
+ req = req5
+
+
while True:
- (level, ctr) = self.drs.DsGetNCChanges(self.drs_handle, 8, req8)
+ (level, ctr) = self.drs.DsGetNCChanges(self.drs_handle, req_level, req)
self.net.replicate_chunk(self.replication_state, level, ctr, schema=schema)
if ctr.more_data == 0:
break
- req8.highwatermark.tmp_highest_usn = ctr.new_highwatermark.tmp_highest_usn
+ req.highwatermark.tmp_highest_usn = ctr.new_highwatermark.tmp_highest_usn