Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : Samba utility functions 4 : Copyright (C) Amitay Isaacs <amitay@gmail.com> 2011 5 : 6 : This program is free software; you can redistribute it and/or modify 7 : it under the terms of the GNU General Public License as published by 8 : the Free Software Foundation; either version 3 of the License, or 9 : (at your option) any later version. 10 : 11 : This program is distributed in the hope that it will be useful, 12 : but WITHOUT ANY WARRANTY; without even the implied warranty of 13 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 : GNU General Public License for more details. 15 : 16 : You should have received a copy of the GNU General Public License 17 : along with this program. If not, see <http://www.gnu.org/licenses/>. 18 : */ 19 : 20 : #include <Python.h> 21 : #include "includes.h" 22 : #include "python/py3compat.h" 23 : #include "param/param.h" 24 : #include "param/loadparm.h" 25 : #include "lib/talloc/pytalloc.h" 26 : 27 : static PyTypeObject *loadparm_Type = NULL; 28 : 29 : void initparam(void); 30 : 31 807 : static PyObject *py_get_context(PyObject *self, PyObject *Py_UNUSED(ignored)) 32 : { 33 : PyObject *py_loadparm; 34 : const struct loadparm_s3_helpers *s3_context; 35 : const struct loadparm_context *s4_context; 36 : TALLOC_CTX *mem_ctx; 37 : 38 807 : mem_ctx = talloc_new(NULL); 39 807 : if (mem_ctx == NULL) { 40 0 : PyErr_NoMemory(); 41 0 : return NULL; 42 : } 43 : 44 807 : s3_context = loadparm_s3_helpers(); 45 : 46 807 : s4_context = loadparm_init_s3(mem_ctx, s3_context); 47 807 : if (s4_context == NULL) { 48 0 : PyErr_NoMemory(); 49 0 : return NULL; 50 : } 51 : 52 807 : py_loadparm = pytalloc_steal(loadparm_Type, discard_const_p(struct loadparm_context, s4_context)); 53 807 : if (py_loadparm == NULL) { 54 0 : talloc_free(mem_ctx); 55 0 : PyErr_NoMemory(); 56 0 : return NULL; 57 : } 58 : 59 807 : talloc_free(mem_ctx); 60 : 61 807 : return py_loadparm; 62 : } 63 : 64 : static PyMethodDef pyparam_methods[] = { 65 : { "get_context", (PyCFunction)py_get_context, METH_NOARGS, 66 : "Returns LoadParm context." }, 67 : {0} 68 : }; 69 : 70 : static struct PyModuleDef moduledef = { 71 : PyModuleDef_HEAD_INIT, 72 : .m_name = "param", 73 : .m_doc = "Parsing and writing Samba3 configuration files.", 74 : .m_size = -1, 75 : .m_methods = pyparam_methods, 76 : }; 77 : 78 1215 : MODULE_INIT_FUNC(param) 79 : { 80 1215 : PyObject *m = NULL, *mod = NULL; 81 : 82 1215 : m = PyModule_Create(&moduledef); 83 1215 : if (m == NULL) 84 0 : return NULL; 85 : 86 1215 : mod = PyImport_ImportModule("samba.param"); 87 1215 : if (mod == NULL) { 88 0 : return NULL; 89 : } 90 : 91 1215 : loadparm_Type = (PyTypeObject *)PyObject_GetAttrString(mod, "LoadParm"); 92 1215 : Py_DECREF(mod); 93 1215 : if (loadparm_Type == NULL) { 94 0 : return NULL; 95 : } 96 1215 : return m; 97 : }