diff --git a/source/rpc_server/dcerpc_server.h b/source/rpc_server/dcerpc_server.h index 44726b58285..386da6fc575 100644 --- a/source/rpc_server/dcerpc_server.h +++ b/source/rpc_server/dcerpc_server.h @@ -94,7 +94,7 @@ struct dcesrv_handle { void (*destroy)(struct dcesrv_connection *, struct dcesrv_handle *); }; -struct dcesrv_cyrpto_ops { +struct dcesrv_crypto_ops { const char *name; uint8 auth_type; NTSTATUS (*start)(struct dcesrv_auth *auth); @@ -116,7 +116,7 @@ struct dcesrv_auth { struct dcerpc_auth *auth_info; struct { void *private_data; - const struct dcesrv_cyrpto_ops *ops; + const struct dcesrv_crypto_ops *ops; } crypto_ctx; }; diff --git a/source/rpc_server/dcesrv_crypto.c b/source/rpc_server/dcesrv_crypto.c index 11956fe3be0..6d46388c97a 100644 --- a/source/rpc_server/dcesrv_crypto.c +++ b/source/rpc_server/dcesrv_crypto.c @@ -34,8 +34,6 @@ 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) { DEBUG(2,("auth_level %d not supported in dcesrv auth\n", @@ -58,24 +56,13 @@ NTSTATUS dcesrv_crypto_select_type(struct dcesrv_connection *dce_conn, * maybe a dcesrv_crypto_find_backend_by_type() whould be better here * to make thinks more generic */ - switch (auth->auth_info->auth_type) { - -/* case DCERPC_AUTH_TYPE_SCHANNEL: - status = dcesrv_crypto_schannel_get_ops(dce_conn, auth); - break; -*/ - case DCERPC_AUTH_TYPE_NTLMSSP: - status = dcesrv_crypto_ntlmssp_get_ops(dce_conn, auth); - break; - - default: + auth->crypto_ctx.ops = dcesrv_crypto_backend_bytype(auth->auth_info->auth_type); + if (auth->crypto_ctx.ops == NULL) { DEBUG(2,("dcesrv auth_type %d not supported\n", auth->auth_info->auth_type)); return NT_STATUS_INVALID_PARAMETER; } - DEBUG(4,("dcesrv_crypto_startup: %s\n", nt_errstr(status))); - - return status; + return NT_STATUS_OK; } /* @@ -139,3 +126,17 @@ void dcesrv_crypto_end(struct dcesrv_auth *auth) { auth->crypto_ctx.ops->end(auth); } + +const struct dcesrv_crypto_ops *dcesrv_crypto_backend_bytype(uint8_t auth_type) +{ + switch (auth_type) { +#if 0 + case DCERPC_AUTH_TYPE_SCHANNEL: + return dcesrv_crypto_schannel_get_ops(); +#endif + case DCERPC_AUTH_TYPE_NTLMSSP: + return dcesrv_crypto_ntlmssp_get_ops(); + } + + return NULL; +} diff --git a/source/rpc_server/dcesrv_crypto_ntlmssp.c b/source/rpc_server/dcesrv_crypto_ntlmssp.c index b894f0f25d8..0f1939ea1b1 100644 --- a/source/rpc_server/dcesrv_crypto_ntlmssp.c +++ b/source/rpc_server/dcesrv_crypto_ntlmssp.c @@ -113,7 +113,7 @@ static void dcesrv_crypto_ntlmssp_end(struct dcesrv_auth *auth) return; } -static const struct dcesrv_cyrpto_ops dcesrv_crypto_ntlmssp_ops = { +static const struct dcesrv_crypto_ops dcesrv_crypto_ntlmssp_ops = { .name = "ntlmssp", .auth_type = DCERPC_AUTH_TYPE_NTLMSSP, .start = dcesrv_crypto_ntlmssp_start, @@ -128,12 +128,7 @@ static const struct dcesrv_cyrpto_ops dcesrv_crypto_ntlmssp_ops = { /* startup the cryptographic side of an authenticated dcerpc server */ -NTSTATUS dcesrv_crypto_ntlmssp_get_ops(struct dcesrv_connection *dce_conn, - struct dcesrv_auth *auth) +const struct dcesrv_crypto_ops *dcesrv_crypto_ntlmssp_get_ops(void) { - NTSTATUS status = NT_STATUS_OK; - - auth->crypto_ctx.ops = &dcesrv_crypto_ntlmssp_ops; - - return status; + return &dcesrv_crypto_ntlmssp_ops; }