Merge branch 'master' of ssh://git.samba.org/data/git/samba
authorJelmer Vernooij <jelmer@samba.org>
Mon, 26 Jan 2009 17:14:41 +0000 (18:14 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 26 Jan 2009 17:14:41 +0000 (18:14 +0100)
librpc/ndr/libndr.h
librpc/ndr/ndr.c
source4/librpc/rpc/pyrpc.h

index fdecddc0fcc5090d38f7972c8dfe925cd45c7000..4ab0bf5f0bb6dddbd115cd9cd6c0b2bf3275be89 100644 (file)
@@ -342,6 +342,7 @@ struct ndr_interface_list {
  Map an NT error code from a NDR error code.
 *********************************************************************/
 NTSTATUS ndr_map_error2ntstatus(enum ndr_err_code ndr_err);
+const char *ndr_map_error2string(enum ndr_err_code ndr_err);
 
 /* FIXME: Use represent_as instead */
 struct dom_sid;
index 22b9fccbb537bdb1215d72977bda6c46e3373381..2341f51faa03315032ea03c8c81fecdbc090e164 100644 (file)
@@ -1122,3 +1122,38 @@ _PUBLIC_ enum ndr_err_code ndr_pull_relative_ptr2(struct ndr_pull *ndr, const vo
        NDR_CHECK(ndr_token_retrieve(&ndr->relative_list, p, &rel_offset));
        return ndr_pull_set_offset(ndr, rel_offset);
 }
+
+const static struct {
+       enum ndr_err_code err;
+       const char *string;
+} ndr_err_code_strings[] = {
+       { NDR_ERR_SUCCESS, "Success" },
+       { NDR_ERR_ARRAY_SIZE, "Bad Array Size" },
+       { NDR_ERR_BAD_SWITCH, "Bad Switch" },
+       { NDR_ERR_OFFSET, "Offset Error" },
+       { NDR_ERR_RELATIVE, "Relative Pointer Error" },
+       { NDR_ERR_CHARCNV, "Character Conversion Error" },
+       { NDR_ERR_LENGTH, "Length Error" },
+       { NDR_ERR_SUBCONTEXT, "Subcontext Error" },
+       { NDR_ERR_COMPRESSION, "Compression Error" },
+       { NDR_ERR_STRING, "String Error" },
+       { NDR_ERR_VALIDATE, "Validate Error" },
+       { NDR_ERR_BUFSIZE, "Buffer Size Error" },
+       { NDR_ERR_ALLOC, "Allocation Error" },
+       { NDR_ERR_RANGE, "Range Error" },
+       { NDR_ERR_TOKEN, "Token Error" },
+       { NDR_ERR_IPV4ADDRESS, "IPv4 Address Error" },
+       { NDR_ERR_INVALID_POINTER, "Invalid Pointer" },
+       { NDR_ERR_UNREAD_BYTES, "Unread Bytes" },
+       { 0, NULL }
+};
+
+_PUBLIC_ const char *ndr_map_error2string(enum ndr_err_code ndr_err)
+{
+       int i;
+       for (i = 0; ndr_err_code_strings[i].string != NULL; i++) {
+               if (ndr_err_code_strings[i].err == ndr_err)
+                       return ndr_err_code_strings[i].string;
+       }
+       return "Unknown error";
+}
index 6d5193f57e4d56443a5686927e407c9d2bb1376b..ae622b562c6de5db02a0d3abb7ed2a89e9f21cb3 100644 (file)
@@ -48,7 +48,7 @@ typedef struct {
 
 PyAPI_DATA(PyTypeObject) dcerpc_InterfaceType;
 
-#define PyErr_FromNdrError(err) PyErr_FromNTSTATUS(ndr_map_error2ntstatus(err))
+#define PyErr_FromNdrError(err) Py_BuildValue("(is)", err, ndr_map_error2string(err))
 
 #define PyErr_SetNdrError(err) \
                PyErr_SetObject(PyExc_RuntimeError, PyErr_FromNdrError(err))