Problem mit User .forward in Exim4

L

letox

Grünschnabel
Hallo,

Auf meinem Server läuft ein aktuelles Debian Sarge mit einem 2.6.14 Kernel. Mein Exim 4.5 (aktuelles Paket in Sarge) läuft prima bis auf eine Sache. Ich möchte über die .forward Datei im User Homeverzeichnis Mails die von SA als Spam erkannt wurden, in einen anderen Unterordner im Maildir speichern lassen.

Der von Exim (laut log) benutzte Router userforward ist in der exim config wie folgt konfiguriert:

userforward:
debug_print = "R: userforward for $local_part@$domain"
driver = redirect
domains = +local_domains
check_local_user
file = $home/.forward
no_verify
no_expn
check_ancestor
allow_filter
modemask = 002
directory_transport = address_directory
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
skip_syntax_errors
syntax_errors_to = real-$local_part@$domain
syntax_errors_text = ...

Die .forward Datei sieht so aus:

# Exim filter
logfile $home/filter.log
if $h_from: contains "Mail Delivery System"
then save $home/Maildir/.Mailerror/
elif $h_X-Spam-Found: contains "Yes"
then
save $home/Maildir/.Spam/
logwrite "$message_id is spam"
else save $home/Maildir/.Inbox/
endif
logwrite "$tod_log $message_id processed"

Wie man sieht, habe ich schon Logmessages eingebaut um die .forward Datei zu überprüfen. Die entsprechenden Zeilen erscheinen auch in der filter.log Datei, die .forward Datei wird also von Exim gelesen und bearbeitet. Auch die Nachricht "xxx is spam" erscheint, Exim verzweigt also korrekt in den if-Klauseln.

Allerdings werden alle Mails direkt in das Maildir/ Verzeichnis gespeichert und nicht in die Unterverzeichnisse. Entsprechende Unterverzeichnisse (Maildir/.Spam/ etc) sind im Maildir angelegt, owner ist der user und mod ist 0600. Die Unterverzeichnisse werden von courier erkannt.

Eine Fehlermeldung bekomme ich von Exim nicht. Ich bin jetzt ratlos, woran das noch liegen könnte, dass Exim die Unterverzeichnisse nicht nutzt. Kann mir jemand helfen?

Vielen Dank im Voraus,
Hendrik
 
Ich kenne mich mit exim4 nicht aus. Da Deine Syntax laut manual
jedoch korrekt aussieht, wuerde ich vorschlagen, exim4 mal im verbose-mode starten zu lassen - die meisten Programme haben solch eine Option - und dann mal in den log-Dateien nachzuschauen, was es an der Stelle macht.
 
Hi, danke für die Antwort.

Ich hab Exim mal im Debug Modus laufen lassen und es sieht so aus als ob der userforward router das verzeichnis korrekt setzt. Allerdings wird danach der adress_directory transport aufgerufen und der setzt dann immer das Maildir/ Verzeichnis als Ziel.

address_directory:
debug_print = "T: address_directory for $local_part@$domain"
driver = appendfile
group = mail
mode = 0660
mode_fail_narrower = false
envelope_to_add = true
return_path_add = true
check_string = ""
escape_string = ""
maildir_format = true
directory = $home/Maildir

Irgendwie muss man Exim sagen, dass der das directory setzen soll wenn noch kein anders Ziel existiert. Ich trau mich aber auch nicht, den directory Eintrag einfach zu löschen, weil dann wahrscheinlich für alle User die keine .forward Datei haben die Mail nicht mehr richtig ausgeliefert wird.

Ich werd nochmal etwas im Exim Manual stöbern, wenn einer noch eine Idee hat, wär ich dankbar.

Hendrik

Edit:
Im Exim Manual ist dieser Fall zwar nicht für Maildirs beschrieben, aber der dort behandelte Fall für Mailboxfiles lässt sich anpassen. Ich habe jetzt über die Exim-eigene String Expansion eine Bedingung eingefügt, die das Ergebnis des userforward routers berücksichtigt. Dieses Ergebnis steht in der Variable $address_file. Die Konfiguration für den address_directory Transport sieht jetzt so aus:

address_directory:
debug_print = "T: address_directory for $local_part@$domain"
driver = appendfile
group = mail
mode = 0660
mode_fail_narrower = false
envelope_to_add = true
return_path_add = true
check_string = ""
escape_string = ""
maildir_format = true
directory = ${if def:address_file \
{${if eq{${substr_0_1:$address_file}}{/} \
{$address_file} \
{$home/Maildir/$address_file} \
}} \
{$home/Maildir} \
}

Ich hätte gedacht, das wäre einfacher zu lösen. Jetzt läuft es aber wenigstens.
 
Zuletzt bearbeitet:

Ähnliche Themen

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

dovecot und postfix Konfiguration Problem

Windows clients können nicht mehr auf lange laufendes System zugreifen

Falsche Rechte gesetzt beim Anlegen von Ordnern via Samba-Client

Debian squeeze, Webmin, Samba Freigaben

Zurück
Oben