dovecot-2.2: auth: With multiple passdbs the previous passdb's u...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Jul 12 03:01:44 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/3e6b136d936c
changeset: 16613:3e6b136d936c
user: Timo Sirainen <tss at iki.fi>
date: Fri Jul 12 03:01:31 2013 +0300
description:
auth: With multiple passdbs the previous passdb's userdb_* fields weren't cleared.
diffstat:
src/auth/auth-request.c | 10 ++++++++++
src/auth/auth-request.h | 1 +
2 files changed, 11 insertions(+), 0 deletions(-)
diffs (35 lines):
diff -r 2be295a0b64f -r 3e6b136d936c src/auth/auth-request.c
--- 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) {
diff -r 2be295a0b64f -r 3e6b136d936c src/auth/auth-request.h
--- 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
More information about the dovecot-cvs
mailing list