r25777: add NDR_ERR_UNREAD_BYTES and don't use NTSTATUS directly
authorStefan Metzmacher <metze@samba.org>
Thu, 1 Nov 2007 08:50:24 +0000 (09:50 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:43:54 +0000 (05:43 +0100)
metze

source/librpc/ndr/libndr.h
source/librpc/ndr/ndr.c

index 1f0a3a976cbf0f076f423a2230988f2262a410eb..84a2bd52e3e25301d39984aa6dc9aa4eab0e0566 100644 (file)
@@ -175,7 +175,8 @@ enum ndr_err_code {
        NDR_ERR_RANGE,
        NDR_ERR_TOKEN,
        NDR_ERR_IPV4ADDRESS,
-       NDR_ERR_INVALID_POINTER
+       NDR_ERR_INVALID_POINTER,
+       NDR_ERR_UNREAD_BYTES
 };
 
 enum ndr_compression_alg {
index c209ee8088d5fc2aa3fdba0de4a3f4e253b35e0b..f12be783b19a3d71f51f23ffacd330934f9ab48c 100644 (file)
@@ -367,6 +367,8 @@ static NTSTATUS ndr_map_error(enum ndr_err_code ndr_err)
                return NT_STATUS_ARRAY_BOUNDS_EXCEEDED;
        case NDR_ERR_INVALID_POINTER:
                return NT_STATUS_INVALID_PARAMETER_MIX;
+       case NDR_ERR_UNREAD_BYTES:
+               return NT_STATUS_PORT_MESSAGE_TOO_LONG;
        default:
                break;
        }
@@ -748,7 +750,9 @@ _PUBLIC_ NTSTATUS ndr_pull_struct_blob_all(const DATA_BLOB *blob, TALLOC_CTX *me
        status = fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
        if (!NT_STATUS_IS_OK(status)) return status;
        if (ndr->offset < ndr->data_size) {
-               return NT_STATUS_PORT_MESSAGE_TOO_LONG;
+               return ndr_pull_error(ndr, NDR_ERR_UNREAD_BYTES,
+                                     "not all bytes consumed ofs[%u] size[%u]",
+                                     ndr->offset, ndr->data_size);
        }
        return NT_STATUS_OK;
 }
@@ -786,7 +790,9 @@ _PUBLIC_ NTSTATUS ndr_pull_union_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem
        status = fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
        if (!NT_STATUS_IS_OK(status)) return status;
        if (ndr->offset < ndr->data_size) {
-               return NT_STATUS_PORT_MESSAGE_TOO_LONG;
+               return ndr_pull_error(ndr, NDR_ERR_UNREAD_BYTES,
+                                     "not all bytes consumed ofs[%u] size[%u]",
+                                     ndr->offset, ndr->data_size);
        }
        return NT_STATUS_OK;
 }