diff options
-rw-r--r-- | python/pyglue.c | 20 | ||||
-rw-r--r-- | python/samba/__init__.py | 4 | ||||
-rw-r--r-- | source4/libcli/util/pyerrors.h | 15 |
3 files changed, 36 insertions, 3 deletions
diff --git a/python/pyglue.c b/python/pyglue.c index 81244a24973..938a9f0ecf4 100644 --- a/python/pyglue.c +++ b/python/pyglue.c @@ -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); + } } diff --git a/python/samba/__init__.py b/python/samba/__init__.py index 7cfbc4c1088..8c75a48874b 100644 --- a/python/samba/__init__.py +++ b/python/samba/__init__.py @@ -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 diff --git a/source4/libcli/util/pyerrors.h b/source4/libcli/util/pyerrors.h index ef997131fff..9228c340ea7 100644 --- a/source4/libcli/util/pyerrors.h +++ b/source4/libcli/util/pyerrors.h @@ -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)) { \ |