1
0
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:
Jelmer Vernooij 2008-10-13 15:58:45 +02:00
parent 6d02f0805a
commit 2fddd2e2d5
8 changed files with 83 additions and 10 deletions

View File

@ -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(

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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
*/

View File

@ -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;
}

View File

@ -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