summaryrefslogtreecommitdiff
path: root/source4/torture/rpc/netlogon.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture/rpc/netlogon.c')
-rw-r--r--source4/torture/rpc/netlogon.c40
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;
}