From 496184578081a201b6a4fb346070d2eb20e6f5de Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 27 Nov 2012 10:49:18 +0200 Subject: [PATCH] lib-storage: Added struct mail_user.nonexistent flag, which is filled by userdb lookup. --- src/lib-storage/mail-user.c | 19 +++++++++++-------- src/lib-storage/mail-user.h | 3 +++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index f4413e1fc7..5853ff4431 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -289,9 +289,6 @@ static int mail_user_userdb_lookup_home(struct mail_user *user) 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 @@ int mail_user_get_home(struct mail_user *user, const char **home_r) 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; diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index 81c72ed6ee..9b575d68dd 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -42,6 +42,9 @@ struct mail_user { /* 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 -- 2.47.3