mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
Export functions for setting NTSTATUS and WERRORs in python.
This commit is contained in:
parent
9c2eff0289
commit
4bcb92d2d4
@ -18,10 +18,13 @@
|
||||
*/
|
||||
|
||||
#ifdef SWIGPYTHON
|
||||
%{
|
||||
#include "libcli/util/pyerrors.h"
|
||||
%}
|
||||
|
||||
%typemap(out,noblock=1) WERROR {
|
||||
if (!W_ERROR_IS_OK($1)) {
|
||||
PyObject *obj = Py_BuildValue((char *)"(i,s)", W_ERROR_V($1), win_errstr($1));
|
||||
PyErr_SetObject(PyExc_RuntimeError, obj);
|
||||
PyErr_SetWERROR($1);
|
||||
SWIG_fail;
|
||||
} else if ($result == NULL) {
|
||||
$result = Py_None;
|
||||
@ -30,8 +33,7 @@
|
||||
|
||||
%typemap(out,noblock=1) NTSTATUS {
|
||||
if (NT_STATUS_IS_ERR($1)) {
|
||||
PyObject *obj = Py_BuildValue((char *)"(i,s)", NT_STATUS_V($1), nt_errstr($1));
|
||||
PyErr_SetObject(PyExc_RuntimeError, obj);
|
||||
PyErr_SetNTSTATUS($1);
|
||||
SWIG_fail;
|
||||
} else if ($result == NULL) {
|
||||
$result = Py_None;
|
||||
|
29
source/libcli/util/pyerrors.h
Normal file
29
source/libcli/util/pyerrors.h
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#ifndef __PYERRORS_H__
|
||||
#define __PYERRORS_H__
|
||||
|
||||
#define PyErr_SetWERROR(err) \
|
||||
PyErr_SetObject(PyExc_RuntimeError, Py_BuildValue((char *)"(i,s)", W_ERROR_V(err), discard_const_p(char, win_errstr(err))))
|
||||
|
||||
#define PyErr_SetNTSTATUS(status) \
|
||||
PyErr_SetObject(PyExc_RuntimeError, Py_BuildValue((char *)"(i,s)", NT_STATUS_V(status), discard_const_p(char, nt_errstr(status))))
|
||||
|
||||
#endif /* __PYERRORS_H__ */
|
@ -22,6 +22,7 @@
|
||||
#include "librpc/rpc/pyrpc.h"
|
||||
#include "librpc/rpc/dcerpc.h"
|
||||
#include "lib/events/events.h"
|
||||
#include "libcli/util/pyerrors.h"
|
||||
|
||||
static PyObject *py_iface_server_name(PyObject *obj, void *closure)
|
||||
{
|
||||
@ -58,15 +59,14 @@ static PyObject *py_iface_request(PyObject *self, PyObject *args, PyObject *kwar
|
||||
return NULL;
|
||||
}
|
||||
|
||||
data_in.data = talloc_strndup(mem_ctx, in_data, in_length);
|
||||
data_in.data = (uint8_t *)talloc_strndup(mem_ctx, in_data, in_length);
|
||||
data_in.length = in_length;
|
||||
|
||||
status = dcerpc_request(iface->pipe, NULL /* FIXME: object GUID */,
|
||||
opnum, false, mem_ctx, &data_in, &data_out);
|
||||
|
||||
if (NT_STATUS_IS_ERR(status)) {
|
||||
/* FIXME: Set more appropriate error */
|
||||
PyErr_SetString(PyExc_RuntimeError, "Unable to connect");
|
||||
PyErr_SetNTSTATUS(status);
|
||||
talloc_free(mem_ctx);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -35,7 +35,7 @@
|
||||
%import "../../auth/credentials/credentials.i"
|
||||
%import "../../param/param.i"
|
||||
%import "../../libcli/security/security.i"
|
||||
%import "../../libcli/util/errors.i"
|
||||
%include "../../libcli/util/errors.i"
|
||||
|
||||
%feature("docstring") generate_random_str "S.random_password(len) -> string\n" \
|
||||
"Generate random password with specified length.";
|
||||
@ -97,7 +97,6 @@ bool dsdb_set_ntds_invocation_id(struct ldb_context *ldb, const char *guid)
|
||||
}
|
||||
%}
|
||||
|
||||
char *private_path(TALLOC_CTX* mem_ctx,
|
||||
struct loadparm_context *lp_ctx,
|
||||
const char *name);
|
||||
char *private_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
|
||||
const char *name);
|
||||
|
||||
|
@ -2554,6 +2554,9 @@ static swig_module_info swig_module = {swig_types, 27, 0, 0, 0, 0};
|
||||
#include "librpc/ndr/libndr.h"
|
||||
|
||||
|
||||
#include "libcli/util/pyerrors.h"
|
||||
|
||||
|
||||
SWIGINTERN int
|
||||
SWIG_AsVal_double (PyObject *obj, double *val)
|
||||
{
|
||||
@ -3046,8 +3049,7 @@ SWIGINTERN PyObject *_wrap_dsdb_attach_schema_from_ldif_file(PyObject *SWIGUNUSE
|
||||
"ldb context must be non-NULL");
|
||||
result = dsdb_attach_schema_from_ldif_file(arg1,(char const *)arg2,(char const *)arg3);
|
||||
if (!W_ERROR_IS_OK(result)) {
|
||||
PyObject *obj = Py_BuildValue((char *)"(i,s)", W_ERROR_V(result), win_errstr(result));
|
||||
PyErr_SetObject(PyExc_RuntimeError, obj);
|
||||
PyErr_SetWERROR(result);
|
||||
SWIG_fail;
|
||||
} else if (resultobj == NULL) {
|
||||
resultobj = Py_None;
|
||||
|
Loading…
Reference in New Issue
Block a user