dovecot-2.2: auth: Previous userdb changes caused userdb prefetc...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Dec 12 18:08:36 EET 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/1600e97dabbb
changeset: 17061:1600e97dabbb
user: Timo Sirainen <tss at iki.fi>
date: Thu Dec 12 18:08:25 2013 +0200
description:
auth: Previous userdb changes caused userdb prefetch to be used always.
diffstat:
src/auth/auth-request.c | 12 +++++++-----
src/auth/auth-request.h | 3 +++
src/auth/userdb-prefetch.c | 2 +-
3 files changed, 11 insertions(+), 6 deletions(-)
diffs (62 lines):
diff -r eaadd1e1fea2 -r 1600e97dabbb src/auth/auth-request.c
--- a/src/auth/auth-request.c Thu Dec 12 17:59:28 2013 +0200
+++ b/src/auth/auth-request.c Thu Dec 12 18:08:25 2013 +0200
@@ -631,10 +631,12 @@
auth_fields_rollback(request->extra_fields);
if (request->userdb_reply == NULL)
;
- else if (!request->snapshot_has_userdb_reply)
+ else if (request->snapshot_has_userdb_reply)
+ auth_fields_rollback(request->userdb_reply);
+ else {
request->userdb_reply = NULL;
- else
- auth_fields_rollback(request->userdb_reply);
+ request->userdb_prefetch_set = FALSE;
+ }
}
if (*result == PASSDB_RESULT_USER_UNKNOWN) {
@@ -1426,6 +1428,7 @@
auth_request_validate_networks(request, value);
} else if (strncmp(name, "userdb_", 7) == 0) {
/* for prefetch userdb */
+ request->userdb_prefetch_set = TRUE;
if (request->userdb_reply == NULL)
auth_request_init_userdb_reply(request);
auth_request_set_userdb_field(request, name + 7, value);
@@ -1478,8 +1481,7 @@
if (strncmp(name, "userdb_", 7) == 0) {
/* make sure userdb prefetch is used even if all the fields
were returned as NULL. */
- if (request->userdb_reply == NULL)
- auth_request_init_userdb_reply(request);
+ request->userdb_prefetch_set = TRUE;
}
}
diff -r eaadd1e1fea2 -r 1600e97dabbb src/auth/auth-request.h
--- a/src/auth/auth-request.h Thu Dec 12 17:59:28 2013 +0200
+++ b/src/auth/auth-request.h Thu Dec 12 18:08:25 2013 +0200
@@ -136,6 +136,9 @@
or because one of the returned uid/gid fields couldn't be translated
to a number */
unsigned int userdb_lookup_tempfailed:1;
+ /* userdb_* fields have been set by the passdb lookup, userdb prefetch
+ will work. */
+ unsigned int userdb_prefetch_set:1;
/* ... mechanism specific data ... */
};
diff -r eaadd1e1fea2 -r 1600e97dabbb src/auth/userdb-prefetch.c
--- a/src/auth/userdb-prefetch.c Thu Dec 12 17:59:28 2013 +0200
+++ b/src/auth/userdb-prefetch.c Thu Dec 12 18:08:25 2013 +0200
@@ -15,7 +15,7 @@
{
/* auth_request_set_field() should have already placed the userdb_*
values to userdb_reply. */
- if (auth_request->userdb_reply == NULL) {
+ if (!auth_request->userdb_prefetch_set) {
if (auth_request_get_auth(auth_request)->userdbs->next == NULL) {
/* no other userdbs */
if (auth_request->userdb_lookup) {
More information about the dovecot-cvs
mailing list