mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
librpc/rpc: move dcerpc_pull_ncacn_packet() from source3/librpc/rpc/ to the toplevel
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Günther Deschner <gd@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
parent
ab7868a964
commit
fc65e48cbe
@ -63,6 +63,50 @@ uint8_t dcerpc_get_endian_flag(DATA_BLOB *blob)
|
||||
return blob->data[DCERPC_DREP_OFFSET];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Decodes a ncacn_packet
|
||||
*
|
||||
* @param mem_ctx The memory context on which to allocate the packet
|
||||
* elements
|
||||
* @param blob The blob of data to decode
|
||||
* @param r An empty ncacn_packet, must not be NULL
|
||||
*
|
||||
* @return a NTSTATUS error code
|
||||
*/
|
||||
NTSTATUS dcerpc_pull_ncacn_packet(TALLOC_CTX *mem_ctx,
|
||||
const DATA_BLOB *blob,
|
||||
struct ncacn_packet *r)
|
||||
{
|
||||
enum ndr_err_code ndr_err;
|
||||
struct ndr_pull *ndr;
|
||||
|
||||
ndr = ndr_pull_init_blob(blob, mem_ctx);
|
||||
if (!ndr) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
if (!(CVAL(ndr->data, DCERPC_DREP_OFFSET) & DCERPC_DREP_LE)) {
|
||||
ndr->flags |= LIBNDR_FLAG_BIGENDIAN;
|
||||
}
|
||||
|
||||
if (CVAL(ndr->data, DCERPC_PFC_OFFSET) & DCERPC_PFC_FLAG_OBJECT_UUID) {
|
||||
ndr->flags |= LIBNDR_FLAG_OBJECT_PRESENT;
|
||||
}
|
||||
|
||||
ndr_err = ndr_pull_ncacn_packet(ndr, NDR_SCALARS|NDR_BUFFERS, r);
|
||||
|
||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||
talloc_free(ndr);
|
||||
return ndr_map_error2ntstatus(ndr_err);
|
||||
}
|
||||
talloc_free(ndr);
|
||||
|
||||
if (r->frag_length != blob->length) {
|
||||
return NT_STATUS_RPC_PROTOCOL_ERROR;
|
||||
}
|
||||
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Pull a dcerpc_auth structure, taking account of any auth
|
||||
|
@ -168,6 +168,10 @@ const char *dcerpc_default_transport_endpoint(TALLOC_CTX *mem_ctx,
|
||||
enum dcerpc_transport_t transport,
|
||||
const struct ndr_interface_table *table);
|
||||
|
||||
NTSTATUS dcerpc_pull_ncacn_packet(TALLOC_CTX *mem_ctx,
|
||||
const DATA_BLOB *blob,
|
||||
struct ncacn_packet *r);
|
||||
|
||||
/**
|
||||
* @brief Pull a dcerpc_auth structure, taking account of any auth
|
||||
* padding in the blob. For request/response packets we pass
|
||||
|
@ -59,9 +59,6 @@ NTSTATUS dcerpc_push_ncacn_packet(TALLOC_CTX *mem_ctx,
|
||||
uint32_t call_id,
|
||||
union dcerpc_payload *u,
|
||||
DATA_BLOB *blob);
|
||||
NTSTATUS dcerpc_pull_ncacn_packet(TALLOC_CTX *mem_ctx,
|
||||
const DATA_BLOB *blob,
|
||||
struct ncacn_packet *r);
|
||||
NTSTATUS dcerpc_push_dcerpc_auth(TALLOC_CTX *mem_ctx,
|
||||
enum dcerpc_AuthType auth_type,
|
||||
enum dcerpc_AuthLevel auth_level,
|
||||
|
@ -81,51 +81,6 @@ NTSTATUS dcerpc_push_ncacn_packet(TALLOC_CTX *mem_ctx,
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Decodes a ncacn_packet
|
||||
*
|
||||
* @param mem_ctx The memory context on which to allocate the packet
|
||||
* elements
|
||||
* @param blob The blob of data to decode
|
||||
* @param r An empty ncacn_packet, must not be NULL
|
||||
*
|
||||
* @return a NTSTATUS error code
|
||||
*/
|
||||
NTSTATUS dcerpc_pull_ncacn_packet(TALLOC_CTX *mem_ctx,
|
||||
const DATA_BLOB *blob,
|
||||
struct ncacn_packet *r)
|
||||
{
|
||||
enum ndr_err_code ndr_err;
|
||||
struct ndr_pull *ndr;
|
||||
|
||||
ndr = ndr_pull_init_blob(blob, mem_ctx);
|
||||
if (!ndr) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
if (!(CVAL(ndr->data, DCERPC_DREP_OFFSET) & DCERPC_DREP_LE)) {
|
||||
ndr->flags |= LIBNDR_FLAG_BIGENDIAN;
|
||||
}
|
||||
|
||||
if (CVAL(ndr->data, DCERPC_PFC_OFFSET) & DCERPC_PFC_FLAG_OBJECT_UUID) {
|
||||
ndr->flags |= LIBNDR_FLAG_OBJECT_PRESENT;
|
||||
}
|
||||
|
||||
ndr_err = ndr_pull_ncacn_packet(ndr, NDR_SCALARS|NDR_BUFFERS, r);
|
||||
|
||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||
talloc_free(ndr);
|
||||
return ndr_map_error2ntstatus(ndr_err);
|
||||
}
|
||||
talloc_free(ndr);
|
||||
|
||||
if (r->frag_length != blob->length) {
|
||||
return NT_STATUS_RPC_PROTOCOL_ERROR;
|
||||
}
|
||||
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NDR Encodes a dcerpc_auth structure
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user