Add infrastructure for returning ProvisionResult in C provision code.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 10 Apr 2008 03:23:17 +0000 (05:23 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 10 Apr 2008 03:23:17 +0000 (05:23 +0200)
(This used to be commit 98c3d34eb233be284e8c8994cca337be25c72968)

source4/param/provision.c
source4/param/provision.h
source4/scripting/python/samba/provision.py
source4/torture/local/torture.c

index 5d1f01c59a7cdc064ccfce3fcd2c824a0a88cc84..41b062883c31cc51bebbfe2104b46360071b8c3c 100644 (file)
 #include "scripting/python/modules.h"
 
 NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
-                       struct provision_settings *settings)
+                       struct provision_settings *settings, 
+                       struct provision_result *result)
 {
-       PyObject *provision_mod, *provision_dict, *provision_fn, *result, *parameters;
+       PyObject *provision_mod, *provision_dict, *provision_fn, *py_result, *parameters;
        
        DEBUG(0,("Provision for Become-DC test using python\n"));
 
@@ -115,15 +116,17 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
        PyDict_SetItemString(parameters, "machinepass", 
                             PyString_FromString(settings->machine_password));
 
-       result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters);
+       py_result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters);
 
        Py_DECREF(parameters);
 
-       if (result == NULL) {
+       if (py_result == NULL) {
                PyErr_Print();
                PyErr_Clear();
                return NT_STATUS_UNSUCCESSFUL;
        }
 
+       result->domaindn = talloc_strdup(mem_ctx, PyString_AsString(PyObject_GetAttrString(py_result, "domaindn")));
+
        return NT_STATUS_OK;
 }
index 323159d417c2bee0214e6088028c5d4deff5afcf..e739053d50e8c9d9aa05b654f3635c0bdfe4d6ea 100644 (file)
@@ -39,7 +39,13 @@ struct provision_settings {
        const char *targetdir;
 };
 
+/* FIXME: Rename this to hostconfig ? */
+struct provision_result {
+       const char *domaindn;
+};
+
 NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
-                                               struct provision_settings *settings);
+                                               struct provision_settings *settings,
+                                               struct provision_result *result);
 
 #endif /* _PROVISION_H_ */
index c9cdcdb768758328f889787e591a475c23336259..ccf67a0b4ae8788b2a2ff5aac59998faa5fdf9ba 100644 (file)
@@ -1082,7 +1082,7 @@ def provision_become_dc(setup_dir=None,
        """print a message if quiet is not set."""
         print text
 
-    provision(setup_dir, message, system_session(), None,
+    return provision(setup_dir, message, system_session(), None,
               smbconf=smbconf, targetdir=targetdir, samdb_fill=FILL_DRS, realm=realm, 
               rootdn=rootdn, domaindn=domaindn, schemadn=schemadn, configdn=configdn, serverdn=serverdn,
               domain=domain, hostname=hostname, hostip="127.0.0.1", domainsid=domainsid, machinepass=machinepass, serverrole="domain controller", sitename=sitename);
index 718bd38aad0bf684102f1b37a08f4666e24a31af..17d83456d590672e32726c78c7fecc881864309a 100644 (file)
@@ -44,6 +44,7 @@ static bool test_provision(struct torture_context *tctx)
 {
        NTSTATUS status;
        struct provision_settings *settings = talloc(tctx, struct provision_settings);
+       struct provision_result result;
        char *targetdir = NULL;
 
        torture_assert_ntstatus_ok(tctx, torture_temp_dir(tctx, "torture_provision", &targetdir), 
@@ -64,10 +65,13 @@ static bool test_provision(struct torture_context *tctx)
        settings->ntds_dn_str = NULL;
        settings->machine_password = "geheim";
 
-       status = provision_bare(settings, tctx->lp_ctx, settings);
+       status = provision_bare(settings, tctx->lp_ctx, settings, &result);
                        
        torture_assert_ntstatus_ok(tctx, status, "provision");
 
+       torture_assert_str_equal(tctx, result.domaindn, "DC=EXAMPLE,DC=COM", 
+                                "domaindn incorrect");
+
        return true;
 }