• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

procmail ruft Programme nicht auf - Zeichensatzproblem?

hi,
wollte nach einer Anleitung (http://www.denkweite.de/2007-03-10/lokaler-mailserver-mit-fetchmail-procmail-und-cyrus/) einen Mailserver simulieren.
Procmail arbeitet aber nur teilweise erwartungsgemäß; aus der folgenden /root/.procmailrc
#Konfiguration der Mailsortierung
#########################################
# Variablen setzen
DELIVER=/usr/lib/cyrus/bin/deliver
LOGFILE=/var/log/procmail.schade
VERBOSE=on

## Diese Regel leitet ALLE empfangenden Mails zusätzlich in die Datei "savemails" weiter. Das ist zum Testen eine gute Sache, da dann keine Mails verloren gehen, Wenn alles funktioniert, diesen Teil unbedingt auskommentieren.
:0 c
savemails
:0 c
| cat >> /fMails.txt
## Die Regel leitet alle Mails, die kleiner als 250kb sind an SPAMASSASSIN weiter
:0fw: /usr/bin/spamassassin.lock
* < 256000
| /usr/bin/spamc
## Alle Mails ab 15 Spampunkten werden in ein separates Verzeichnis sortiert
## Man könnte diese auch direkt löschen.
:0fw: /usr/bin/spamassassin.lock2
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
| $DELIVER -e -a schade -m user.schade.Junk
## Schlussendlich alle Mails an tiberians Mailbox übergeben.
:0 w
| "$DELIVER -e -a schade -m user.schade "
werden die roten Befehle nicht ausgeführt, egal ob mit oder ohne Anführungszeichen um den Befehl plus minus ein Leerzeichen oder den Befehl samt Parameter, wie obenstehend noch beim zweiten Befehl. Der blaue Befehl, der nur zum Testen drin ist, funzt.
Hier ein Auszug aus der Log-Datei "/var/log/procmail.schade?":
...
Subject: =?ISO-8859-1?Q?G=FCnstiger_geht's_kaum:_F=FCr_nur_7,5_ct/Min._in_alle
Folder: /var/spool/mail/root 160616
procmail: [1147] Sun Feb 28 23:54:44 2010
procmail: Skipped "^M"
procmail: Skipped "^M"
procmail: Assigning "LASTFOLDER=savemails^M"
procmail: Opening "savemails^M"
procmail: Acquiring kernel-lock
procmail: Skipped "^M"
procmail: Assigning "LASTFOLDER= cat >> /fMails.txt^M"
procmail: Executing " cat >> /fMails.txt^M"
procmail: Skipped "^M"
procmail: Match on "< 256000^M"
procmail: Locking "/usr/bin/spamassassin.lock^M"
procmail: Executing "/usr/bin/spamc^M"
/bin/sh: /usr/bin/spamc
: No such file or directory
procmail: Program failure (127) of "/usr/bin/spamc^M"
procmail: Rescue of unfiltered data succeeded
procmail: Unlocking "/usr/bin/spamassassin.lock^M"
procmail: No match on "^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*^M"
procmail: Skipped "^M"
procmail: Executing "/usr/lib/cyrus/bin/deliver -e -a schade -m user.schade ^M"
/bin/sh: /usr/lib/cyrus/bin/deliver -e -a schade -m user.schade
: No such file or directory
procmail: Program failure (127) of "/usr/lib/cyrus/bin/deliver -e -a schade -m user.schade ^M"
procmail: Assigning "LASTFOLDER=/usr/lib/cyrus/bin/deliver -e -a schade -m user.schade ^M"
Schon mal das Fragezeichen am Ende des Dateinamens kann ich mir nicht erklären. Es verschwindet auch nicht durch Anführungszeichen in der Variablendefinition in der /root/.procmailrc

Hier noch die /root/.fetchmailrc:
# Configuration created Sun Feb 28 00:18:56 2010 by fetchmailconf 1.56 $Revision: 5433 $
#set postmaster "postmaster"
#set bouncemail
#set no spambounce
#set softbounce
#set properties ""
#set daemon 600
poll pop.gmx.net with proto POP3
user 'g1s@gmx.de' there with password '...' is 'GMX1' here options keep fetchall mda "su root -c /usr/bin/procmail "
Wenn ich vor /usr/bin/procmail das "su root -c " weglasse, passiert ungefähr das gleiche, nur dass er in der procmail.schade? zusätzlich meldet, der könne in die /usr/bin/spamc und in die /usr/lib/cyrus/bin/deliver nichts schreiben.
Der fehlerauslösende Aufruf ist:
fetchmail -kv
Kann mir jemand einen Tip geben?
 
Code:
[...]
procmail: Executing "/usr/bin/spamc^M"
/bin/sh: /usr/bin/spamc
: No such file or directory
procmail: Program failure (127) of "/usr/bin/spamc^M"
[...]
procmail: Executing "/usr/lib/cyrus/bin/deliver -e -a schade -m user.schade ^M"
/bin/sh: /usr/lib/cyrus/bin/deliver -e -a schade -m user.schade 
: No such file or directory
procmail: Program failure (127) of "/usr/lib/cyrus/bin/deliver -e -a schade -m user.schade ^M"
[...]
Steht da doch eigentlich recht eindeutig. /usr/bin/spamc und /usr/lib/cyrus/bin/deliver -e -a schade -m user.schade werden nicht gefunden bzw. existieren nicht.
Stimmen die Pfade?
Stimmen die Namen?
 
Hallo zitrone,
ja, die Pfade stimmen. Die Dateien sind außerdem für Benutzer, Gruppe und alle les- und ausführbar (jeweils die Rechte r und x).
Die Behauptung ": No such file or directory" klingt schon eindeutig.
Nachdem bereits an den Namen der Log-Datei ein Fragezeichen mir unbekannter Herkunft angehängt wird, werden dann vielleicht die Leerzeichen in den Befehlen auch in irgendwelche anderen Zeichen übersetzt?
Steht ^M für die aktuell verarbeitete Mail?
Warum steht das ^M hinter /usr/bin/sapmc ohne Leerzeichen? (dieses kann ich zwar erzeugen, indem ich "/usr/bin/spamc" in Anführungszeichen anweise, das hilft aber auch nichts).
Noch ein Tip?
 
libelle17 schrieb:
Steht ^M für die aktuell verarbeitete Mail?
Die ^M Zeichen bedeuten dass die Datei .procmailrc nicht mit UNIX Zeilenende Kennung (CR) sondern mit DOS/Windows Zeilenende (CR LF) gespeichert wurde.
Normalerweise hat das keine Auswirkung auf die Verarbeitung, bei procmail bin ich mir nicht sicher. Sicherheitshalber solltest du die Datei mit dos2unix oder einem Editor in das native UNIX Format ändern.

Zum Thema Zeichensatz: da procmail zur filterung der Mail Header konzipiert ist und diese immer in US-ASCII sind behandelt procmail alle Mails als US-ASCII.
 
Oben