Dans le cas d’une configuration mail par comptes utilisateurs locaux (utilisateurs systèmes), il est courant de configurer un alias de redirection par le biais du fichier .forward situé dans le répertoire personnel de chaque utilisateur. Le problème est qu’il est impossible de modifier ce fichier au travers d’une interface web ou encore son webmail vu que des restrictions d’accès s’appliquent à ces fichiers. En particulier , la vérification du propriétaire sous Postfix :

Feb 12 17:04:47 mail postfix/local[15208]: warning: file /home/bhuisgen/.forward has bad owner uid 33

La redirection mail est évidemment bloquée. Le patch proposé vise donc à supprimer ce test et permettre l’envoi du mail vers l’adresse de redirection :

root@mail:~# apt-get build-dep postfix
root@mail:~# apt-get source postfix
root@mail:~# cd postfix-2.7.1/
root@mail:~# cd src/local/

Le patch à appliquer est le suivant :

--- dotforward.c.old    2012-02-12 17:35:34.000000000 +0100
+++ dotforward.c    2012-02-12 17:36:23.000000000 +0100
@@ -231,12 +231,12 @@
state.msg_attr.exp_from = state.msg_attr.local;
if (S_ISREG(st.st_mode) == 0) {
msg_warn("file %s is not a regular file", STR(path));
-        } else if (st.st_uid != 0 && st.st_uid != usr_attr.uid) {
+        } /*else if (st.st_uid != 0 && st.st_uid != usr_attr.uid) {
msg_warn("file %s has bad owner uid %ld",
STR(path), (long) st.st_uid);
} else if (st.st_mode & 002) {
msg_warn("file %s is world writable", STR(path));
-        } else if ((fd = open_as(STR(path), O_RDONLY, 0, usr_attr.uid, usr_attr.gid)) < 0) {
+        } */else if ((fd = open_as(STR(path), O_RDONLY, 0, usr_attr.uid, usr_attr.gid)) < 0) {
msg_warn("cannot open file %s: %m", STR(path));
} else {
root@mail:~# patch -p0 < patch-fix_forward-20120213

Reste à compiler et installer :

root@mail:~# cd ../..
root@mail:~# dpkg-buildpackage -rfakeroot
root@mail:~# cd ..
root@mail:~# dpkg -i postfix_2.7.1-1+squeeze1_amd64.deb

Et j’en profite pour vous signaler que j’ai fait un minuscule plugin pour le webmail RoundCube, disponible ici. afin de gérer les .forward.