summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/torture/rpc/testjoin.c10
-rw-r--r--source4/torture/torture.c35
2 files changed, 39 insertions, 6 deletions
diff --git a/source4/torture/rpc/testjoin.c b/source4/torture/rpc/testjoin.c
index 32ea6c5ce4..a4a4979895 100644
--- a/source4/torture/rpc/testjoin.c
+++ b/source4/torture/rpc/testjoin.c
@@ -123,12 +123,12 @@ void *torture_join_domain(const char *machine_name,
join->mem_ctx = mem_ctx;
- printf("Connecting to SAMR\n");
+ printf("Connecting to SAMR (forced ncacn_np)\n");
- status = torture_rpc_connection(&join->p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ status = torture_rpc_connection_smb(&join->p,
+ DCERPC_SAMR_NAME,
+ DCERPC_SAMR_UUID,
+ DCERPC_SAMR_VERSION);
if (!NT_STATUS_IS_OK(status)) {
goto failed;
}
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index e3a7d8e5d8..b1e6695e9e 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -136,7 +136,7 @@ BOOL torture_close_connection(struct smbcli_state *c)
}
-/* open a rpc connection to a named pipe */
+/* open a rpc connection to the chosen binding string */
NTSTATUS torture_rpc_connection(struct dcerpc_pipe **p,
const char *pipe_name,
const char *pipe_uuid,
@@ -158,6 +158,39 @@ NTSTATUS torture_rpc_connection(struct dcerpc_pipe **p,
return status;
}
+/* open a rpc connection to a named pipe */
+NTSTATUS torture_rpc_connection_smb(struct dcerpc_pipe **p,
+ const char *pipe_name,
+ const char *pipe_uuid,
+ uint32_t pipe_version)
+{
+ NTSTATUS status;
+ const char *binding = lp_parm_string(-1, "torture", "binding");
+ struct dcerpc_binding b;
+ TALLOC_CTX *mem_ctx = talloc_init("torture_rpc_connection_smb");
+
+ if (!binding) {
+ printf("You must specify a ncacn binding string\n");
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ status = dcerpc_parse_binding(mem_ctx, binding, &b);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0,("Failed to parse dcerpc binding '%s'\n", binding));
+ talloc_destroy(mem_ctx);
+ return status;
+ }
+
+ b.transport = NCACN_NP;
+
+ status = dcerpc_pipe_connect_b(p, &b, pipe_uuid, pipe_version,
+ lp_parm_string(-1, "torture", "userdomain"),
+ lp_parm_string(-1, "torture", "username"),
+ lp_parm_string(-1, "torture", "password"));
+
+ return status;
+}
+
/* close a rpc connection to a named pipe */
NTSTATUS torture_rpc_close(struct dcerpc_pipe *p)
{