From ff5c9a127335a35d5625c500d5cd6b5971fd1e13 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 31 Dec 2005 04:29:34 +0000 Subject: r12634: make the [validate] binding string switch also check to see if the string form of the structure we receive matches the generated form. This has the effect of checking things like value() attributes. (This used to be commit f2e68ec649658976e5bf4887713a92c14850c277) --- source4/librpc/ndr/ndr.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'source4/librpc/ndr') diff --git a/source4/librpc/ndr/ndr.c b/source4/librpc/ndr/ndr.c index 260d445870..26190b199e 100644 --- a/source4/librpc/ndr/ndr.c +++ b/source4/librpc/ndr/ndr.c @@ -199,6 +199,21 @@ void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, ...) _PRI free(s); } +static void ndr_print_string_helper(struct ndr_print *ndr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3) +{ + va_list ap; + int i; + + for (i=0;idepth;i++) { + ndr->private = talloc_asprintf_append(ndr->private, " "); + } + + va_start(ap, format); + ndr->private = talloc_vasprintf_append(ndr->private, format, ap); + va_end(ap); + ndr->private = talloc_asprintf_append(ndr->private, "\n"); +} + /* a useful helper function for printing idl structures via DEBUG() */ @@ -248,6 +263,27 @@ void ndr_print_function_debug(ndr_print_function_t fn, const char *name, int fla talloc_free(ndr); } + +/* + a useful helper function for printing idl function calls to a string +*/ +char *ndr_print_function_string(TALLOC_CTX *mem_ctx, + ndr_print_function_t fn, const char *name, + int flags, void *ptr) +{ + struct ndr_print *ndr; + + ndr = talloc_zero(mem_ctx, struct ndr_print); + if (!ndr) return NULL; + ndr->private = talloc_strdup(mem_ctx, ""); + ndr->print = ndr_print_string_helper; + ndr->depth = 1; + ndr->flags = 0; + fn(ndr, name, flags, ptr); + talloc_free(ndr); + return ndr->private; +} + void ndr_set_flags(uint32_t *pflags, uint32_t new_flags) { /* the big/little endian flags are inter-dependent */ -- cgit