From: Timo Sirainen Date: Wed, 10 Jul 2013 02:29:45 +0000 (+0300) Subject: auth: If passdb sql returned only NULLs for userdb_ fields, use userdb prefetch anyway. X-Git-Tag: 2.2.5~77 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b4f35fa953a95e4d06fdae54d394095073fcfea0;p=thirdparty%2Fdovecot%2Fcore.git auth: If passdb sql returned only NULLs for userdb_ fields, use userdb prefetch anyway. --- diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 1f6abb6e11..cfcf24bcd7 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -1397,6 +1397,16 @@ void auth_request_set_field(struct auth_request *request, } } +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 --git a/src/auth/auth-request.h b/src/auth/auth-request.h index f5fb45a2df..be02283cd3 100644 --- a/src/auth/auth-request.h +++ b/src/auth/auth-request.h @@ -192,6 +192,7 @@ bool auth_request_set_login_username(struct auth_request *request, 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 --git a/src/auth/passdb-sql.c b/src/auth/passdb-sql.c index e0def7d0b7..55fe7167e1 100644 --- a/src/auth/passdb-sql.c +++ b/src/auth/passdb-sql.c @@ -45,7 +45,11 @@ static void sql_query_save_results(struct sql_result *result, 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); }