mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
ba5f00deb7
With the changes to make samba python code Py2/Py3 compatible there now are many instances where string content is decoded. Decoded string variables in Py2 are returned as the unicode type. Many Py2 c-module functions that take string arguments only check for the string type. However now it's quite possibe the content formally passed as a string argument is now passed as unicode after being decoded, such arguments are rejected and code can fail subtly. This only affects places where the type is directly checked e.g. via PyStr_Check etc. arguments that are parsed by ParseTuple* functions generally already accept both string and unicode (if 's', 'z', 's*' format specifiers are used) Signed-off-by: Noel Power <noel.power@suse.com> Reviewed-by: Alexander Bokovoy <ab@samba.org>
82 lines
2.2 KiB
C
82 lines
2.2 KiB
C
/*
|
|
Unix SMB/CIFS implementation.
|
|
Samba utility functions
|
|
Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007-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 <Python.h>
|
|
#include "py3compat.h"
|
|
#include "includes.h"
|
|
#include "param/param.h"
|
|
#include "param/pyparam.h"
|
|
#include "param/loadparm.h"
|
|
#include <pytalloc.h>
|
|
|
|
#define PyLoadparmContext_AsLoadparmContext(obj) pytalloc_get_type(obj, struct loadparm_context)
|
|
|
|
_PUBLIC_ struct loadparm_context *lpcfg_from_py_object(TALLOC_CTX *mem_ctx, PyObject *py_obj)
|
|
{
|
|
struct loadparm_context *lp_ctx;
|
|
PyObject *param_mod;
|
|
PyTypeObject *lp_type;
|
|
bool is_lpobj;
|
|
|
|
if (PyStr_Check(py_obj) || PyUnicode_Check(py_obj)) {
|
|
lp_ctx = loadparm_init_global(false);
|
|
if (lp_ctx == NULL) {
|
|
return NULL;
|
|
}
|
|
if (!lpcfg_load(lp_ctx, PyStr_AsString(py_obj))) {
|
|
PyErr_Format(PyExc_RuntimeError, "Unable to load %s",
|
|
PyStr_AsString(py_obj));
|
|
return NULL;
|
|
}
|
|
return lp_ctx;
|
|
}
|
|
|
|
if (py_obj == Py_None) {
|
|
return loadparm_init_global(true);
|
|
}
|
|
|
|
param_mod = PyImport_ImportModule("samba.param");
|
|
if (param_mod == NULL) {
|
|
return NULL;
|
|
}
|
|
|
|
lp_type = (PyTypeObject *)PyObject_GetAttrString(param_mod, "LoadParm");
|
|
Py_DECREF(param_mod);
|
|
if (lp_type == NULL) {
|
|
PyErr_SetString(PyExc_RuntimeError, "Unable to import LoadParm");
|
|
return NULL;
|
|
}
|
|
|
|
is_lpobj = PyObject_TypeCheck(py_obj, lp_type);
|
|
Py_DECREF(lp_type);
|
|
if (is_lpobj) {
|
|
return talloc_reference(mem_ctx, PyLoadparmContext_AsLoadparmContext(py_obj));
|
|
}
|
|
|
|
PyErr_SetNone(PyExc_TypeError);
|
|
return NULL;
|
|
}
|
|
|
|
struct loadparm_context *py_default_loadparm_context(TALLOC_CTX *mem_ctx)
|
|
{
|
|
return loadparm_init_global(true);
|
|
}
|
|
|
|
|