r21651: Add ndrdump to samba 3. This only works from external source at the
authorJelmer Vernooij <jelmer@samba.org>
Fri, 2 Mar 2007 12:54:37 +0000 (12:54 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:21 +0000 (12:18 -0500)
moment. To use, use something like:

./bin/ndrdump -l bin/smbd winreg winreg_EnumValue in <filename>

or to see what functions are available:

./bin/ndrdump -l bin/smbd winreg
(This used to be commit 0db258c6004922ce444b4a3ecdf669f7e4600ef0)

source3/Makefile.in
source3/librpc/tools/ndrdump.c

index 6b8eb9bb18894ec10ea1c215340ef2608c6a9b8e..950cdedd627825a50dd9799464c280e53ea798c1 100644 (file)
@@ -167,7 +167,7 @@ BIN_PROGS = $(BIN_PROGS1) $(BIN_PROGS2) $(BIN_PROGS3) $(BIN_PROGS4) @EXTRA_BIN_P
 
 EVERYTHING_PROGS = bin/debug2html@EXEEXT@ bin/smbfilter@EXEEXT@ \
        bin/talloctort@EXEEXT@ bin/replacetort@EXEEXT@ \
-       bin/log2pcap@EXEEXT@ bin/sharesec@EXEEXT@
+       bin/log2pcap@EXEEXT@ bin/sharesec@EXEEXT@ bin/ndrdump@EXEEXT@
 
 SHLIBS = @SHLIB_PROGS@ @LIBSMBCLIENT@ @LIBSMBSHAREMODES@ @LIBMSRPC@ @LIBADDNS@
 
index e1c7c41f12f7d39bd5ca88b70eb0c0e7c9d3d46c..7fc3e57ff3256adeb4cbc536e96607d2cebebf01 100644 (file)
 */
 
 #include "includes.h"
+#if (_SAMBA_BUILD_ >= 4)
+#include "lib/cmdline/popt_common.h"
 #include "system/filesys.h"
 #include "system/locale.h"
+#include "librpc/rpc/dcerpc.h"
+#include "librpc/rpc/dcerpc_table.h"
+#endif
 
 static const struct dcerpc_interface_call *find_function(
        const struct dcerpc_interface_table *p,
@@ -44,6 +49,7 @@ static const struct dcerpc_interface_call *find_function(
        return &p->calls[i];
 }
 
+#if (_SAMBA_BUILD_ >= 4)
 
 static void show_pipes(void)
 {
@@ -60,6 +66,8 @@ static void show_pipes(void)
        exit(1);
 }
 
+#endif
+
 static void show_functions(const struct dcerpc_interface_table *p)
 {
        int i;
@@ -156,7 +164,9 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
                { NULL }
        };
 
+#if (_SAMBA_BUILD_ >= 4)
        dcerpc_table_init();
+#endif
 
        pc = poptGetContext("ndrdump", argc, argv, long_options, 0);
        
@@ -184,14 +194,21 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
 
        if (!pipe_name) {
                poptPrintUsage(pc, stderr, 0);
+#if (_SAMBA_BUILD_ >= 4)
                show_pipes();
+#endif
                exit(1);
        }
 
        if (plugin != NULL) {
                p = load_iface_from_plugin(plugin, pipe_name);
+       } 
+#if (_SAMBA_BUILD_ <= 3)
+       else {
+               fprintf(stderr, "Only loading from DSO's supported in Samba 3\n");
+               exit(1);
        }
-
+#else
        if (!p) {
                p = idl_iface_by_name(pipe_name);
        }
@@ -205,6 +222,7 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
                        p = idl_iface_by_uuid(&uuid);
                }
        }
+#endif
 
        if (!p) {
                printf("Unknown pipe or UUID '%s'\n", pipe_name);
@@ -254,7 +272,11 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
                        exit(1);
                }
                        
+#if (_SAMBA_BUILD_ >= 4)
+               data = (uint8_t *)file_load(ctx_filename, &size, mem_ctx);
+#else
                data = (uint8_t *)file_load(ctx_filename, &size, 0);
+#endif
                if (!data) {
                        perror(ctx_filename);
                        exit(1);
@@ -280,7 +302,11 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
        } 
 
        if (filename)
+#if (_SAMBA_BUILD_ >= 4)
+               data = (uint8_t *)file_load(filename, &size, mem_ctx);
+#else
                data = (uint8_t *)file_load(filename, &size, 0);
+#endif
        else
                data = (uint8_t *)stdin_load(mem_ctx, &size);
 
@@ -304,12 +330,12 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
 
        if (ndr_pull->offset != ndr_pull->data_size) {
                printf("WARNING! %d unread bytes\n", ndr_pull->data_size - ndr_pull->offset);
-               dump_data(0, (const char *)ndr_pull->data+ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset);
+               dump_data(0, ndr_pull->data+ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset);
        }
 
        if (dumpdata) {
                printf("%d bytes consumed\n", ndr_pull->offset);
-               dump_data(0, (const char *)blob.data, blob.length);
+               dump_data(0, blob.data, blob.length);
        }
 
        ndr_print = talloc_zero(mem_ctx, struct ndr_print);
@@ -343,7 +369,7 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
 
                if (dumpdata) {
                        printf("%ld bytes generated (validate)\n", (long)v_blob.length);
-                       dump_data(0, (const char *)v_blob.data, v_blob.length);
+                       dump_data(0, v_blob.data, v_blob.length);
                }
 
                ndr_v_pull = ndr_pull_init_blob(&v_blob, mem_ctx);
@@ -359,7 +385,7 @@ const struct dcerpc_interface_table *load_iface_from_plugin(const char *plugin,
 
                if (ndr_v_pull->offset != ndr_v_pull->data_size) {
                        printf("WARNING! %d unread bytes in validation\n", ndr_v_pull->data_size - ndr_v_pull->offset);
-                       dump_data(0, (const char *)ndr_v_pull->data+ndr_v_pull->offset, ndr_v_pull->data_size - ndr_v_pull->offset);
+                       dump_data(0, ndr_v_pull->data+ndr_v_pull->offset, ndr_v_pull->data_size - ndr_v_pull->offset);
                }
 
                ndr_v_print = talloc_zero(mem_ctx, struct ndr_print);