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