]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added struct mail_user.nonexistent flag, which is filled by userdb lookup.
authorTimo Sirainen <tss@iki.fi>
Tue, 27 Nov 2012 08:49:18 +0000 (10:49 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 27 Nov 2012 08:49:18 +0000 (10:49 +0200)
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h

index f4413e1fc7ace4bd4c62e7d7419680ec8cf31aa0..5853ff4431658840a5e81cacedcc569515664591 100644 (file)
@@ -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;
index 81c72ed6eeaacfffa5b9681be75665f097af5c6d..9b575d68dd23f1af28ac782516d3411e98310075 100644 (file)
@@ -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