--- 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); }