Mercurial > dovecot > core-2.2
changeset 16613:3e6b136d936c
auth: With multiple passdbs the previous passdb's userdb_* fields weren't cleared.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 12 Jul 2013 03:01:31 +0300 |
parents | 2be295a0b64f |
children | ebbe00999da8 |
files | src/auth/auth-request.c src/auth/auth-request.h |
diffstat | 2 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/auth-request.c Fri Jul 12 02:43:43 2013 +0300 +++ b/src/auth/auth-request.c Fri Jul 12 03:01:31 2013 +0300 @@ -605,10 +605,20 @@ /* this passdb lookup succeeded, preserve its extra fields */ auth_fields_snapshot(request->extra_fields); + request->snapshot_has_userdb_reply = + request->userdb_reply != NULL; + if (request->userdb_reply != NULL) + auth_fields_snapshot(request->userdb_reply); } else { /* this passdb lookup failed, remove any extra fields it set */ auth_fields_rollback(request->extra_fields); + if (request->userdb_reply == NULL) + ; + else if (!request->snapshot_has_userdb_reply) + request->userdb_reply = NULL; + else + auth_fields_rollback(request->userdb_reply); } if (*result == PASSDB_RESULT_USER_UNKNOWN) {
--- a/src/auth/auth-request.h Fri Jul 12 02:43:43 2013 +0300 +++ b/src/auth/auth-request.h Fri Jul 12 03:01:31 2013 +0300 @@ -123,6 +123,7 @@ unsigned int prefer_plain_credentials:1; unsigned int in_delayed_failure_queue:1; unsigned int removed_from_handler:1; + unsigned int snapshot_has_userdb_reply:1; /* each passdb lookup can update the current success-status using the result_* rules. the authentication succeeds only if this is TRUE at the end. mechanisms that don't require passdb, but do a passdb