dovecot-2.2: auth: If passdb sql returned only NULLs for userdb_...

dovecot at dovecot.org dovecot at dovecot.org
Wed Jul 10 05:29:58 EEST 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/9091d0f2d971
changeset: 16582:9091d0f2d971
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Jul 10 05:29:45 2013 +0300
description:
auth: If passdb sql returned only NULLs for userdb_ fields, use userdb prefetch anyway.

diffstat:

 src/auth/auth-request.c |  10 ++++++++++
 src/auth/auth-request.h |   1 +
 src/auth/passdb-sql.c   |   6 +++++-
 3 files changed, 16 insertions(+), 1 deletions(-)

diffs (47 lines):

diff -r debbcfe5577a -r 9091d0f2d971 src/auth/auth-request.c
--- a/src/auth/auth-request.c	Wed Jul 10 05:19:22 2013 +0300
+++ b/src/auth/auth-request.c	Wed Jul 10 05:29:45 2013 +0300
@@ -1397,6 +1397,16 @@
 	}
 }
 
+void auth_request_set_null_field(struct auth_request *request, const char *name)
+{
+	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);
+	}
+}
+
 void auth_request_set_field_keyvalue(struct auth_request *request,
 				     const char *field,
 				     const char *default_scheme)
diff -r debbcfe5577a -r 9091d0f2d971 src/auth/auth-request.h
--- a/src/auth/auth-request.h	Wed Jul 10 05:19:22 2013 +0300
+++ b/src/auth/auth-request.h	Wed Jul 10 05:29:45 2013 +0300
@@ -192,6 +192,7 @@
 void auth_request_set_field(struct auth_request *request,
 			    const char *name, const char *value,
 			    const char *default_scheme) ATTR_NULL(4);
+void auth_request_set_null_field(struct auth_request *request, const char *name);
 void auth_request_set_field_keyvalue(struct auth_request *request,
 				     const char *field,
 				     const char *default_scheme) ATTR_NULL(3);
diff -r debbcfe5577a -r 9091d0f2d971 src/auth/passdb-sql.c
--- a/src/auth/passdb-sql.c	Wed Jul 10 05:19:22 2013 +0300
+++ b/src/auth/passdb-sql.c	Wed Jul 10 05:29:45 2013 +0300
@@ -45,7 +45,11 @@
 		name = sql_result_get_field_name(result, i);
 		value = sql_result_get_field_value(result, i);
 
-		if (*name != '\0' && value != NULL) {
+		if (*name == '\0')
+			;
+		else if (value == NULL)
+			auth_request_set_null_field(auth_request, name);
+		else {
 			auth_request_set_field(auth_request, name, value,
 				module->conn->set.default_pass_scheme);
 		}


More information about the dovecot-cvs mailing list