Mercurial > dovecot > core-2.2
changeset 16582:9091d0f2d971
auth: If passdb sql returned only NULLs for userdb_ fields, use userdb prefetch anyway.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 10 Jul 2013 05:29:45 +0300 |
parents | debbcfe5577a |
children | 939aa051e3f1 |
files | src/auth/auth-request.c src/auth/auth-request.h src/auth/passdb-sql.c |
diffstat | 3 files changed, 16 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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);
--- 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); }