summaryrefslogtreecommitdiff
path: root/source4/torture
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-12-01 09:28:10 +0000
committerAndrew Tridgell <tridge@samba.org>2003-12-01 09:28:10 +0000
commita6cf6cada93640fe6a24a7d3c5403079aeb7b4de (patch)
tree7151411d9d583817a1d308168c82e54622db58cb /source4/torture
parentb4b0177fdb5f1704a7347552e48b2ab647a03d14 (diff)
downloadsamba-a6cf6cada93640fe6a24a7d3c5403079aeb7b4de.tar.gz
samba-a6cf6cada93640fe6a24a7d3c5403079aeb7b4de.tar.bz2
samba-a6cf6cada93640fe6a24a7d3c5403079aeb7b4de.zip
added netr_LogonSamLogon() and test code
(This used to be commit 4fa3ad3ecbfd8f8663fcdfaba9a7db481e303f2b)
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/rpc/netlogon.c66
1 files changed, 59 insertions, 7 deletions
diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c
index 68937a4947..4ed62bc543 100644
--- a/source4/torture/rpc/netlogon.c
+++ b/source4/torture/rpc/netlogon.c
@@ -32,7 +32,7 @@ static BOOL test_LogonUasLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
r.in.username = lp_parm_string(-1, "torture", "username");
r.in.workstation = lp_netbios_name();
- printf("Testing LogonUasLogon");
+ printf("Testing LogonUasLogon\n");
status = dcerpc_netr_LogonUasLogon(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
@@ -53,7 +53,7 @@ static BOOL test_LogonUasLogoff(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
r.in.username = lp_parm_string(-1, "torture", "username");
r.in.workstation = lp_netbios_name();
- printf("Testing LogonUasLogoff");
+ printf("Testing LogonUasLogoff\n");
status = dcerpc_netr_LogonUasLogoff(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
@@ -65,17 +65,22 @@ static BOOL test_LogonUasLogoff(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
}
-static BOOL test_Authenticate(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+static BOOL test_SamLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
{
NTSTATUS status;
struct netr_ServerReqChallenge r;
struct netr_ServerAuthenticate a;
- struct netr_Credential client_chal, server_chal, cred2;
+ 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");
- printf("Testing ServerReqChallenge");
+ printf("Testing ServerReqChallenge\n");
ZERO_STRUCT(client_chal);
@@ -108,7 +113,9 @@ static BOOL test_Authenticate(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
a.in.secure_challenge_type = 2;
a.in.computer_name = lp_netbios_name();
a.in.client_challenge = &cred2;
- a.out.client_challenge = &cred2;
+ a.out.client_challenge = &cred3;
+
+ printf("Testing ServerAuthenticate\n");
status = dcerpc_netr_ServerAuthenticate(p, mem_ctx, &a);
if (!NT_STATUS_IS_OK(status)) {
@@ -116,6 +123,51 @@ static BOOL test_Authenticate(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
return False;
}
+
+ if (!cred_assert(&cred3, session_key, &server_chal, 0)) {
+ printf("cred_assert failed!\n");
+ }
+
+ auth.timestamp = 0;
+ auth.cred = cred3;
+ auth2.timestamp = 0;
+ auth2.cred = server_chal;
+
+ cred_create(session_key, &cred2, 0, &auth.cred);
+
+ ninfo.logon_info.domain_name.string = lp_workgroup();
+ ninfo.logon_info.parameter_control = 0;
+ ninfo.logon_info.logon_id_low = 0;
+ 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);
+ ninfo.nt.length = 24;
+ ninfo.nt.data = talloc(mem_ctx, 24);
+ SMBNTencrypt(password, ninfo.challenge.data, ninfo.nt.data);
+ ninfo.lm.length = 24;
+ ninfo.lm.data = talloc(mem_ctx, 24);
+ SMBencrypt(password, ninfo.challenge.data, ninfo.lm.data);
+
+ ZERO_STRUCT(auth2);
+
+ l.in.server_name = talloc_asprintf(mem_ctx, "\\\\%s", dcerpc_server_name(p));
+ l.in.workstation = lp_netbios_name();
+ l.in.credential = &auth;
+ l.in.authenticator = &auth2;
+ l.in.logon_level = 2;
+ l.in.logon.network = &ninfo;
+ l.in.validation_level = 2;
+
+ printf("Testing SamLogon\n");
+
+ status = dcerpc_netr_LogonSamLogon(p, mem_ctx, &l);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("LogonSamLogon - %s\n", nt_errstr(status));
+ return False;
+ }
+
return True;
}
@@ -147,7 +199,7 @@ BOOL torture_rpc_netlogon(int dummy)
ret = False;
}
- if (!test_Authenticate(p, mem_ctx)) {
+ if (!test_SamLogon(p, mem_ctx)) {
ret = False;
}