Mercurial > dovecot > core-2.2
changeset 15531:fe1be6725304
lib-storage: Added struct mail_user.nonexistent flag, which is filled by userdb lookup.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 27 Nov 2012 10:49:18 +0200 |
parents | a9e7f9333f57 |
children | 7bca3be44b8f |
files | src/lib-storage/mail-user.c src/lib-storage/mail-user.h |
diffstat | 2 files changed, 14 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-user.c Tue Nov 27 10:48:11 2012 +0200 +++ b/src/lib-storage/mail-user.c Tue Nov 27 10:49:18 2012 +0200 @@ -289,9 +289,6 @@ if (user->remote_ip != NULL) info.remote_ip = *user->remote_ip; - if (mail_user_auth_master_conn == NULL) - return 0; - userdb_pool = pool_alloconly_create("userdb lookup", 2048); ret = auth_master_user_lookup(mail_user_auth_master_conn, user->username, &info, userdb_pool, @@ -313,12 +310,18 @@ return user->_home != NULL ? 1 : 0; } - ret = mail_user_userdb_lookup_home(user); - if (ret < 0) + if (mail_user_auth_master_conn == NULL) { + /* no userdb connection. we can only use mail_home setting. */ + user->_home = user->set->mail_home; + } else if ((ret = mail_user_userdb_lookup_home(user)) < 0) { + /* userdb lookup failed */ return -1; - - if (ret > 0 && user->_home == NULL && *user->set->mail_home != '\0') { - /* no home in userdb, fallback to mail_home setting */ + } else if (ret == 0) { + /* user doesn't exist */ + user->nonexistent = TRUE; + } else if (user->_home == NULL && *user->set->mail_home != '\0') { + /* no home returned by userdb lookup, fallback to mail_home + setting. */ user->_home = user->set->mail_home; } user->home_looked_up = TRUE;
--- a/src/lib-storage/mail-user.h Tue Nov 27 10:48:11 2012 +0200 +++ b/src/lib-storage/mail-user.h Tue Nov 27 10:49:18 2012 +0200 @@ -42,6 +42,9 @@ /* Module-specific contexts. See mail_storage_module_id. */ ARRAY_DEFINE(module_contexts, union mail_user_module_context *); + /* User doesn't exist (as reported by userdb lookup when looking + up home) */ + unsigned int nonexistent:1; /* Either home is set or there is no home for the user. */ unsigned int home_looked_up:1; /* User is an administrator. Allow operations not normally allowed