From: Jelmer Vernooij Date: Mon, 13 Oct 2008 13:58:45 +0000 (+0200) Subject: Share ndrdump implementation. X-Git-Tag: samba-4.0.0alpha6~769^2~169^2~2 X-Git-Url: http://git.samba.org/?p=samba.git;a=commitdiff_plain;h=2fddd2e2d5fb32ff15a170acc443218481986b91 Share ndrdump implementation. --- diff --git a/source4/librpc/tools/ndrdump.1.xml b/librpc/tools/ndrdump.1.xml similarity index 100% rename from source4/librpc/tools/ndrdump.1.xml rename to librpc/tools/ndrdump.1.xml diff --git a/source4/librpc/tools/ndrdump.c b/librpc/tools/ndrdump.c similarity index 99% rename from source4/librpc/tools/ndrdump.c rename to librpc/tools/ndrdump.c index b24868eaced..3ecf10a167b 100644 --- a/source4/librpc/tools/ndrdump.c +++ b/librpc/tools/ndrdump.c @@ -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( diff --git a/source3/Makefile.in b/source3/Makefile.in index d6c54865289..1685bf141de 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -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 diff --git a/source3/include/proto.h b/source3/include/proto.h index fb6d45befda..7dc0319e7d3 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -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); diff --git a/source3/lib/util.c b/source3/lib/util.c index ec43ea7037d..418ae41392b 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -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 0) && + (len > i+16) && + (memcmp(&buf[i], &empty, 16) == 0)) + { + i +=16; + continue; + } + + if (i 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 diff --git a/source3/librpc/ndr/libndr.h b/source3/librpc/ndr/libndr.h index a860f35998f..e25a7b8abd2 100644 --- a/source3/librpc/ndr/libndr.h +++ b/source3/librpc/ndr/libndr.h @@ -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 */ diff --git a/source3/librpc/ndr/util.c b/source3/librpc/ndr/util.c index b85739df69a..427292ac701 100644 --- a/source3/librpc/ndr/util.c +++ b/source3/librpc/ndr/util.c @@ -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; +} diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index 4e1ccbb1a74..a481b97a111 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -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