mirror of
https://github.com/samba-team/samba.git
synced 2025-02-28 01:58:17 +03:00
r6457: Simply the RPC server code for the choice of GENSEC mech - it's just
one function call now, so no need for a wrapper function. Andrew Bartlett
This commit is contained in:
parent
b35b82d4f1
commit
c023f5c5e8
@ -24,50 +24,6 @@
|
||||
#include "includes.h"
|
||||
#include "rpc_server/dcerpc_server.h"
|
||||
|
||||
/*
|
||||
startup the cryptographic side of an authenticated dcerpc server
|
||||
*/
|
||||
NTSTATUS dcesrv_crypto_select_type(struct dcesrv_connection *dce_conn,
|
||||
struct dcesrv_auth *auth)
|
||||
{
|
||||
NTSTATUS status;
|
||||
if (auth->auth_info->auth_level != DCERPC_AUTH_LEVEL_INTEGRITY &&
|
||||
auth->auth_info->auth_level != DCERPC_AUTH_LEVEL_PRIVACY &&
|
||||
auth->auth_info->auth_level != DCERPC_AUTH_LEVEL_CONNECT) {
|
||||
DEBUG(2,("auth_level %d not supported in dcesrv auth\n",
|
||||
auth->auth_info->auth_level));
|
||||
return NT_STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (auth->gensec_security != NULL) {
|
||||
/* TODO:
|
||||
* this this function should not be called
|
||||
* twice per dcesrv_connection!
|
||||
*
|
||||
* so we need to find out the right
|
||||
* dcerpc error to return
|
||||
*/
|
||||
}
|
||||
|
||||
status = gensec_server_start(dce_conn, &auth->gensec_security);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(1, ("Failed to start GENSEC server code: %s\n", nt_errstr(status)));
|
||||
return status;
|
||||
}
|
||||
|
||||
status = gensec_start_mech_by_authtype(auth->gensec_security, auth->auth_info->auth_type,
|
||||
auth->auth_info->auth_level);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(1, ("Failed to start GENSEC mech-specific server code (%d): %s\n",
|
||||
(int)auth->auth_info->auth_type,
|
||||
nt_errstr(status)));
|
||||
return status;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
parse any auth information from a dcerpc bind request
|
||||
return False if we can't handle the auth request for some
|
||||
@ -77,6 +33,7 @@ BOOL dcesrv_auth_bind(struct dcesrv_call_state *call)
|
||||
{
|
||||
struct dcerpc_packet *pkt = &call->pkt;
|
||||
struct dcesrv_connection *dce_conn = call->conn;
|
||||
struct dcesrv_auth *auth = &dce_conn->auth_state;
|
||||
NTSTATUS status;
|
||||
|
||||
if (pkt->u.bind.auth_info.length == 0) {
|
||||
@ -97,8 +54,19 @@ BOOL dcesrv_auth_bind(struct dcesrv_call_state *call)
|
||||
return False;
|
||||
}
|
||||
|
||||
status = dcesrv_crypto_select_type(dce_conn, &dce_conn->auth_state);
|
||||
status = gensec_server_start(dce_conn, &auth->gensec_security);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(1, ("Failed to start GENSEC server code: %s\n", nt_errstr(status)));
|
||||
return False;
|
||||
}
|
||||
|
||||
status = gensec_start_mech_by_authtype(auth->gensec_security, auth->auth_info->auth_type,
|
||||
auth->auth_info->auth_level);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(1, ("Failed to start GENSEC mech-specific server code (%d): %s\n",
|
||||
(int)auth->auth_info->auth_type,
|
||||
nt_errstr(status)));
|
||||
return False;
|
||||
}
|
||||
|
||||
@ -131,7 +99,7 @@ BOOL dcesrv_auth_bind_ack(struct dcesrv_call_state *call, struct dcerpc_packet *
|
||||
return False;
|
||||
}
|
||||
|
||||
/* Now that we are authenticated, got back to the generic session key... */
|
||||
/* Now that we are authenticated, go back to the generic session key... */
|
||||
dce_conn->auth_state.session_key = dcesrv_generic_session_key;
|
||||
return True;
|
||||
} else if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user