summaryrefslogtreecommitdiff
path: root/librpc
diff options
context:
space:
mode:
authorSamuel Cabrero <scabrero@suse.de>2019-01-24 12:03:45 +0100
committerAndreas Schneider <asn@cryptomilk.org>2019-10-18 16:07:36 +0000
commit63b78894618a9badac595fbc59cea0f097feeded (patch)
treea5012f759be5839542dfbcd0bd91fd26de81175b /librpc
parentae9956a65e6913a73dfa68e2b5deebfeaf52c0e5 (diff)
downloadsamba-63b78894618a9badac595fbc59cea0f097feeded.tar.gz
librpc: Move dcerpc_log_packet from s4 librpc to common librpc
Signed-off-by: Samuel Cabrero <scabrero@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'librpc')
-rw-r--r--librpc/rpc/dcerpc_util.c36
-rw-r--r--librpc/rpc/rpc_common.h5
2 files changed, 41 insertions, 0 deletions
diff --git a/librpc/rpc/dcerpc_util.c b/librpc/rpc/dcerpc_util.c
index 3386d5e2f15..01dc2e7061d 100644
--- a/librpc/rpc/dcerpc_util.c
+++ b/librpc/rpc/dcerpc_util.c
@@ -1405,3 +1405,39 @@ NTSTATUS dcerpc_ncacn_push_auth(DATA_BLOB *blob,
return NT_STATUS_OK;
}
+
+/*
+ log a rpc packet in a format suitable for ndrdump. This is especially useful
+ for sealed packets, where ethereal cannot easily see the contents
+
+ this triggers on a debug level of >= 10
+*/
+void dcerpc_log_packet(const char *lockdir,
+ const struct ndr_interface_table *ndr,
+ uint32_t opnum, uint32_t flags,
+ const DATA_BLOB *pkt)
+{
+ const int num_examples = 20;
+ int i;
+
+ if (lockdir == NULL) return;
+
+ for (i=0;i<num_examples;i++) {
+ char *name=NULL;
+ int ret;
+ ret = asprintf(&name, "%s/rpclog/%s-%u.%d.%s",
+ lockdir, ndr->name, opnum, i,
+ (flags&NDR_IN)?"in":"out");
+ if (ret == -1) {
+ return;
+ }
+ if (!file_exist(name)) {
+ if (file_save(name, pkt->data, pkt->length)) {
+ DEBUG(10,("Logged rpc packet to %s\n", name));
+ }
+ free(name);
+ break;
+ }
+ free(name);
+ }
+}
diff --git a/librpc/rpc/rpc_common.h b/librpc/rpc/rpc_common.h
index 7cd6d16bf58..9812146d0ba 100644
--- a/librpc/rpc/rpc_common.h
+++ b/librpc/rpc/rpc_common.h
@@ -452,4 +452,9 @@ NTSTATUS dcerpc_ncacn_push_auth(DATA_BLOB *blob,
struct ncacn_packet *pkt,
struct dcerpc_auth *auth_info);
+void dcerpc_log_packet(const char *lockdir,
+ const struct ndr_interface_table *ndr,
+ uint32_t opnum, uint32_t flags,
+ const DATA_BLOB *pkt);
+
#endif /* __DEFAULT_LIBRPC_RPCCOMMON_H__ */