From: Timo Sirainen Date: Fri, 29 Apr 2016 17:23:00 +0000 (+0300) Subject: auth: Fixed final result in multiple userdbs X-Git-Tag: 2.3.0.rc1~3898 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efdaf9393742367a0d563a9cab3c9c4b6371e90d;p=thirdparty%2Fdovecot%2Fcore.git auth: Fixed final result in multiple userdbs We don't want to return the last result's success/failure, but the entire userdb chain's success/failure. --- diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 873fd80f39..beb707e31a 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -1140,10 +1140,11 @@ void auth_request_userdb_callback(enum userdb_result result, return; } - if (request->userdb_success) + if (request->userdb_success) { + result = USERDB_RESULT_OK; userdb_template_export(userdb->override_fields_tmpl, request); - else if (request->userdbs_seen_internal_failure || - result == USERDB_RESULT_INTERNAL_FAILURE) { + } else if (request->userdbs_seen_internal_failure || + result == USERDB_RESULT_INTERNAL_FAILURE) { /* one of the userdb lookups failed. the user might have been in there, so this is an internal failure */ result = USERDB_RESULT_INTERNAL_FAILURE; @@ -1157,6 +1158,9 @@ void auth_request_userdb_callback(enum userdb_result result, auth_request_log_error(request, AUTH_SUBSYS_MECH, "user not found from any userdbs"); } + result = USERDB_RESULT_USER_UNKNOWN; + } else { + result = USERDB_RESULT_USER_UNKNOWN; } if (request->userdb_lookup_tempfailed) {