s4-param Remove unused 'announce version'
[samba.git] / source4 / param / provision.c
index 920a5d8639e8a5b0e664c159a9d7d7b376eca2a1..7b6e6e74b3511329122c5d908800d949a3e57288 100644 (file)
 */
 
 #include <Python.h>
+#include <ldb.h>
+#include <pyldb.h>
 #include "includes.h"
-#include "auth/auth.h"
-#include "lib/ldb_wrap.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 "param/pyparam.h"
+#include "dynconfig/dynconfig.h"
 
 static PyObject *provision_module(void)
 {
@@ -85,13 +79,12 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
                        struct provision_result *result)
 {
        const char *configfile;
-       PyObject *provision_mod, *provision_dict, *provision_fn, *py_result, *parameters;
+       PyObject *provision_mod, *provision_dict, *provision_fn, *py_result, *parameters, *py_lp_ctx;
        
        DEBUG(0,("Provision for Become-DC test using python\n"));
 
-       py_load_samba_modules();
        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();
 
@@ -123,11 +116,11 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
                settings->ntds_dn_str,
                settings->invocation_id == NULL?"None":GUID_string(mem_ctx, settings->invocation_id)));
 
-       DEBUG(0,("Pathes under targetdir[%s]\n",
+       DEBUG(0,("Paths under targetdir[%s]\n",
                 settings->targetdir));
        parameters = PyDict_New();
 
-       configfile = lp_configfile(lp_ctx);
+       configfile = lpcfg_configfile(lp_ctx);
        if (configfile != NULL) {
                PyDict_SetItemString(parameters, "smbconf", 
                                     PyString_FromString(configfile));
@@ -138,8 +131,6 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
        if (settings->targetdir != NULL)
                PyDict_SetItemString(parameters, "targetdir", 
                                                         PyString_FromString(settings->targetdir));
-       PyDict_SetItemString(parameters, "setup_dir", 
-                            PyString_FromString("setup"));
        PyDict_SetItemString(parameters, "hostname", 
                                                 PyString_FromString(settings->netbios_name));
        PyDict_SetItemString(parameters, "domain", 
@@ -189,7 +180,12 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
        result->domaindn = talloc_strdup(mem_ctx, PyString_AsString(PyObject_GetAttrString(py_result, "domaindn")));
 
        /* FIXME paths */
-       result->lp_ctx = lp_from_py_object(PyObject_GetAttrString(py_result, "lp"));
+       py_lp_ctx = PyObject_GetAttrString(py_result, "lp");
+       if (py_lp_ctx == NULL) {
+               DEBUG(0, ("Missing 'lp' attribute"));
+               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"));
 
        return NT_STATUS_OK;
@@ -224,7 +220,7 @@ NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context
        }
 
        /* 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, 
@@ -243,9 +239,8 @@ NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context
                return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
        }
 
-       py_load_samba_modules();
        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) {
@@ -280,8 +275,10 @@ NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context
                             PyLdb_FromLdbContext(ldb));
        PyDict_SetItemString(parameters, "domain", 
                             PyString_FromString(settings->domain_name));
-       PyDict_SetItemString(parameters, "realm", 
-                            PyString_FromString(settings->realm));
+       if (settings->realm != NULL) {
+               PyDict_SetItemString(parameters, "realm",
+                                    PyString_FromString(settings->realm));
+       }
        PyDict_SetItemString(parameters, "machinepass", 
                             PyString_FromString(settings->machine_password));
        PyDict_SetItemString(parameters, "netbiosname", 
@@ -333,16 +330,13 @@ failure:
 }
 
 
-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,
+                                        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_load_samba_modules();
        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();
 
@@ -368,9 +362,11 @@ struct ldb_context *provision_get_schema(TALLOC_CTX *mem_ctx, struct loadparm_co
        
        parameters = PyDict_New();
 
-       setupdir = lp_setupdir(lp_ctx);
-       PyDict_SetItemString(parameters, "setup_dir", 
-                            PyString_FromString(setupdir));
+       if (override_prefixmap) {
+               PyDict_SetItemString(parameters, "override_prefixmap",
+                                    PyString_FromStringAndSize((const char *)override_prefixmap->data,
+                                                               override_prefixmap->length));
+       }
 
        py_result = PyEval_CallObjectWithKeywords(schema_fn, NULL, parameters);