[SCM] Samba Shared Repository - branch master updated

Anatoliy Atanasov anatoliy at samba.org
Mon May 17 04:35:14 MDT 2010


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.atanasov at 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.atanasov at 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


More information about the samba-cvs mailing list