add NDR_ERR_UNREAD_BYTES and don't use NTSTATUS directly
authormetze <metze@0c0555d6-39d7-0310-84fc-f1cc0bd64818>
Thu, 1 Nov 2007 09:50:24 +0000 (09:50 +0000)
committerStefan Metzmacher <metze@samba.org>
Wed, 7 Nov 2007 11:10:30 +0000 (12:10 +0100)
metze

git-svn-id: svn+ssh://svn.samba.org/data/svn/samba/branches/SAMBA_4_0@25777 0c0555d6-39d7-0310-84fc-f1cc0bd64818

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

index ee2746403177d4f4044817315fbd5dea44fd12a9..f09693feb8ac1f583db4adf5231349a83b4b42ce 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 3ceb728a3f33b83340a9ee1cab68fea37789cc48..26bda3372314f170eb5a65495cb101a567ee49b7 100644 (file)
@@ -330,6 +330,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;
        }
@@ -711,7 +713,9 @@ NTSTATUS ndr_pull_struct_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, vo
        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;
 }
@@ -749,7 +753,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;
 }