1
0
mirror of https://github.com/samba-team/samba.git synced 2025-07-27 07:42:04 +03:00

s4-python: externalize some function to the drs_utils module so that they can be reused

This commit is contained in:
Matthieu Patou
2011-11-28 20:48:59 +01:00
parent 9e3ee2bf6a
commit 093dac4331
2 changed files with 66 additions and 25 deletions

View File

@ -36,22 +36,13 @@ from samba import drs_utils, nttime2string, dsdb
from samba.dcerpc import drsuapi, misc
import common
def drsuapi_connect(ctx):
'''make a DRSUAPI connection to the server'''
binding_options = "seal"
if int(ctx.lp.get("log level")) >= 5:
binding_options += ",print"
binding_string = "ncacn_ip_tcp:%s[%s]" % (ctx.server, binding_options)
try:
ctx.drsuapi = drsuapi.drsuapi(binding_string, ctx.lp, ctx.creds)
(ctx.drsuapi_handle, ctx.bind_supported_extensions) = drs_utils.drs_DsBind(ctx.drsuapi)
(ctx.drsuapi, ctx.drsuapi_handle, ctx.bind_supported_extensions) = drs_utils.drsuapi_connect(ctx.server, ctx.lp, ctx.creds)
except Exception, e:
raise CommandError("DRS connection to %s failed" % ctx.server, e)
def samdb_connect(ctx):
'''make a ldap connection to the server'''
try:
@ -61,8 +52,6 @@ def samdb_connect(ctx):
except Exception, e:
raise CommandError("LDAP connection to %s failed" % ctx.server, e)
def drs_errmsg(werr):
'''return "was successful" or an error string'''
(ecode, estring) = werr
@ -315,27 +304,22 @@ class cmd_drs_replicate(Command):
source_dsa_guid = msg[0]['objectGUID'][0]
dsa_options = int(attr_default(msg, 'options', 0))
nc = drsuapi.DsReplicaObjectIdentifier()
nc.dn = NC
req1 = drsuapi.DsReplicaSyncRequest1()
req1.naming_context = nc;
req1.options = 0
req_options = 0
if not (dsa_options & dsdb.DS_NTDSDSA_OPT_DISABLE_OUTBOUND_REPL):
req1.options |= drsuapi.DRSUAPI_DRS_WRIT_REP
req_options |= drsuapi.DRSUAPI_DRS_WRIT_REP
if add_ref:
req1.options |= drsuapi.DRSUAPI_DRS_ADD_REF
req_options |= drsuapi.DRSUAPI_DRS_ADD_REF
if sync_forced:
req1.options |= drsuapi.DRSUAPI_DRS_SYNC_FORCED
req_options |= drsuapi.DRSUAPI_DRS_SYNC_FORCED
if sync_all:
req1.options |= drsuapi.DRSUAPI_DRS_SYNC_ALL
req_options |= drsuapi.DRSUAPI_DRS_SYNC_ALL
if full_sync:
req1.options |= drsuapi.DRSUAPI_DRS_FULL_SYNC_NOW
req1.source_dsa_guid = misc.GUID(source_dsa_guid)
req_options |= drsuapi.DRSUAPI_DRS_FULL_SYNC_NOW
try:
self.drsuapi.DsReplicaSync(self.drsuapi_handle, 1, req1)
except Exception, estr:
drs_utils.sendDsReplicaSync(self.drsuapi, self.drsuapi_handle, source_dsa_guid, NC, req_options)
except drs_utils.drsException, estr:
raise CommandError("DsReplicaSync failed", estr)
self.message("Replicate from %s to %s was successful." % (SOURCE_DC, DEST_DC))