summaryrefslogtreecommitdiff
path: root/source3/rpcclient
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2016-10-26 18:45:29 +0200
committerAndreas Schneider <asn@cryptomilk.org>2016-10-28 18:44:07 +0200
commit94db858b99ff6b66d18759e8b73e0af82f8b5aba (patch)
tree4d59cc4a7e2d0a5ddf719ce76bda6fef360a4c63 /source3/rpcclient
parent2959c8888d46902e140963ed4190d23a7609b8da (diff)
downloadsamba-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.c49
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)) {