[Dovecot] RC7: BUG! and patch [Was: Re: rc7 bug? [Was: deliver LDA and INBOX location] (fwd)]
David Lee
t.d.lee at durham.ac.uk
Tue Sep 5 18:40:00 EEST 2006
On Tue, 5 Sep 2006, David Lee wrote:
> Anyone had any thoughts on the item below? [see earlier in thread]
>
> If the problem is with my config, I'd like to be guided towards how I
> might resolve it.
>
> If it is a bug in rc7, it would be good to fix it, and I'd be happy to
> beta-test.
BUG in rc7 (and probably from much earlier).
The LDA 'deliver' fails to honour any uid (%i) setting in dovecot.conf.
So delivery and reading happen in different places if 'default_mail_env'
uses a '%i' variant. Clearly incorrect behaviour.
Attached is a draft of a patch which fixes the problem. Please could the
patch be reviewed and, in some form, applied?
Thanks.
--
: David Lee I.T. Service :
: Senior Systems Programmer Computer Centre :
: Durham University :
: http://www.dur.ac.uk/t.d.lee/ South Road :
: Durham DH1 3LE :
: Phone: +44 191 334 2752 U.K. :
-------------- next part --------------
--- 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);
}
More information about the dovecot
mailing list