summaryrefslogtreecommitdiffstats
path: root/source3/winbindd/winbindd_dual_srv.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2014-05-08 16:49:13 +1200
committerAndrew Bartlett <abartlet@samba.org>2014-06-11 12:43:58 +0200
commitba4467ca65d5f85a2732da27d88760b684c6e30d (patch)
treec7c8ad4191091424d0071f1fe92bce8cc0d61461 /source3/winbindd/winbindd_dual_srv.c
parenteabe7d732e6d9b64004bbb477384a1eae999815f (diff)
downloadsamba-ba4467ca65d5f85a2732da27d88760b684c6e30d.tar.gz
samba-ba4467ca65d5f85a2732da27d88760b684c6e30d.tar.xz
samba-ba4467ca65d5f85a2732da27d88760b684c6e30d.zip
s3-winbindd: Implement SamLogon IRPC call
We do this by lifting parts of the winbindd_dual_pam_auth_crap() code into a new helper function winbind_dual_SamLogon(). This allows us to implement the semantics we need for IRPC, without the artifacts of the winbindd pipe protocol. Change-Id: Idb169217e6d68d387c99765d0af7ed394cb5b93a Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Kamen Mazdrashki <kamenim@samba.org> Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Wed Jun 11 12:43:58 CEST 2014 on sn-devel-104
Diffstat (limited to 'source3/winbindd/winbindd_dual_srv.c')
-rw-r--r--source3/winbindd/winbindd_dual_srv.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/source3/winbindd/winbindd_dual_srv.c b/source3/winbindd/winbindd_dual_srv.c
index 985f0a92097..5e33787bd34 100644
--- a/source3/winbindd/winbindd_dual_srv.c
+++ b/source3/winbindd/winbindd_dual_srv.c
@@ -758,8 +758,34 @@ NTSTATUS _winbind_DsrUpdateReadOnlyServerDnsRecords(struct pipes_struct *p,
}
NTSTATUS _winbind_SamLogon(struct pipes_struct *p,
- struct winbind_SamLogon *r)
+ struct winbind_SamLogon *r)
{
- p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
- return NT_STATUS_NOT_IMPLEMENTED;
+ struct winbindd_domain *domain;
+ NTSTATUS status;
+ DATA_BLOB lm_response, nt_response;
+ domain = wb_child_domain();
+ if (domain == NULL) {
+ return NT_STATUS_REQUEST_NOT_ACCEPTED;
+ }
+
+ /* TODO: Handle interactive logons here */
+ if (r->in.validation_level != 3 ||
+ r->in.logon.network == NULL ||
+ (r->in.logon_level != NetlogonNetworkInformation
+ && r->in.logon_level != NetlogonNetworkTransitiveInformation)) {
+ return NT_STATUS_REQUEST_NOT_ACCEPTED;
+ }
+
+
+ lm_response = data_blob_talloc(p->mem_ctx, r->in.logon.network->lm.data, r->in.logon.network->lm.length);
+ nt_response = data_blob_talloc(p->mem_ctx, r->in.logon.network->nt.data, r->in.logon.network->nt.length);
+
+ status = winbind_dual_SamLogon(domain, p->mem_ctx,
+ r->in.logon.network->identity_info.parameter_control,
+ r->in.logon.network->identity_info.account_name.string,
+ r->in.logon.network->identity_info.domain_name.string,
+ r->in.logon.network->identity_info.workstation.string,
+ r->in.logon.network->challenge,
+ lm_response, nt_response, &r->out.validation.sam3);
+ return status;
}