s3-passdb: Allow reload of the static passdb from python
authorAndrew Bartlett <abartlet@samba.org>
Mon, 27 Aug 2012 12:37:19 +0000 (22:37 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 27 Aug 2012 21:57:30 +0000 (07:57 +1000)
This is then used in provision when the passdb backend is forced.

Andrew Bartlett

source3/passdb/pdb_interface.c
source3/passdb/py_passdb.c
source4/scripting/python/samba/provision/__init__.py

index d24301ab97c9013086c54390d020279467e6cb4b..767808c851281e4894d659047bc1a29dbe3dd4a2 100644 (file)
@@ -1299,11 +1299,12 @@ bool pdb_new_rid(uint32_t *rid)
 
 bool initialize_password_db(bool reload, struct tevent_context *tevent_ctx)
 {
-       pdb_tevent_ctx = tevent_ctx;
+       if (tevent_ctx) {
+               pdb_tevent_ctx = tevent_ctx;
+       }
        return (pdb_get_methods_reload(reload) != NULL);
 }
 
-
 /***************************************************************************
   Default implementations of some functions.
  ****************************************************************************/
index bd332e17d11ed746d6ada192512cb93eb1e95f3b..69840617147555d9d98a79973e1266d44816ca38 100644 (file)
@@ -3645,8 +3645,23 @@ static PyObject *py_set_secrets_dir(PyObject *self, PyObject *args)
                return NULL;
        }
 
+       talloc_free(frame);
        Py_RETURN_NONE;
+}
+
+static PyObject *py_reload_static_pdb(PyObject *self, PyObject *args)
+{
+       TALLOC_CTX *frame = talloc_stackframe();
+
+       /* Initialize secrets database */
+       if (!initialize_password_db(true, NULL)) {
+               PyErr_Format(py_pdb_error, "Cannot re-open passdb backend %s", lp_passdb_backend());
+               talloc_free(frame);
+               return NULL;
+       }
+
        talloc_free(frame);
+       Py_RETURN_NONE;
 }
 
 static PyObject *py_get_global_sam_sid(PyObject *self)
@@ -3684,6 +3699,9 @@ static PyMethodDef py_passdb_methods[] = {
        { "get_global_sam_sid", (PyCFunction)py_get_global_sam_sid, METH_NOARGS,
                "get_global_sam_sid() -> dom_sid\n\n \
                Return domain SID." },
+       { "reload_static_pdb", (PyCFunction)py_reload_static_pdb, METH_NOARGS,
+               "reload_static_pdb() -> None\n\n \
+               Re-initalise the static pdb used internally.  Needed if 'passdb backend' is changed." },
        { NULL },
 };
 
index ed46b4040d422165230a3d5461f691faf5a67fe9..e39a6c45ae282fa64154082238d2502cd187e3d3 100644 (file)
@@ -1417,6 +1417,8 @@ def setsysvolacl(samdb, netlogon, sysvol, uid, gid, domainsid, dnsdomain, domain
         s3conf.load(lp.configfile)
         # ensure we are using the right samba4 passdb backend, no matter what
         s3conf.set("passdb backend", "samba4:%s" % samdb.url)
+        passdb.reload_static_pdb()
+
         # ensure that we init the samba4 backend, so the domain sid is marked in secrets.tdb
         s4_passdb = passdb.PDB(s3conf.get("passdb backend"))