1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

python: create NTSTATUSError, HRESULTError and WERRORError

The advantage of these over the previous use of just RuntimeError is that we can
catch just the errors we want, without having to catch all possible RuntimeError
cases and assume they decode to a tuple

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12398
This commit is contained in:
Andrew Bartlett 2016-11-01 15:23:58 +13:00 committed by Garming Sam
parent f72da5ba51
commit c8505c53da
3 changed files with 36 additions and 3 deletions

View File

@ -24,6 +24,9 @@
#include "lib/socket/netif.h"
void init_glue(void);
static PyObject *PyExc_NTSTATUSError;
static PyObject *PyExc_WERRORError;
static PyObject *PyExc_HRESULTError;
static PyObject *py_generate_random_str(PyObject *self, PyObject *args)
{
@ -294,5 +297,22 @@ void init_glue(void)
PyModule_AddObject(m, "version",
PyString_FromString(SAMBA_VERSION_STRING));
PyExc_NTSTATUSError = PyErr_NewException(discard_const_p(char, "samba.NTSTATUSError"), PyExc_RuntimeError, NULL);
if (PyExc_NTSTATUSError != NULL) {
Py_INCREF(PyExc_NTSTATUSError);
PyModule_AddObject(m, "NTSTATUSError", PyExc_NTSTATUSError);
}
PyExc_WERRORError = PyErr_NewException(discard_const_p(char, "samba.WERRORError"), PyExc_RuntimeError, NULL);
if (PyExc_WERRORError != NULL) {
Py_INCREF(PyExc_WERRORError);
PyModule_AddObject(m, "WERRORError", PyExc_WERRORError);
}
PyExc_HRESULTError = PyErr_NewException(discard_const_p(char, "samba.HRESULTError"), PyExc_RuntimeError, NULL);
if (PyExc_HRESULTError != NULL) {
Py_INCREF(PyExc_HRESULTError);
PyModule_AddObject(m, "HRESULTError", PyExc_HRESULTError);
}
}

View File

@ -399,3 +399,7 @@ generate_random_password = _glue.generate_random_password
strcasecmp_m = _glue.strcasecmp_m
strstr_m = _glue.strstr_m
is_ntvfs_fileserver_built = _glue.is_ntvfs_fileserver_built
NTSTATUSError = _glue.NTSTATUSError
HRESULTError = _glue.HRESULTError
WERRORError = _glue.WERRORError

View File

@ -28,11 +28,20 @@
#define PyErr_FromString(str) Py_BuildValue("(s)", discard_const_p(char, str))
#define PyErr_SetWERROR(err) \
PyErr_SetObject(PyExc_RuntimeError, PyErr_FromWERROR(err))
#define PyErr_SetWERROR(werr) \
PyErr_SetObject(PyObject_GetAttrString(PyImport_ImportModule("samba"),\
"WERRORError"), \
PyErr_FromWERROR(werr))
#define PyErr_SetHRESULT(hresult) \
PyErr_SetObject(PyObject_GetAttrString(PyImport_ImportModule("samba"),\
"HRESULTError"), \
PyErr_FromHRESULT(hresult))
#define PyErr_SetNTSTATUS(status) \
PyErr_SetObject(PyExc_RuntimeError, PyErr_FromNTSTATUS(status))
PyErr_SetObject(PyObject_GetAttrString(PyImport_ImportModule("samba"),\
"NTSTATUSError"), \
PyErr_FromNTSTATUS(status))
#define PyErr_NTSTATUS_IS_ERR_RAISE(status) \
if (NT_STATUS_IS_ERR(status)) { \