summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/pyglue.c20
-rw-r--r--python/samba/__init__.py4
-rw-r--r--source4/libcli/util/pyerrors.h15
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)) { \