The branch, master has been updated via d040658... s4-rodc: Set am_rodc flag during provision via 26d41c2... s4-rodc: Cache am_rodc flag from a15b666... s3:winbind:idmap_tdb: don't check ranges when an invalid entry was found.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit d040658e1a5a48c6cc33640de37771d601c69a76 Author: Anatoliy Atanasov <anatoliy.atana...@postpath.com> Date: Mon May 17 12:49:37 2010 +0300 s4-rodc: Set am_rodc flag during provision commit 26d41c23f69b9e3ee327f159c9164917422d45c5 Author: Anatoliy Atanasov <anatoliy.atana...@postpath.com> Date: Thu May 13 15:07:50 2010 +0300 s4-rodc: Cache am_rodc flag ----------------------------------------------------------------------- Summary of changes: source4/dsdb/common/util.c | 29 +++++++++++++++++++++++++++ source4/dsdb/pydsdb.c | 22 ++++++++++++++++++++ source4/scripting/python/samba/provision.py | 18 +++++++++------- source4/scripting/python/samba/samdb.py | 5 +++- source4/scripting/python/samba/schema.py | 4 +- 5 files changed, 67 insertions(+), 11 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c index 6387027..df4e734 100644 --- a/source4/dsdb/common/util.c +++ b/source4/dsdb/common/util.c @@ -2747,6 +2747,35 @@ int samdb_rodc(struct ldb_context *sam_ctx, bool *am_rodc) return LDB_SUCCESS; } +bool samdb_set_am_rodc(struct ldb_context *ldb, bool am_rodc) +{ + TALLOC_CTX *tmp_ctx; + bool *cached; + + tmp_ctx = talloc_new(ldb); + if (tmp_ctx == NULL) { + goto failed; + } + + cached = talloc(tmp_ctx, bool); + if (!cached) { + goto failed; + } + + *cached = am_rodc; + if (ldb_set_opaque(ldb, "cache.am_rodc", cached) != LDB_SUCCESS) { + goto failed; + } + + talloc_steal(ldb, cached); + talloc_free(tmp_ctx); + return true; + +failed: + DEBUG(1,("Failed to set our own cached am_rodc in the ldb!\n")); + talloc_free(tmp_ctx); + return false; +} /* diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c index 45f8b6e..fd6925d 100644 --- a/source4/dsdb/pydsdb.c +++ b/source4/dsdb/pydsdb.c @@ -371,6 +371,25 @@ static PyObject *py_dsdb_load_partition_usn(PyObject *self, PyObject *args) return result; } +static PyObject *py_dsdb_set_am_rodc(PyObject *self, PyObject *args) +{ + PyObject *py_ldb; + bool ret; + struct ldb_context *ldb; + int py_val; + + if (!PyArg_ParseTuple(args, "Oi", &py_ldb, &py_val)) + return NULL; + + PyErr_LDB_OR_RAISE(py_ldb, ldb); + ret = samdb_set_am_rodc(ldb, (bool)py_val); + if (!ret) { + PyErr_SetString(PyExc_RuntimeError, "set_am_rodc failed"); + return NULL; + } + Py_RETURN_NONE; +} + static PyMethodDef py_dsdb_methods[] = { { "samdb_server_site_name", (PyCFunction)py_samdb_server_site_name, METH_VARARGS, "Get the server site name as a string"}, @@ -404,6 +423,9 @@ static PyMethodDef py_dsdb_methods[] = { { "dsdb_load_partition_usn", (PyCFunction)py_dsdb_load_partition_usn, METH_VARARGS, "get uSNHighest and uSNUrgent from the partition @REPLCHANGED"}, + { "dsdb_set_am_rodc", + (PyCFunction)py_dsdb_set_am_rodc, METH_VARARGS, + NULL }, { NULL } }; diff --git a/source4/scripting/python/samba/provision.py b/source4/scripting/python/samba/provision.py index f7db2e7..b4e48fb 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: @@ -1116,7 +1118,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! @@ -1237,8 +1239,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, @@ -1324,7 +1326,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: -- Samba Shared Repository