--- src/deliver/deliver.c.orig	2006-08-10 22:47:56.000000000 +0100
+++ src/deliver/deliver.c	2006-09-05 16:29:32.850394000 +0100
@@ -231,7 +231,7 @@
 }
 
 static const struct var_expand_table *
-get_var_expand_table(const char *user, const char *home)
+get_var_expand_table(const char *user, const char *home, uid_t uid)
 {
 	static struct var_expand_table static_tab[] = {
 		{ 'u', NULL },
@@ -242,6 +242,7 @@
 		{ 'l', NULL },
 		{ 'r', NULL },
 		{ 'p', NULL },
+		{ 'i', NULL },
 		{ '\0', NULL }
 	};
 	struct var_expand_table *tab;
@@ -258,6 +259,7 @@
 	tab[5].value = NULL;
 	tab[6].value = NULL;
 	tab[7].value = my_pid;
+	tab[8].value = dec2str(uid);
 
 	return tab;
 }
@@ -356,7 +358,8 @@
 	struct istream *input;
 	struct mailbox_transaction_context *t;
 	struct mail *mail;
-	uid_t process_euid;
+	struct passwd *upw;
+	uid_t process_euid, uid;
 	int i, ret;
 
 	lib_init();
@@ -432,6 +435,13 @@
 			"destination user parameter (-d user) not given");
 	}
 
+	/* get user's details (in particular, the real uid) */
+	upw = getpwnam(user);
+	if (upw == NULL) {
+		i_fatal("Couldn't lookup user's details (user=%s)", user);
+	}
+	uid = upw->pw_uid;
+
 	config_file_init(config_path);
 	open_logfile(user);
 
@@ -483,7 +493,7 @@
 	if (mail_env == NULL) 
 		mail_env = getenv("DEFAULT_MAIL_ENV");
 	if (mail_env != NULL) {
-		table = get_var_expand_table(destination, getenv("HOME"));
+		table = get_var_expand_table(destination, getenv("HOME"), uid);
 		mail_env = expand_mail_env(mail_env, table);
 	}
 
