From e82511362eb29f75fd940bb3377589c62fb2984a Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Wed, 29 Jun 2016 14:55:12 +0300 Subject: [PATCH] auth-policy: Do not do policy checks every time --- src/auth/auth-request.c | 43 ++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 6c2ff9030e..cb9ba4607c 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -872,19 +872,19 @@ void auth_request_verify_plain(struct auth_request *request, i_assert(request->state == AUTH_REQUEST_STATE_MECH_CONTINUE); - ctx = p_new(request->pool, struct auth_policy_check_ctx, 1); - ctx->request = request; - if (request->mech_password == NULL) - ctx->password = p_strdup(request->pool, password); - else - ctx->password = request->mech_password; - ctx->callback_plain = callback; - ctx->type = AUTH_POLICY_CHECK_TYPE_PLAIN; - if (request->policy_processed) auth_request_verify_plain_continue(request, ctx->password, callback); - else + else { + ctx = p_new(request->pool, struct auth_policy_check_ctx, 1); + ctx->request = request; + if (request->mech_password == NULL) + ctx->password = p_strdup(request->pool, password); + else + ctx->password = request->mech_password; + ctx->callback_plain = callback; + ctx->type = AUTH_POLICY_CHECK_TYPE_PLAIN; auth_policy_check(request, ctx->password, auth_request_policy_check_callback, ctx); + } } static @@ -1038,16 +1038,19 @@ void auth_request_lookup_credentials(struct auth_request *request, i_assert(request->state == AUTH_REQUEST_STATE_MECH_CONTINUE); - ctx = p_new(request->pool, struct auth_policy_check_ctx, 1); - ctx->request = request; - if (request->credentials_scheme == NULL) - ctx->scheme = p_strdup(request->pool, scheme); - else - ctx->scheme = request->credentials_scheme; - ctx->callback_lookup = callback; - ctx->type = AUTH_POLICY_CHECK_TYPE_LOOKUP; - - auth_policy_check(request, ctx->password, auth_request_policy_check_callback, ctx); + if (request->policy_processed) + auth_request_lookup_credentials_policy_continue(request, scheme, callback); + else { + ctx = p_new(request->pool, struct auth_policy_check_ctx, 1); + ctx->request = request; + if (request->credentials_scheme == NULL) + ctx->scheme = p_strdup(request->pool, scheme); + else + ctx->scheme = request->credentials_scheme; + ctx->callback_lookup = callback; + ctx->type = AUTH_POLICY_CHECK_TYPE_LOOKUP; + auth_policy_check(request, ctx->password, auth_request_policy_check_callback, ctx); + } } static -- 2.47.3