provision: Avoid linking in multiple copies of security python module.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 23 Sep 2009 09:01:52 +0000 (11:01 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Wed, 23 Sep 2009 13:24:10 +0000 (15:24 +0200)
source4/librpc/ndr/py_security.c
source4/librpc/ndr/py_security.h [deleted file]
source4/param/config.mk
source4/param/provision.c

index 1b185a51b53d6c8de25837884724ed3608300404..02dc059f0587b9f735a1ef7517f9001e2cd7875f 100644 (file)
 #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
 #endif
 
-PyObject *py_dom_sid_FromSid(struct dom_sid *sid)
-{
-       return py_talloc_reference(&dom_sid_Type, sid);
-}
-
 static void PyType_AddMethods(PyTypeObject *type, PyMethodDef *methods)
 {
        PyObject *dict;
diff --git a/source4/librpc/ndr/py_security.h b/source4/librpc/ndr/py_security.h
deleted file mode 100644 (file)
index 9d200fa..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Samba utility functions
-   Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "libcli/security/security.h"
-
-/* a lone prototype for this function, because it's python */
-PyObject *py_dom_sid_FromSid(struct dom_sid *sid);
index 45eb836bb4d7b80e897e824c940eaf97899ddda6..6e5290b64d96aaf77eaa3c444fd37e3d77079a7e 100644 (file)
@@ -13,7 +13,7 @@ PUBLIC_HEADERS += param/param.h
 PC_FILES += $(paramsrcdir)/samba-hostconfig.pc
 
 [SUBSYSTEM::PROVISION]
-PRIVATE_DEPENDENCIES = LIBPYTHON pyldb pyparam_util python_dcerpc_security
+PRIVATE_DEPENDENCIES = LIBPYTHON pyldb pyparam_util
 
 PROVISION_OBJ_FILES = $(paramsrcdir)/provision.o $(param_OBJ_FILES)
 
index 355af794d82017c17c9af54ccc6f478892e6505d..8a522e40a91d747443cffba5ea12a862f547049f 100644 (file)
@@ -1,7 +1,7 @@
 /* 
    Unix SMB/CIFS implementation.
    Samba utility functions
-   Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
+   Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008-2009
    Copyright (C) Andrew Bartlett <abartlet@samba.org> 2005
 
    This program is free software; you can redistribute it and/or modify
@@ -35,7 +35,6 @@
 #include "scripting/python/modules.h"
 #include "lib/ldb/pyldb.h"
 #include "param/pyparam.h"
-#include "librpc/ndr/py_security.h"
 
 NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
                        struct provision_settings *settings, 
@@ -155,6 +154,21 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
 extern void initldb(void);
 extern void initsecurity(void);
 
+static PyObject *py_dom_sid_FromSid(struct dom_sid *sid)
+{
+       PyObject *mod_security, *dom_sid_Type;
+
+       mod_security = PyImport_ImportModule("samba.dcerpc.security");
+       if (mod_security == NULL)
+               return NULL;
+
+       dom_sid_Type = PyObject_GetAttrString(mod_security, "dom_sid");
+       if (dom_sid_Type == NULL)
+               return NULL;
+
+       return py_talloc_reference((PyTypeObject *)dom_sid_Type, sid);
+}
+
 NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
                                   struct tevent_context *event_ctx,
                                   struct provision_store_self_join_settings *settings,
@@ -237,6 +251,10 @@ NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context
                             PyString_FromString(settings->netbios_name));
 
        py_sid = py_dom_sid_FromSid(settings->domain_sid);
+       if (py_sid == NULL) {
+               Py_DECREF(parameters);
+               goto failure;
+       }
 
        PyDict_SetItemString(parameters, "domainsid", 
                             py_sid);
@@ -252,12 +270,7 @@ NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context
        Py_DECREF(parameters);
 
        if (py_result == NULL) {
-               ldb_transaction_cancel(ldb);
-               talloc_free(tmp_mem);
-
-               PyErr_Print();
-               PyErr_Clear();
-               return NT_STATUS_UNSUCCESSFUL;
+               goto failure;
        }
 
        ret = ldb_transaction_commit(ldb);
@@ -272,4 +285,12 @@ NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context
        talloc_free(tmp_mem);
 
        return NT_STATUS_OK;
+
+failure:
+       ldb_transaction_cancel(ldb);
+       talloc_free(tmp_mem);
+
+       PyErr_Print();
+       PyErr_Clear();
+       return NT_STATUS_UNSUCCESSFUL;
 }