From: Timo Sirainen Date: Tue, 28 May 2013 13:30:38 +0000 (+0300) Subject: auth: Fixed caching empty userdb result. X-Git-Tag: 2.2.3~117 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7606d44ea3d7a324ee80805a6ceccbad0e1d461e;p=thirdparty%2Fdovecot%2Fcore.git auth: Fixed caching empty userdb result. --- diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 593eec9bec..53153af013 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -32,6 +32,7 @@ #define AUTH_DNS_DEFAULT_TIMEOUT_MSECS (1000*10) #define AUTH_DNS_WARN_MSECS 500 #define CACHED_PASSWORD_SCHEME "SHA1" +#define AUTH_REQUEST_KEY_IGNORE " " struct auth_request_proxy_dns_lookup_ctx { struct auth_request *request; @@ -923,6 +924,11 @@ static void auth_request_userdb_save_cache(struct auth_request *request, auth_fields_append(request->userdb_reply, str, AUTH_FIELD_FLAG_CHANGED, AUTH_FIELD_FLAG_CHANGED); + if (str_len(str) == 0) { + /* no userdb fields. but we can't save an empty string, + since that means "user unknown". */ + str_append(str, AUTH_REQUEST_KEY_IGNORE); + } cache_value = str_c(str); } /* last_success has no meaning with userdb */ @@ -1503,6 +1509,8 @@ void auth_request_set_userdb_field(struct auth_request *request, warned = TRUE; } name = "system_groups_user"; + } else if (strcmp(name, AUTH_REQUEST_KEY_IGNORE) == 0) { + return; } auth_fields_add(request->userdb_reply, name, value, 0);