diff options
author | Andrew Bartlett <abartlet@samba.org> | 2005-03-22 08:00:45 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:11:11 -0500 |
commit | 645711c602313940dcf80ec786557920ecfbf884 (patch) | |
tree | 77c5f5c5f1285677eaaf7a3fa62bf0b2540e153f /source4/torture/rpc/schannel.c | |
parent | 376b03ebd895b221b70058ee18bea50587388182 (diff) | |
download | samba-645711c602313940dcf80ec786557920ecfbf884.tar.gz samba-645711c602313940dcf80ec786557920ecfbf884.tar.bz2 samba-645711c602313940dcf80ec786557920ecfbf884.zip |
r5941: Commit this patch much earlier than I would normally prefer, but metze needs a working tree...
The main volume of this patch was what I started working on today:
- Cleans up memory handling around DCE/RPC pipes, to have a parent talloc context.
- Uses sepereate inner loops for some of the DCE/RPC tests
The other and more important part of this patch fixes issues
surrounding the new credentials framwork:
This makes the struct cli_credentials always a talloc() structure,
rather than on the stack. Parts of the cli_credentials code already
assumed this.
There were other issues, particularly in the DCERPC over SMB handling,
as well as little things that had to be tidied up before test_w2k3.sh
would start to pass.
Andrew Bartlett
(This used to be commit 0453f9d05d2e336fba1f85dbf2718d01fa2bf778)
Diffstat (limited to 'source4/torture/rpc/schannel.c')
-rw-r--r-- | source4/torture/rpc/schannel.c | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/source4/torture/rpc/schannel.c b/source4/torture/rpc/schannel.c index f572933bf5..d27285a9cc 100644 --- a/source4/torture/rpc/schannel.c +++ b/source4/torture/rpc/schannel.c @@ -127,17 +127,22 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *p = NULL; struct dcerpc_pipe *p_netlogon = NULL; struct creds_CredentialState *creds; - struct cli_credentials credentials; + struct cli_credentials *credentials; + + TALLOC_CTX *test_ctx = talloc_named(mem_ctx, 0, "test_schannel context"); char *test_machine_account = talloc_asprintf(NULL, "%s$", TEST_MACHINE_NAME); + credentials = cli_credentials_init(mem_ctx); + join_ctx = torture_create_testuser(test_machine_account, lp_workgroup(), acct_flags, &machine_password); if (!join_ctx) { printf("Failed to join domain with acct_flags=0x%x\n", acct_flags); + talloc_free(test_ctx); return False; } - status = dcerpc_parse_binding(mem_ctx, binding, &b); + status = dcerpc_parse_binding(test_ctx, binding, &b); if (!NT_STATUS_IS_OK(status)) { printf("Bad binding string %s\n", binding); goto failed; @@ -146,25 +151,27 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx, b->flags &= ~DCERPC_AUTH_OPTIONS; b->flags |= dcerpc_flags; - cli_credentials_set_domain(&credentials, lp_workgroup(), CRED_SPECIFIED); - cli_credentials_set_workstation(&credentials, TEST_MACHINE_NAME, CRED_SPECIFIED); - cli_credentials_set_username(&credentials, test_machine_account, CRED_SPECIFIED); - cli_credentials_set_password(&credentials, machine_password, CRED_SPECIFIED); - status = dcerpc_pipe_connect_b(&p, b, + cli_credentials_set_domain(credentials, lp_workgroup(), CRED_SPECIFIED); + cli_credentials_set_workstation(credentials, TEST_MACHINE_NAME, CRED_SPECIFIED); + cli_credentials_set_username(credentials, test_machine_account, CRED_SPECIFIED); + cli_credentials_set_password(credentials, machine_password, CRED_SPECIFIED); + + status = dcerpc_pipe_connect_b(test_ctx, + &p, b, DCERPC_SAMR_UUID, DCERPC_SAMR_VERSION, - &credentials); + credentials); if (!NT_STATUS_IS_OK(status)) { printf("Failed to connect with schannel: %s\n", nt_errstr(status)); goto failed; } - if (!test_samr_ops(p, mem_ctx)) { + if (!test_samr_ops(p, test_ctx)) { printf("Failed to process schannel secured ops\n"); goto failed; } - status = dcerpc_schannel_creds(p->conn->security_state.generic_state, mem_ctx, &creds); + status = dcerpc_schannel_creds(p->conn->security_state.generic_state, test_ctx, &creds); if (!NT_STATUS_IS_OK(status)) { goto failed; } @@ -174,7 +181,7 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx, * the second */ /* Swap the binding details from SAMR to NETLOGON */ - status = dcerpc_epm_map_binding(mem_ctx, b, DCERPC_NETLOGON_UUID, + status = dcerpc_epm_map_binding(test_ctx, b, DCERPC_NETLOGON_UUID, DCERPC_NETLOGON_VERSION); if (!NT_STATUS_IS_OK(status)) { goto failed; @@ -196,26 +203,24 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx, goto failed; } - status = dcerpc_schannel_creds(p_netlogon->conn->security_state.generic_state, mem_ctx, &creds); + status = dcerpc_schannel_creds(p_netlogon->conn->security_state.generic_state, test_ctx, &creds); if (!NT_STATUS_IS_OK(status)) { goto failed; } /* do a couple of logins */ - if (!test_netlogon_ops(p_netlogon, mem_ctx, creds)) { + if (!test_netlogon_ops(p_netlogon, test_ctx, creds)) { printf("Failed to process schannel secured ops\n"); goto failed; } torture_leave_domain(join_ctx); - dcerpc_pipe_close(p_netlogon); - dcerpc_pipe_close(p); + talloc_free(test_ctx); return True; failed: torture_leave_domain(join_ctx); - dcerpc_pipe_close(p_netlogon); - dcerpc_pipe_close(p); + talloc_free(test_ctx); return False; } |