summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/rpc_client/cli_pipe.c2
-rw-r--r--source3/rpc_parse/parse_prs.c27
2 files changed, 24 insertions, 5 deletions
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index 0d2f6b17e0..63abbc1c56 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -796,7 +796,7 @@ BOOL rpc_api_pipe_req(struct cli_state *cli, uint8 op_num,
/* Optionally capture for use in debugging */
slprintf(dump_name, sizeof(dump_name) - 1, "call_%s",
cli_pipe_get_name(cli));
- prs_dump(dump_name, op_num, data);
+ prs_dump_before(dump_name, op_num, data);
/*
* The auth_len doesn't include the RPC_HDR_AUTH_LEN.
diff --git a/source3/rpc_parse/parse_prs.c b/source3/rpc_parse/parse_prs.c
index f902210b7b..8bb9f1c70a 100644
--- a/source3/rpc_parse/parse_prs.c
+++ b/source3/rpc_parse/parse_prs.c
@@ -23,11 +23,30 @@
#include "includes.h"
-/*******************************************************************
-dump a prs to a file
- ********************************************************************/
+/**
+ * Dump a prs to a file: from the current location through to the end.
+ **/
void prs_dump(char *name, int v, prs_struct *ps)
{
+ prs_dump_region(name, v, ps, ps->data_offset, ps->buffer_size);
+}
+
+
+/**
+ * Dump from the start of the prs to the current location.
+ **/
+void prs_dump_before(char *name, int v, prs_struct *ps)
+{
+ prs_dump_region(name, v, ps, 0, ps->data_offset);
+}
+
+
+/**
+ * Dump everything from the start of the prs up to the current location.
+ **/
+void prs_dump_region(char *name, int v, prs_struct *ps,
+ int from_off, int to_off)
+{
int fd, i;
pstring fname;
if (DEBUGLEVEL < 50) return;
@@ -41,7 +60,7 @@ void prs_dump(char *name, int v, prs_struct *ps)
if (fd != -1 || errno != EEXIST) break;
}
if (fd != -1) {
- write(fd, ps->data_p + ps->data_offset, ps->buffer_size - ps->data_offset);
+ write(fd, ps->data_p + from_off, to_off - from_off);
close(fd);
DEBUG(0,("created %s\n", fname));
}