diff options
Diffstat (limited to 'source4/torture/rpc/netlogon.c')
-rw-r--r-- | source4/torture/rpc/netlogon.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c index 4ed62bc543..d0bffcc0e9 100644 --- a/source4/torture/rpc/netlogon.c +++ b/source4/torture/rpc/netlogon.c @@ -71,25 +71,20 @@ static BOOL test_SamLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) struct netr_ServerReqChallenge r; struct netr_ServerAuthenticate a; struct netr_LogonSamLogon l; - struct netr_Credential client_chal, server_chal, cred2, cred3; - uint8 session_key[8]; const char *plain_pass; uint8 mach_pwd[16]; struct netr_Authenticator auth, auth2; struct netr_NetworkInfo ninfo; const char *username = lp_parm_string(-1, "torture", "username"); const char *password = lp_parm_string(-1, "torture", "password"); + struct netr_CredentialState creds; printf("Testing ServerReqChallenge\n"); - ZERO_STRUCT(client_chal); - - generate_random_buffer(client_chal.data, sizeof(client_chal.data), False); - r.in.server_name = NULL; r.in.computer_name = lp_netbios_name(); - r.in.credential = &client_chal; - r.out.credential = &server_chal; + r.in.credentials.low = 1; + r.in.credentials.high = 2; status = dcerpc_netr_ServerReqChallenge(p, mem_ctx, &r); if (!NT_STATUS_IS_OK(status)) { @@ -104,16 +99,14 @@ static BOOL test_SamLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) } E_md4hash(plain_pass, mach_pwd); - cred_session_key(&client_chal, &server_chal, mach_pwd, session_key); - cred_create(session_key, &client_chal, 0, &cred2); + creds_init(&creds, &r.in.credentials, &r.out.credentials, mach_pwd); a.in.server_name = NULL; a.in.username = talloc_asprintf(mem_ctx, "%s$", lp_netbios_name()); a.in.secure_challenge_type = 2; a.in.computer_name = lp_netbios_name(); - a.in.client_challenge = &cred2; - a.out.client_challenge = &cred3; + a.in.credentials = creds.client_cred; printf("Testing ServerAuthenticate\n"); @@ -123,17 +116,12 @@ static BOOL test_SamLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) return False; } - - if (!cred_assert(&cred3, session_key, &server_chal, 0)) { - printf("cred_assert failed!\n"); + if (!creds_next(&creds, &a.out.credentials)) { + printf("Credential chaining failed\n"); } auth.timestamp = 0; - auth.cred = cred3; - auth2.timestamp = 0; - auth2.cred = server_chal; - - cred_create(session_key, &cred2, 0, &auth.cred); + auth.cred = creds.client_cred; ninfo.logon_info.domain_name.string = lp_workgroup(); ninfo.logon_info.parameter_control = 0; @@ -141,14 +129,14 @@ static BOOL test_SamLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) ninfo.logon_info.logon_id_high = 0; ninfo.logon_info.username.string = username; ninfo.logon_info.workstation.string = lp_netbios_name(); - generate_random_buffer(ninfo.challenge.data, - sizeof(ninfo.challenge.data), False); + generate_random_buffer(ninfo.challenge, + sizeof(ninfo.challenge), False); ninfo.nt.length = 24; ninfo.nt.data = talloc(mem_ctx, 24); - SMBNTencrypt(password, ninfo.challenge.data, ninfo.nt.data); + SMBNTencrypt(password, ninfo.challenge, ninfo.nt.data); ninfo.lm.length = 24; ninfo.lm.data = talloc(mem_ctx, 24); - SMBencrypt(password, ninfo.challenge.data, ninfo.lm.data); + SMBencrypt(password, ninfo.challenge, ninfo.lm.data); ZERO_STRUCT(auth2); @@ -168,6 +156,10 @@ static BOOL test_SamLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) return False; } + if (!creds_next(&creds, &l.out.authenticator->cred)) { + printf("Credential chaining failed\n"); + } + return True; } |