diff options
author | Günther Deschner <gd@samba.org> | 2016-10-26 18:45:29 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2016-10-28 18:44:07 +0200 |
commit | 94db858b99ff6b66d18759e8b73e0af82f8b5aba (patch) | |
tree | 4d59cc4a7e2d0a5ddf719ce76bda6fef360a4c63 /source3/rpcclient | |
parent | 2959c8888d46902e140963ed4190d23a7609b8da (diff) | |
download | samba-94db858b99ff6b66d18759e8b73e0af82f8b5aba.tar.gz |
s3-rpcclient: allow to pass down interface and transport to epmmap command
Guenther
Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source3/rpcclient')
-rw-r--r-- | source3/rpcclient/cmd_epmapper.c | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/source3/rpcclient/cmd_epmapper.c b/source3/rpcclient/cmd_epmapper.c index 52144c3922e..7753df24709 100644 --- a/source3/rpcclient/cmd_epmapper.c +++ b/source3/rpcclient/cmd_epmapper.c @@ -21,7 +21,7 @@ #include "includes.h" #include "rpcclient.h" #include "../librpc/gen_ndr/ndr_epmapper_c.h" -#include "../librpc/gen_ndr/ndr_lsa.h" +#include "librpc/ndr/ndr_table.h" static NTSTATUS cmd_epmapper_map(struct rpc_pipe_client *p, TALLOC_CTX *mem_ctx, @@ -38,8 +38,46 @@ static NTSTATUS cmd_epmapper_map(struct rpc_pipe_client *p, NTSTATUS status; uint32_t result; uint32_t i; + const struct ndr_interface_list *l; + const char *interface_name = "lsarpc"; + enum dcerpc_transport_t transport = NCACN_NP; + bool ok = false; + + if (argc > 3) { + d_fprintf(stderr, "Usage: %s [interface_name] [transport]\n", + argv[0]); + return NT_STATUS_OK; + } + + if (argc >= 2) { + interface_name = argv[1]; + } - abstract_syntax = ndr_table_lsarpc.syntax_id; + for (l = ndr_table_list(); l != NULL; l = l->next) { + + ok = strequal(interface_name, l->table->name); + if (ok) { + abstract_syntax = l->table->syntax_id; + break; + } + } + + if (!ok) { + d_fprintf(stderr, "unknown interface: %s\n", + interface_name); + status = NT_STATUS_UNSUCCESSFUL; + goto done; + } + + if (argc >= 3) { + transport = dcerpc_transport_by_name(argv[2]); + if (transport == NCA_UNKNOWN) { + d_fprintf(stderr, "unknown transport: %s\n", + argv[2]); + status = NT_STATUS_UNSUCCESSFUL; + goto done; + } + } /* 127.0.0.1[0] => correct? needed? */ status = dcerpc_parse_binding(tmp_ctx, "ncacn_np:127.0.0.1[0]", @@ -50,6 +88,13 @@ static NTSTATUS cmd_epmapper_map(struct rpc_pipe_client *p, goto done; } + status = dcerpc_binding_set_transport(map_binding, transport); + if (!NT_STATUS_IS_OK(status)) { + d_fprintf(stderr, "dcerpc_binding_set_transport returned %s\n", + nt_errstr(status)); + goto done; + } + status = dcerpc_binding_set_abstract_syntax(map_binding, &abstract_syntax); if (!NT_STATUS_IS_OK(status)) { |