1
0
mirror of https://github.com/samba-team/samba.git synced 2025-04-30 18:53:31 +03:00
Jelmer Vernooij dd2a4719df r26096: No longer include removed header
(This used to be commit 42738301b1c88ccf46405d6c9171b3ae082423bd)
2007-12-21 05:46:00 +01:00

182 lines
4.4 KiB
C

/*
Unix SMB/CIFS implementation.
Python wrapper for reading smb.conf files
Copyright (C) Jelmer Vernooij 2007
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "includes.h"
#include "Python.h"
#include "param/param.h"
staticforward PyTypeObject param_ParamFileType;
typedef struct {
PyObject_HEAD
struct param_context *param_ctx;
} param_ParamFileObject;
static param_ParamFileObject *py_param_init(void)
{
param_ParamFileObject *param;
param = PyObject_New(param_ParamFileObject, &param_ParamFileType);
param->param_ctx = param_init(NULL);
return param;
}
static PyObject *py_param_load(PyObject *self, PyObject *args)
{
char *filename = NULL;
param_ParamFileObject *param;
if (!PyArg_ParseTuple(args, "|s:new", &filename))
return NULL;
param = py_param_init();
if (filename != NULL) {
int ret = param_read(param->param_ctx, filename);
if (ret == -1) {
PyErr_SetString(PyExc_TypeError, "reading file failed");
return NULL;
}
}
return (PyObject *)param;
}
static void
param_dealloc(PyObject* self)
{
PyObject_Del(self);
}
static PyObject *py_param_get(PyObject *_self, PyObject *args)
{
struct param_opt *param;
const char *section_name = NULL, *param_name = NULL;
param_ParamFileObject *self = (param_ParamFileObject *)_self;
if (!PyArg_ParseTuple(args, (char *)"s|s", &param_name, &section_name))
return NULL;
param = param_get(self->param_ctx, section_name, param_name);
if (param == NULL)
return Py_None;
return PyString_FromString(param->value);
}
static PyObject *py_param_set(PyObject *_self, PyObject *args)
{
param_ParamFileObject *self = (param_ParamFileObject *)_self;
const char *section_name = NULL, *param_name = NULL, *param_value = NULL;
if (!PyArg_ParseTuple(args, "ss|s", &param_name, &param_value, &section_name))
return NULL;
if (section_name == NULL)
section_name = GLOBAL_NAME;
if (param_set_string(self->param_ctx, section_name, param_name, param_value) != 0) {
PyErr_SetString(PyExc_TypeError, "setting variable failed");
return NULL;
}
return Py_None;
}
static PyObject *py_param_save(PyObject *_self, PyObject *args)
{
param_ParamFileObject *self = (param_ParamFileObject *)_self;
const char *filename = NULL;
if (!PyArg_ParseTuple(args, "s", &filename))
return NULL;
if (param_write(self->param_ctx, filename) != 0) {
PyErr_SetString(PyExc_TypeError, "unable to save");
return NULL;
}
return Py_None;
}
static PyObject *py_param_use(PyObject *_self, PyObject *args)
{
param_ParamFileObject *self = (param_ParamFileObject *)_self;
if (!PyArg_ParseTuple(args, ""))
return NULL;
if (param_use(global_loadparm, self->param_ctx) != 0) {
PyErr_SetString(PyExc_TypeError, "unable to use");
return NULL;
}
return Py_None;
}
static PyMethodDef param_methods[] = {
{"get", (PyCFunction)py_param_get, METH_VARARGS,
"Get a parameter."},
{"set", (PyCFunction)py_param_set, METH_VARARGS,
"Set a parameter."},
{"save", (PyCFunction)py_param_save, METH_VARARGS,
"Save file" },
{"use", (PyCFunction)py_param_use, METH_VARARGS,
"Use param file" },
{NULL, NULL, 0, NULL}
};
static PyObject *
param_getattr(PyTypeObject *obj, char *name)
{
return Py_FindMethod(param_methods, (PyObject *)obj, name);
}
static PyTypeObject param_ParamFileType = {
PyObject_HEAD_INIT(NULL) 0,
.tp_name = "ParamFile",
.tp_basicsize = sizeof(param_ParamFileObject),
.tp_dealloc = param_dealloc,
.tp_getattr = param_getattr,
};
static PyMethodDef methods[] = {
{ "ParamFile", (PyCFunction)py_param_load, METH_VARARGS, NULL},
{ NULL, NULL }
};
PyDoc_STRVAR(param_doc, "Simple wrappers around the smb.conf parsers");
PyMODINIT_FUNC initparam(void)
{
PyObject *mod = Py_InitModule3("param", methods, param_doc);
if (mod == NULL)
return;
PyModule_AddObject(mod, "configfile",
PyString_FromString(lp_configfile(global_loadparm)));
}