diff options
author | Andrew Bartlett <abartlet@samba.org> | 2014-05-08 16:49:13 +1200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2014-06-11 12:43:58 +0200 |
commit | ba4467ca65d5f85a2732da27d88760b684c6e30d (patch) | |
tree | c7c8ad4191091424d0071f1fe92bce8cc0d61461 /source3/winbindd/winbindd_dual_srv.c | |
parent | eabe7d732e6d9b64004bbb477384a1eae999815f (diff) | |
download | samba-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.c | 32 |
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; } |