*/
#include <Python.h>
+#include "python/py3compat.h"
+#include <ldb.h>
+#include <pyldb.h>
#include "includes.h"
-#include "auth/auth.h"
-#include "ldb/include/ldb.h"
-#include "ldb_errors.h"
-#include "libcli/raw/libcliraw.h"
#include "librpc/ndr/libndr.h"
-
-#include "param/param.h"
#include "param/provision.h"
#include "param/secrets.h"
-#include "lib/talloc/pytalloc.h"
-#include "librpc/rpc/pyrpc.h"
-#include "scripting/python/modules.h"
-#include "lib/ldb/pyldb.h"
+#include <pytalloc.h>
+#include "python/modules.h"
#include "param/pyparam.h"
#include "dynconfig/dynconfig.h"
static PyObject *provision_module(void)
{
- PyObject *name = PyString_FromString("samba.provision");
+ PyObject *name = PyStr_FromString("samba.provision");
if (name == NULL)
return NULL;
return PyImport_Import(name);
static PyObject *schema_module(void)
{
- PyObject *name = PyString_FromString("samba.schema");
+ PyObject *name = PyStr_FromString("samba.schema");
if (name == NULL)
return NULL;
return PyImport_Import(name);
static PyObject *ldb_module(void)
{
- PyObject *name = PyString_FromString("ldb");
+ PyObject *name = PyStr_FromString("ldb");
if (name == NULL)
return NULL;
return PyImport_Import(name);
DEBUG(0,("Provision for Become-DC test using python\n"));
Py_Initialize();
- py_update_path("bin"); /* FIXME: Can't assume this is always the case */
+ py_update_path(); /* Put the samba path at the start of sys.path */
provision_mod = provision_module();
configfile = lpcfg_configfile(lp_ctx);
if (configfile != NULL) {
PyDict_SetItemString(parameters, "smbconf",
- PyString_FromString(configfile));
+ PyStr_FromString(configfile));
}
PyDict_SetItemString(parameters, "rootdn",
- PyString_FromString(settings->root_dn_str));
+ PyStr_FromString(settings->root_dn_str));
if (settings->targetdir != NULL)
PyDict_SetItemString(parameters, "targetdir",
- PyString_FromString(settings->targetdir));
- if (file_exist("setup/provision.smb.conf.dc")) {
- PyDict_SetItemString(parameters, "setup_dir",
- PyString_FromString("setup"));
- } else {
- PyDict_SetItemString(parameters, "setup_dir",
- PyString_FromString(dyn_SETUPDIR));
- }
+ PyStr_FromString(settings->targetdir));
PyDict_SetItemString(parameters, "hostname",
- PyString_FromString(settings->netbios_name));
+ PyStr_FromString(settings->netbios_name));
PyDict_SetItemString(parameters, "domain",
- PyString_FromString(settings->domain));
+ PyStr_FromString(settings->domain));
PyDict_SetItemString(parameters, "realm",
- PyString_FromString(settings->realm));
+ PyStr_FromString(settings->realm));
if (settings->root_dn_str)
PyDict_SetItemString(parameters, "rootdn",
- PyString_FromString(settings->root_dn_str));
+ PyStr_FromString(settings->root_dn_str));
if (settings->domain_dn_str)
PyDict_SetItemString(parameters, "domaindn",
- PyString_FromString(settings->domain_dn_str));
+ PyStr_FromString(settings->domain_dn_str));
if (settings->schema_dn_str)
PyDict_SetItemString(parameters, "schemadn",
- PyString_FromString(settings->schema_dn_str));
+ PyStr_FromString(settings->schema_dn_str));
if (settings->config_dn_str)
PyDict_SetItemString(parameters, "configdn",
- PyString_FromString(settings->config_dn_str));
+ PyStr_FromString(settings->config_dn_str));
if (settings->server_dn_str)
PyDict_SetItemString(parameters, "serverdn",
- PyString_FromString(settings->server_dn_str));
+ PyStr_FromString(settings->server_dn_str));
if (settings->site_name)
PyDict_SetItemString(parameters, "sitename",
- PyString_FromString(settings->site_name));
+ PyStr_FromString(settings->site_name));
PyDict_SetItemString(parameters, "machinepass",
- PyString_FromString(settings->machine_password));
+ PyStr_FromString(settings->machine_password));
PyDict_SetItemString(parameters, "debuglevel", PyInt_FromLong(DEBUGLEVEL));
+ PyDict_SetItemString(parameters, "use_ntvfs", PyInt_FromLong(settings->use_ntvfs));
+
py_result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters);
Py_DECREF(parameters);
return NT_STATUS_UNSUCCESSFUL;
}
- result->domaindn = talloc_strdup(mem_ctx, PyString_AsString(PyObject_GetAttrString(py_result, "domaindn")));
+ result->domaindn = talloc_strdup(mem_ctx, PyStr_AsString(PyObject_GetAttrString(py_result, "domaindn")));
/* FIXME paths */
py_lp_ctx = PyObject_GetAttrString(py_result, "lp");
return NT_STATUS_UNSUCCESSFUL;
}
result->lp_ctx = lpcfg_from_py_object(mem_ctx, py_lp_ctx);
- result->samdb = PyLdb_AsLdbContext(PyObject_GetAttrString(py_result, "samdb"));
+ result->samdb = pyldb_Ldb_AsLdbContext(PyObject_GetAttrString(py_result, "samdb"));
return NT_STATUS_OK;
}
if (dom_sid_Type == NULL)
return NULL;
- return py_talloc_reference((PyTypeObject *)dom_sid_Type, sid);
+ return pytalloc_reference((PyTypeObject *)dom_sid_Type, sid);
}
NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
PyObject *provision_mod, *provision_dict, *provision_fn, *py_result, *parameters, *py_sid;
struct ldb_context *ldb;
TALLOC_CTX *tmp_mem = talloc_new(mem_ctx);
+
+ *error_string = NULL;
+
if (!tmp_mem) {
return NT_STATUS_NO_MEMORY;
}
/* Open the secrets database */
- ldb = secrets_db_connect(tmp_mem, event_ctx, lp_ctx);
+ ldb = secrets_db_connect(tmp_mem, lp_ctx);
if (!ldb) {
*error_string
= talloc_asprintf(mem_ctx,
}
Py_Initialize();
- py_update_path("bin"); /* FIXME: Can't assume this is always the case */
+ py_update_path(); /* Put the samba path at the start of sys.path */
provision_mod = provision_module();
if (provision_mod == NULL) {
PyDict_SetItemString(parameters, "secretsdb",
PyLdb_FromLdbContext(ldb));
PyDict_SetItemString(parameters, "domain",
- PyString_FromString(settings->domain_name));
+ PyStr_FromString(settings->domain_name));
if (settings->realm != NULL) {
PyDict_SetItemString(parameters, "realm",
- PyString_FromString(settings->realm));
+ PyStr_FromString(settings->realm));
}
PyDict_SetItemString(parameters, "machinepass",
- PyString_FromString(settings->machine_password));
+ PyStr_FromString(settings->machine_password));
PyDict_SetItemString(parameters, "netbiosname",
- PyString_FromString(settings->netbios_name));
+ PyStr_FromString(settings->netbios_name));
py_sid = py_dom_sid_FromSid(settings->domain_sid);
if (py_sid == NULL) {
}
-struct ldb_context *provision_get_schema(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
+struct ldb_context *provision_get_schema(TALLOC_CTX *mem_ctx,
+ struct loadparm_context *lp_ctx,
+ const char *schema_dn,
DATA_BLOB *override_prefixmap)
{
- const char *setupdir;
PyObject *schema_mod, *schema_dict, *schema_fn, *py_result, *parameters;
- DEBUG(0,("Schema for DRS tests using python\n"));
-
Py_Initialize();
- py_update_path("bin"); /* FIXME: Can't assume this is always the case */
+ py_update_path(); /* Put the samba path at the start of sys.path */
schema_mod = schema_module();
parameters = PyDict_New();
- setupdir = lpcfg_setupdir(lp_ctx);
- PyDict_SetItemString(parameters, "setup_dir",
- PyString_FromString(setupdir));
+ if (schema_dn) {
+ PyDict_SetItemString(parameters, "schemadn",
+ PyStr_FromString(schema_dn));
+ }
+
if (override_prefixmap) {
PyDict_SetItemString(parameters, "override_prefixmap",
- PyString_FromStringAndSize((const char *)override_prefixmap->data,
+ PyStr_FromStringAndSize((const char *)override_prefixmap->data,
override_prefixmap->length));
}
return NULL;
}
- return PyLdb_AsLdbContext(PyObject_GetAttrString(py_result, "ldb"));
+ return pyldb_Ldb_AsLdbContext(PyObject_GetAttrString(py_result, "ldb"));
}