summaryrefslogtreecommitdiff
path: root/source3/rpc_server/srv_pipe.c
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2010-07-15 10:28:59 -0400
committerGünther Deschner <gd@samba.org>2010-07-16 01:51:18 +0200
commit100d37fc4624690423f6a932709b3f9046d05c64 (patch)
tree282b8a75e561fedef7db3bd5c27df74cd95c5ef6 /source3/rpc_server/srv_pipe.c
parent8f2bfa88b5846528aa78840979a8ce8babef2cc0 (diff)
downloadsamba-100d37fc4624690423f6a932709b3f9046d05c64.tar.gz
samba-100d37fc4624690423f6a932709b3f9046d05c64.tar.bz2
samba-100d37fc4624690423f6a932709b3f9046d05c64.zip
s3-dcerpc: Use DATA_BLOB for pipes_struct input data
Signed-off-by: Günther Deschner <gd@samba.org>
Diffstat (limited to 'source3/rpc_server/srv_pipe.c')
-rw-r--r--source3/rpc_server/srv_pipe.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c
index 29b6d8e261..eae8a7dbf2 100644
--- a/source3/rpc_server/srv_pipe.c
+++ b/source3/rpc_server/srv_pipe.c
@@ -1719,7 +1719,9 @@ static bool api_rpcTNP(pipes_struct *p, struct ncacn_packet *pkt,
fstring name;
slprintf(name, sizeof(name)-1, "in_%s",
get_pipe_name_from_syntax(talloc_tos(), &p->syntax));
- prs_dump(name, pkt->u.request.opnum, &p->in_data.data);
+ prs_dump_region(name, pkt->u.request.opnum,
+ p->in_data.data.data, 0,
+ p->in_data.data.length);
}
for (fn_num = 0; fn_num < n_cmds; fn_num++) {
@@ -1783,18 +1785,11 @@ static bool api_rpcTNP(pipes_struct *p, struct ncacn_packet *pkt,
get_pipe_name_from_syntax(talloc_tos(), &p->syntax)));
/* Check for buffer underflow in rpc parsing */
-
- if ((DEBUGLEVEL >= 10) &&
- (prs_offset(&p->in_data.data) != prs_data_size(&p->in_data.data))) {
- size_t data_len = prs_data_size(&p->in_data.data) - prs_offset(&p->in_data.data);
- char *data = (char *)SMB_MALLOC(data_len);
-
+ if ((DEBUGLEVEL >= 10) &&
+ (pkt->frag_length < p->in_data.data.length)) {
DEBUG(10, ("api_rpcTNP: rpc input buffer underflow (parse error?)\n"));
- if (data) {
- prs_uint8s(False, "", &p->in_data.data, 0, (unsigned char *)data, (uint32)data_len);
- SAFE_FREE(data);
- }
-
+ dump_data(10, p->in_data.data.data + pkt->frag_length,
+ p->in_data.data.length - pkt->frag_length);
}
return True;