mirror of
https://github.com/samba-team/samba.git
synced 2025-02-22 05:57:43 +03:00
Share ndrdump implementation.
This commit is contained in:
parent
6d02f0805a
commit
2fddd2e2d5
@ -26,6 +26,8 @@
|
||||
#include "librpc/ndr/libndr.h"
|
||||
#include "librpc/ndr/ndr_table.h"
|
||||
#include "param/param.h"
|
||||
#else
|
||||
#define _NORETURN_
|
||||
#endif
|
||||
|
||||
static const struct ndr_interface_call *find_function(
|
@ -968,7 +968,7 @@ REPLACETORT_OBJ = @libreplacedir@/test/testsuite.o \
|
||||
@libreplacedir@/test/main.o \
|
||||
$(LIBREPLACE_OBJ)
|
||||
|
||||
NDRDUMP_OBJ = librpc/tools/ndrdump.o \
|
||||
NDRDUMP_OBJ = ../librpc/tools/ndrdump.o \
|
||||
$(PARAM_OBJ) $(LIBNDR_GEN_OBJ) \
|
||||
$(LIBSAMBA_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
|
||||
librpc/gen_ndr/ndr_svcctl.o
|
||||
|
@ -1291,6 +1291,7 @@ enum remote_arch_types get_remote_arch(void);
|
||||
void print_asc(int level, const unsigned char *buf,int len);
|
||||
void dump_data(int level, const unsigned char *buf1,int len);
|
||||
void dump_data_pw(const char *msg, const uchar * data, size_t len);
|
||||
void dump_data_skip_zeros(int level, const uint8_t *buf, int len);
|
||||
const char *tab_depth(int level, int depth);
|
||||
int str_checksum(const char *s);
|
||||
void zero_free(void *p, size_t size);
|
||||
|
@ -2217,25 +2217,60 @@ void print_asc(int level, const unsigned char *buf,int len)
|
||||
DEBUG(level,("%c", isprint(buf[i])?buf[i]:'.'));
|
||||
}
|
||||
|
||||
void dump_data(int level, const unsigned char *buf1,int len)
|
||||
/**
|
||||
* Write dump of binary data to the log file.
|
||||
*
|
||||
* The data is only written if the log level is at least level.
|
||||
*/
|
||||
static void _dump_data(int level, const uint8_t *buf, int len,
|
||||
bool omit_zero_bytes)
|
||||
{
|
||||
const unsigned char *buf = (const unsigned char *)buf1;
|
||||
int i=0;
|
||||
const uint8_t empty[16];
|
||||
bool skipped = false;
|
||||
|
||||
if (len<=0) return;
|
||||
|
||||
if (!DEBUGLVL(level)) return;
|
||||
|
||||
DEBUGADD(level,("[%03X] ",i));
|
||||
|
||||
memset(&empty, '\0', 16);
|
||||
|
||||
for (i=0;i<len;) {
|
||||
|
||||
if (i%16 == 0) {
|
||||
if ((omit_zero_bytes == true) &&
|
||||
(i > 0) &&
|
||||
(len > i+16) &&
|
||||
(memcmp(&buf[i], &empty, 16) == 0))
|
||||
{
|
||||
i +=16;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i<len) {
|
||||
DEBUGADD(level,("[%04X] ",i));
|
||||
}
|
||||
}
|
||||
|
||||
DEBUGADD(level,("%02X ",(int)buf[i]));
|
||||
i++;
|
||||
if (i%8 == 0) DEBUGADD(level,(" "));
|
||||
if (i%16 == 0) {
|
||||
if (i%8 == 0) DEBUGADD(level,(" "));
|
||||
if (i%16 == 0) {
|
||||
|
||||
print_asc(level,&buf[i-16],8); DEBUGADD(level,(" "));
|
||||
print_asc(level,&buf[i-8],8); DEBUGADD(level,("\n"));
|
||||
if (i<len) DEBUGADD(level,("[%03X] ",i));
|
||||
|
||||
if ((omit_zero_bytes == true) &&
|
||||
(len > i+16) &&
|
||||
(memcmp(&buf[i], &empty, 16) == 0)) {
|
||||
if (!skipped) {
|
||||
DEBUGADD(level,("skipping zero buffer bytes\n"));
|
||||
skipped = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i%16) {
|
||||
int n;
|
||||
n = 16 - (i%16);
|
||||
@ -2248,8 +2283,32 @@ void dump_data(int level, const unsigned char *buf1,int len)
|
||||
if (n>0) print_asc(level,&buf[i-n],n);
|
||||
DEBUGADD(level,("\n"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Write dump of binary data to the log file.
|
||||
*
|
||||
* The data is only written if the log level is at least level.
|
||||
*/
|
||||
_PUBLIC_ void dump_data(int level, const uint8_t *buf, int len)
|
||||
{
|
||||
_dump_data(level, buf, len, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write dump of binary data to the log file.
|
||||
*
|
||||
* The data is only written if the log level is at least level.
|
||||
* 16 zero bytes in a row are ommited
|
||||
*/
|
||||
_PUBLIC_ void dump_data_skip_zeros(int level, const uint8_t *buf, int len)
|
||||
{
|
||||
_dump_data(level, buf, len, true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void dump_data_pw(const char *msg, const uchar * data, size_t len)
|
||||
{
|
||||
#ifdef DEBUG_PASSWORD
|
||||
|
@ -26,6 +26,11 @@
|
||||
#include "librpc/gen_ndr/misc.h"
|
||||
#include "librpc/gen_ndr/security.h"
|
||||
|
||||
/* Samba 3 doesn't use iconv_convenience: */
|
||||
extern void *global_loadparm;
|
||||
extern void *cmdline_lp_ctx;
|
||||
struct smb_iconv_convenience *lp_iconv_convenience(void *lp_ctx);
|
||||
|
||||
/*
|
||||
this provides definitions for the libcli/rpc/ MSRPC library
|
||||
*/
|
||||
|
@ -180,3 +180,9 @@ _PUBLIC_ void ndr_print_sockaddr_storage(struct ndr_print *ndr, const char *name
|
||||
ndr->print(ndr, "%-25s: %s", name, print_sockaddr(addr, sizeof(addr), ss));
|
||||
}
|
||||
|
||||
void *global_loadparm;
|
||||
void *cmdline_lp_ctx;
|
||||
struct smb_iconv_convenience *lp_iconv_convenience(void *lp_ctx)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
@ -36,9 +36,9 @@ PRIVATE_DEPENDENCIES = \
|
||||
# End BINARY ndrdump
|
||||
#################################
|
||||
|
||||
ndrdump_OBJ_FILES = $(librpcsrcdir)/tools/ndrdump.o
|
||||
ndrdump_OBJ_FILES = ../librpc/tools/ndrdump.o
|
||||
|
||||
MANPAGES += $(librpcsrcdir)/tools/ndrdump.1
|
||||
MANPAGES += ../librpc/tools/ndrdump.1
|
||||
|
||||
################################################
|
||||
# Start SUBSYSTEM NDR_COMPRESSION
|
||||
|
Loading…
x
Reference in New Issue
Block a user