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