summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-05-24 23:22:49 +0200
committerJelmer Vernooij <jelmer@samba.org>2008-05-24 23:22:49 +0200
commit21b6e9ec9ea08cc5e19a068d68331c178091caa6 (patch)
treeb08abad23a8e34bb3cb6aa9ff4f3e98942149c01
parent5863864f1d8df53b32f24cf41e726e3bddb528ce (diff)
downloadsamba-21b6e9ec9ea08cc5e19a068d68331c178091caa6.tar.gz
samba-21b6e9ec9ea08cc5e19a068d68331c178091caa6.tar.bz2
samba-21b6e9ec9ea08cc5e19a068d68331c178091caa6.zip
Add convenience function for creating objects with NDR error codes.
(This used to be commit 991541a78c2428db89509081cc28072c9b542ffa)
-rw-r--r--source4/librpc/rpc/pyrpc.h6
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/Python.pm4
2 files changed, 8 insertions, 2 deletions
diff --git a/source4/librpc/rpc/pyrpc.h b/source4/librpc/rpc/pyrpc.h
index 3857f53634..65501b6b83 100644
--- a/source4/librpc/rpc/pyrpc.h
+++ b/source4/librpc/rpc/pyrpc.h
@@ -45,4 +45,10 @@ typedef struct {
PyAPI_DATA(PyTypeObject) dcerpc_InterfaceType;
+#define PyErr_FromNdrError(err) PyErr_FromNTSTATUS(ndr_map_error2ntstatus(err))
+
+#define PyErr_SetNdrError(err) \
+ PyErr_SetObject(PyExc_RuntimeError, PyErr_FromNdrError(err))
+
+
#endif /* _PYRPC_H_ */
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm b/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm
index 5e76ff027b..26197365ee 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -241,7 +241,7 @@ sub PythonStruct($$$$$$)
$self->pidl("err = ndr_push_struct_blob(&blob, py_talloc_get_mem_ctx(py_obj), NULL, object, (ndr_push_flags_fn_t)ndr_push_$name);");
$self->pidl("if (err != NDR_ERR_SUCCESS) {");
$self->indent;
- $self->pidl("PyErr_SetString(PyExc_RuntimeError, \"Unable to ndr pack\");");
+ $self->pidl("PyErr_SetNdrError(err);");
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
@@ -263,7 +263,7 @@ sub PythonStruct($$$$$$)
$self->pidl("err = ndr_pull_struct_blob_all(&blob, py_talloc_get_mem_ctx(py_obj), NULL, object, (ndr_pull_flags_fn_t)ndr_pull_$name);");
$self->pidl("if (err != NDR_ERR_SUCCESS) {");
$self->indent;
- $self->pidl("PyErr_SetString(PyExc_RuntimeError, \"Unable to ndr unpack\");");
+ $self->pidl("PyErr_SetNdrError(err);");
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");