diff options
| -rw-r--r-- | source3/passdb/pdb_interface.c | 5 | ||||
| -rw-r--r-- | source3/passdb/py_passdb.c | 18 | ||||
| -rw-r--r-- | source4/scripting/python/samba/provision/__init__.py | 2 | 
3 files changed, 23 insertions, 2 deletions
diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index d24301ab97..767808c851 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -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.   ****************************************************************************/ diff --git a/source3/passdb/py_passdb.c b/source3/passdb/py_passdb.c index bd332e17d1..6984061714 100644 --- a/source3/passdb/py_passdb.c +++ b/source3/passdb/py_passdb.c @@ -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 },  }; diff --git a/source4/scripting/python/samba/provision/__init__.py b/source4/scripting/python/samba/provision/__init__.py index ed46b4040d..e39a6c45ae 100644 --- a/source4/scripting/python/samba/provision/__init__.py +++ b/source4/scripting/python/samba/provision/__init__.py @@ -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"))  | 
