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