From 6d4d8b28d403cbdc34fcbf3ee4881ff9cfd69911 Mon Sep 17 00:00:00 2001 From: Anatoliy Atanasov Date: Fri, 14 May 2010 12:29:30 +0300 Subject: [PATCH 2/2] s4-rodc: Set am_rodc flag during provision --- source4/scripting/python/samba/provision.py | 18 ++++++++++-------- source4/scripting/python/samba/samdb.py | 5 ++++- source4/scripting/python/samba/schema.py | 4 ++-- source4/setup/provision | 5 ++++- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/source4/scripting/python/samba/provision.py b/source4/scripting/python/samba/provision.py index fa2dabe..c06cd1e 100644 --- a/source4/scripting/python/samba/provision.py +++ b/source4/scripting/python/samba/provision.py @@ -841,7 +841,7 @@ def setup_samdb(path, setup_path, session_info, provision_backend, lp, domainsid, domainguid, policyguid, policyguid_dc, fill, adminpass, krbtgtpass, machinepass, invocationid, dnspass, ntdsguid, - serverrole, dom_for_fun_level=None, + serverrole, am_rodc, dom_for_fun_level=None, schema=None): """Setup a complete SAM Database. @@ -870,11 +870,13 @@ def setup_samdb(path, setup_path, session_info, provision_backend, lp, names=names, serverrole=serverrole, schema=schema) if schema is None: - schema = Schema(setup_path, domainsid, schemadn=names.schemadn, serverdn=names.serverdn) + schema = Schema(setup_path, domainsid, schemadn=names.schemadn, serverdn=names.serverdn, + am_rodc=am_rodc) # Load the database, but don's load the global schema and don't connect quite yet samdb = SamDB(session_info=session_info, url=None, auto_connect=False, - credentials=provision_backend.credentials, lp=lp, global_schema=False) + credentials=provision_backend.credentials, lp=lp, global_schema=False, + am_rodc=am_rodc) message("Pre-loading the Samba 4 and AD schema") @@ -960,7 +962,7 @@ def setup_samdb(path, setup_path, session_info, provision_backend, lp, samdb = SamDB(session_info=admin_session_info, credentials=provision_backend.credentials, lp=lp, - global_schema=False) + global_schema=False, am_rodc=am_rodc) samdb.connect(path) samdb.transaction_start() try: @@ -1115,7 +1117,7 @@ def provision(setup_dir, message, session_info, sitename=None, ol_mmr_urls=None, ol_olc=None, setup_ds_path=None, slapd_path=None, nosync=False, - ldap_dryrun_mode=False,useeadb=False): + ldap_dryrun_mode=False,useeadb=False, am_rodc=False): """Provision samba4 :note: caution, this wipes all existing data! @@ -1236,8 +1238,8 @@ def provision(setup_dir, message, session_info, ldapi_url = "ldapi://%s" % urllib.quote(paths.s4_ldapi_path, safe="") schema = Schema(setup_path, domainsid, invocationid=invocationid, schemadn=names.schemadn, - serverdn=names.serverdn) - + serverdn=names.serverdn, am_rodc=am_rodc) + if backend_type == "ldb": provision_backend = LDBBackend(backend_type, paths=paths, setup_path=setup_path, @@ -1323,7 +1325,7 @@ def provision(setup_dir, message, session_info, invocationid=invocationid, machinepass=machinepass, dnspass=dnspass, ntdsguid=ntdsguid, serverrole=serverrole, - dom_for_fun_level=dom_for_fun_level) + dom_for_fun_level=dom_for_fun_level, am_rodc=am_rodc) if serverrole == "domain controller": if paths.netlogon is None: diff --git a/source4/scripting/python/samba/samdb.py b/source4/scripting/python/samba/samdb.py index 991c678..4af330b 100644 --- a/source4/scripting/python/samba/samdb.py +++ b/source4/scripting/python/samba/samdb.py @@ -37,7 +37,8 @@ class SamDB(samba.Ldb): """The SAM database.""" def __init__(self, url=None, lp=None, modules_dir=None, session_info=None, - credentials=None, flags=0, options=None, global_schema=True, auto_connect=True): + credentials=None, flags=0, options=None, global_schema=True, auto_connect=True, + am_rodc=False): self.lp = lp if not auto_connect: url = None @@ -51,6 +52,8 @@ class SamDB(samba.Ldb): if global_schema: dsdb.dsdb_set_global_schema(self) + dsdb.dsdb_set_am_rodc(self, am_rodc) + def connect(self, url=None, flags=0, options=None): if self.lp is not None: url = self.lp.private_path(url) diff --git a/source4/scripting/python/samba/schema.py b/source4/scripting/python/samba/schema.py index 1777c65..562fe38 100644 --- a/source4/scripting/python/samba/schema.py +++ b/source4/scripting/python/samba/schema.py @@ -54,7 +54,7 @@ def get_schema_descriptor(domain_sid): class Schema(object): def __init__(self, setup_path, domain_sid, invocationid=None, schemadn=None, - serverdn=None, files=None, prefixmap=None): + serverdn=None, files=None, prefixmap=None, am_rodc=False): """Load schema for the SamDB from the AD schema files and samba4_schema.ldif :param samdb: Load a schema into a SamDB. @@ -66,7 +66,7 @@ class Schema(object): """ self.schemadn = schemadn - self.ldb = SamDB(global_schema=False) + self.ldb = SamDB(global_schema=False, am_rodc=am_rodc) if serverdn is not None: self.ldb.set_ntds_settings_dn("CN=NTDS Settings,%s" % serverdn) if invocationid is not None: diff --git a/source4/setup/provision b/source4/setup/provision index 78965c6..b0ce6ef 100755 --- a/source4/setup/provision +++ b/source4/setup/provision @@ -226,6 +226,8 @@ elif opts.use_xattrs == "auto": message(" if you intend to use this provision in production you'd better rerun the script as root on a system supporting xattr") file.close() +#Set RODC flag - it should be set from command line when vampire code is integrated in provision +am_rodc=False session = system_session() try: @@ -246,7 +248,8 @@ try: backend_type=opts.ldap_backend_type, ldapadminpass=opts.ldapadminpass, ol_mmr_urls=opts.ol_mmr_urls, slapd_path=opts.slapd_path, setup_ds_path=opts.setup_ds_path, - nosync=opts.nosync,ldap_dryrun_mode=opts.ldap_dryrun_mode,useeadb=eadb) + nosync=opts.nosync,ldap_dryrun_mode=opts.ldap_dryrun_mode,useeadb=eadb, + am_rodc=am_rodc) except ProvisioningError, e: print str(e) exit(1) -- 1.6.3.3