mailsurr(4) mailsurr(4)
NAME
mailsurr - Ersatzkommandos zum Routen und Übermitteln von Nachrichten
BESCHREIBUNG
Die Datei mailsurr enthält Ersatzkommandos zum Routen und Übertragen
von Nachrichten, die vom Kommando mail benutzt werden. Jeder Eintrag
besteht aus Feldern, die entweder - wie im folgenden Beispiel - durch
drei Leerzeichen voneinander getrennt und in Hochkommata eingeschlos-
sen sind:
'sender' 'recipient' 'command'
oder aus einer Zeile, die folgendermaßen beginnt:
Defaults:
Die Datei kann auch zwei- oder mehrzeilige Einträge oder Felder ent-
halten; allerdings werden führende Leerzeichen in Fortsetzungszeilen
für Felder ignoriert. Die Felder dürfen nach ihrer Expandierung maxi-
mal 1024 Zeichen enthalten.
Bei den Feldern sender und recipient handelt es sich um reguläre Aus-
drücke. Wenn die Felder sender und recipient zu den entsprechenden
Feldern der aktuell verarbeiteten Nachrichten passen, wird das zugehö-
rige Kommando aufgerufen.
Das Feld command kann in einem der folgenden fünf Formate vorliegen:
A[ccept]
D[eny]
T[ranslate] R=[|]string
< S=...;C=...;F=...; command
> command
Reguläre Ausdrücke
Die Felder sender und recipient setzen sich aus regulären Ausdrücken
zusammen, die durch die (in der C-Bibliothek enthaltenen) regexp(5)-
Funktionen compile und advance verarbeitet werden. Die zum Vergleich
verwendeten regulären Ausdrücke sind von ed(1) her bekannt, wobei ein-
fache Klammern () dieselbe Funktion wie \(\) haben. Zusätzlich werden
die egrep(1)-Operatoren + und ? unterstützt. Ist in einem regulären
Ausdruck ein Hochkomma enthalten, so muß es durch Voranstellen eines
Gegenschrägstrichs entwertet werden; andernfalls wird der reguläre
Ausdruck nicht korrekt ausgewertet.
Das Kommando mail stellt jedem regulären Ausdruck (RA) ein Zirkumflex
(^) voran und fügt an jeden regulären Ausdruck ein Dollar-Zeichen ($)
an; dadurch wird die ganze Zeichenkette zum Vergleich herangezogen.
Somit darf ein Ausdruck im Format ^RA$ nicht in den Feldern sender und
recipient vorkommen. Um eine unterschiedliche Behandlung von Groß- und
Kleinbuchstaben zu verhindern, werden alle regulären Ausdrücke vor dem
Kompilieren in Kleinbuchstaben umgewandelt; dasselbe gilt für den
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
Inhalt der Felder sender und recipient vor der Durchführung des Ver-
gleichs. Diese Umwandlungen finden ausschließlich für den Musterver-
gleich mit Hilfe der regulären Ausdrücke statt; an den Informationen
im Nachrichtenkopf ändert sich nichts.
Im Kommandofeld können die Möglichkeiten von regexp zum Musterver-
gleich mit Hilfe von Teilausdrücken genutzt werden, d. h. Ausdrücke im
Format (...) mit 1 <= n <= 9 sind zulässig. \\n wird bei jedem Auftre-
ten in der Ersatzzeichenkette durch die zugehörige Teilzeichenkette
(...) im verglichenen Muster ersetzt. Auf die Felder mit den Teilaus-
drücken kann sowohl innerhalb des Felds sender als auch innerhalb des
Felds recipient zugegriffen werden, wobei die Felder ihrer Reihenfolge
entsprechend von 1 bis 9 durchnumeriert sind.
Die Kommandos Accept und Deny
Accept weist rmail an, mit der Verarbeitung von mailsurr fortzufahren
und sämtliche nachfolgenden passenden Deny-Kommandos zu ignorieren.
Das heißt, diese Nachricht soll in jedem Fall verarbeitet und zuge-
stellt werden. Deny weist rmail an, die Verarbeitung der Datei mail-
surr zu beenden und den Absender der Nachricht darüber zu informieren,
daß sie nicht zugestellt werden kann. Sind beide Kommandos enthalten,
hat das zuerst enthaltene die Priorität.
Das Kommando Translate
Translate ermöglicht die Übersetzung der Adreßinformationen des Emp-
fangssystems "im Vorübergehen". Die Ersatzzeichenkette des Empfangssy-
stems wird im Format R=string angegeben.
Wenn die Kommandozeile beispielsweise das Format
'.+' '([^!]+)@(.+)\.EUO\.ATT\.com' 'Translate R=attmail!\\2!\\1'
und das Empfangssystem die Adresse rob@sysa.EUO.ATT.COM hat, ergibt
sich für das Empfangssystem daraus die Adresse attmail!sysa!rob.
Folgt unmittelbar auf das Gleichheitszeichen ein senkrechter Strich
(|), wird der Rest der Zeichenkette als Kommandozeile interpretiert,
die direkt von rmail auszuführen ist. Wenn Elemente der sh(1)-Syntax
(Metazeichen oder Umleitungssymbole) in irgendeiner Weise benutzt wer-
den müssen, muß das Ersatzkommando das folgende Format haben:
sh -c "shell command line..."
Es muß sorgfältigst darauf geachtet werden, daß sämtliche Gegenschräg-
striche, Hochkommata und Anführungszeichen innerhalb eines Ausdrucks
ordnungsgemäß entwertet sind: rmail benutzt Anführungszeichen zur
Gruppierung von durch Leerzeichen begrenzten Feldern, die an execl(2)
als ein einziges Argument übergeben werden sollen. Es wird davon aus-
gegangen, daß das ausgeführte Kommando ein oder mehrere Ersatzzeichen-
ketten (eine pro Zeile) auf stdout schreibt. Wird mehr als eine Zeile
zurückgegeben, so wird davon ausgegangen, daß in jeder Zeile ein ande-
rer Empfänger für die Nachricht steht. Dieser Mechanismus ist für die
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
Expandierung von Post-Listen nützlich. Wie bereits erwähnt, wird \\n
bei jedem Auftreten durch die entsprechende Teilzeichenkette ersetzt,
bevor das Kommando ausgeführt wird. Wenn das aufgerufene Kommando
nicht mindestens eine Ersatzzeichenkette (d. h. keine Ausgabe oder nur
ein Zeilenendezeichen) zurückgibt, bleibt die ursprüngliche Zeichen-
kette unverändert erhalten. So kann beispielsweise mit der Kommando-
zeile
'.+' '(.+)' 'Translate R=|/usr/bin/findpath \\1'
die Route festgelegt werden, auf der die Nachricht zu einem anderen
lokalen System übermittelt werden soll.
Wenn die Zeichenkette für die Adresse des Empfangssystems abgeändert
wird, wird mailsurr erneut ab der ersten Zeile nach der neuen Adresse
durchsucht; alle zuvor vorkommenden Accept-Kommandos werden dadurch
aufgehoben.
<-Kommando
Das <-Kommando ist für den Aufruf innerhalb des Übertragungs- und
Zustellungs-Mechanismus bestimmt, wobei die Meldung über die
Zustellungs-Bereitschaft dem Kommando als Standardeingabe übergeben
wird. Dadurch sind bei der Beendigung des Kommandos drei unterschied-
liche Bedingungen möglich:
Success Das Kommando hat die Nachricht erfolgreich zugestellt. Wie
eine erfolgreiche Zustellung genau aussieht, kann vom weite-
ren Inhalt der jeweiligen Ersatz-Datei abhängig sein. Der
rmail-Prozeß geht davon aus, daß die Nachricht für das aktu-
elle Empfangssystem nicht mehr weiterverarbeitet werden muß.
Continue Das Kommando hat zwar eine bestimmte Funktion ausgeführt
(z. B. die Protokollierung des Nachrichtenverkehrs mit
Remote-Systemen), die aber nichts mit der Zustellung der
Meldung zu tun hat. Der rmail-Prozeß sucht weiterhin in der
Datei mailsurr nach anderen Zustellungs-Mechanismen.
Failure Bei der Ausführung des Programms kam es zu einem schweren
Fehler. Der rmail-Prozeß bricht die Verarbeitung der Nach-
richt ab und schickt eine entsprechende Meldung an das Aus-
gangssystem; diese Meldung enthält zusätzlich die durch das
Kommando erzeugte stdout- und stderr-Ausgabe.
Im Feld "< command" der Datei mailsurr können Ende-Codes angegeben
werden, aus denen für jedes einzelne Ersatz-Kommando eine der drei
obengenannten Bedingungen (Success, Continue oder Failure) hervorgeht.
Der ausgegebene Ende-Status hat folgendes Format:
< WS [exitstateid=ec[,ec[,...]];][exitstateid=ec[,ec[,...]];
[...]]] WS surrogatecmdline
WS (whitespace) ist ein Leerzeichen. exitstateid kann den Wert S, C
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
oder F haben. Die exitstateids können in beliebiger Reihenfolge
angegeben werden. ec kann in folgendem Format angegeben werden:
- Eine beliebige Ganzzahl im Bereich 0 <= n <= 255 [(Es sind keine
negativen Ende-Werte möglich). Siehe exit(2) und wait(2).]
- Ein Bereich von Ganzzahlen im Format lowerlimit-upperlimit, wobei
lowerlimit >= 0 und upperlimit <= 255 sein muß.
- Ein Stern (*), der für anything steht.
So bedeutet z. B. ein command-Feld wie
'< S=1-5,99;C=0,12;F=*; command %R'
daß Endewerte von 1 bis 5 sowie der Endewert 99 eine erfolgreiche
Zustellung (Success) bedeuten, die Werte 0 (Null) und 12 Fortsetzung
der Verarbeitung (Continue), und alles andere ein Fehlschlagen der
Zustellung (Failure). Ohne explizite Definition werden standardmäßig
die Einstellungen S=0;C=*; benutzt.
Wenn zwei Ende-Zustände denselben Wert haben (z. B.
S=12,23;C=*;F=23,52; oder S=*;C=9;F=*;), kann es nicht eindeutige Ein-
träge geben. Um dem vorzubeugen, überprüft rmail die drei Bedingungen
(S(uccess), C(ontinue) und F(ailure)) hintereinander auf explizite
Ende-Werte (d. h. Ende-Werte mit ec ungleich *). Ist kein Ende-Wert
mit einer expliziten Definition vorhanden, überprüft rmail die drei
Bedingungen in derselben Reihenfolge auf ec gleich *.
Ein Ende-Status kann vollständig gelöscht werden, indem der Wert die-
ses Status auf eine unzulässige Zahl gesetzt wird. Da die Ende-Werte
im Bereich 0 bis 255 (einschließlich) liegen müssen, bietet sich die
Verwendung des Werts 256 an. Wenn Sie beispielsweise mit einem Ersatz-
kommando die Protokollierung des gesamten Nachrichtenverkehrs
initiiert hatten, bedeutet der mailsurr-Eintrag
'(.+)' '(.+)' '<S=256;C=*; /usr/lib/mail/surrcmd/logger \\1 \\2'
daß in jedem Fall die Bedingung "Continue" erfüllt ist.
Die Ersatzkommandos werden direkt durch rmail ausgeführt. Wenn Ele-
mente aus der Shell-Syntax übernommen werden müssen (Metazeichen,
Umleitungen etc.), muß das Ersatzkommando das folgende Format haben:
sh -c "shell command line..."
Dabei ist sorgfältig darauf zu achten, daß sämtliche eingefügten
Gegenschrägstriche und sonstigen Shell-Sonderzeichen ordnungsgemäß
entwertet werden.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
Wenn es keine passenden <-Kommandos gibt bzw. alle passenden <-
Kommandos mit einer Continue-Bedingung beendet werden, versucht rmail
die Nachricht selbst zuzustellen; dabei geht es davon aus, daß das
Empfangssystem sich im lokalen System befindet und übermittelt die
Nachricht an /var/mail/recipient.
>-Kommando
Das >-Kommando ist für den Aufruf nach einer erfolgreichen Zustellung
bestimmt, um sämtliche noch erforderlichen Aufgaben auszuführen. Pas-
sende >-Kommandos werden nur ausgeführt, wenn ein <-Kommando eine
erfolgreiche Zustellung meldet (siehe letzter Abschnitt) oder die
Nachricht erfolgreich an ein Empfangssystem im lokalen System zuge-
stellt wurde. Die Datei mailsurr wird erneut durchsucht, und sämtliche
passenden >-Kommandos (also nicht nur diejenigen, die auf das erfol-
greich ausgeführte <-Kommando folgen) werden in der Reihenfolge ausge-
führt, in der sie innerhalb der Datei aufeinanderfolgen. Der Ende-
Status eines >-Kommandos wird ignoriert.
Defaults:-Zeile
Die Standardeinstellungen können neu festgelegt werden, indem in die
Datei mailsurr eine separate Zeile in folgendem Format eingefügt wird:
Defaults: [S=...;][C=...;][F=...;]
Sobald die Zeile während der normalen Abarbeitung der mailsurr-Datei
festgestellt wird, werden die Defaults:-Zeilen berücksichtigt und die
angezeigten Standardwerte neu festgelegt. Daher muß die Defaults:-
Zeile ganz am Anfang der Datei stehen, wenn eine globale Neufestlegung
der Standardeinstellungen gewünscht wird. In der Datei mailsurr dürfen
auch mehrere Defaults:-Zeilen enthalten sein, wobei jede Zeile durch
die jeweils nachfolgende aufgehoben wird.
Ersetzen von Schlüsselwörtern in Ersatzkommandos
In Ersatzkommandos können bestimmte Zeichenketten enthalten sein, die
eine Sonderbedeutung haben und vor dem Aufrufen der Kommandos durch
Text ersetzt werden:
%n Der vollständige Name des Empfangssystems.
%R Der vollständige Pfadname des Ausgangssystems (nützlich zum
Übermitteln einer Antwort oder Informationen über ein Fehl-
schlagen der Nachrichtenübermittlung).
%c Wert der Content-Type:-Kopfzeile (falls vorhanden).
%C text oder binary, je nach Ergebnis der tatsächlichen
Inhaltsüberprüfung. Der Wert, der gegebenenfalls in der
Content-Type-Kopfzeile enthalten ist, spielt dabei keine
Rolle (nützlich beim Aufruf von ckbinarsys).
%S Wert der Subject:-Kopfzeile (falls vorhanden).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
%l Wert der Content-Length:-Kopfzeile.
%L Name des lokalen Systems. Hierbei handelt es sich entweder
um CLUSTER aus mailcnfg oder um den Wert, der durch uname
ausgegeben wurde.
%U Name des lokalen Systems, der von uname ausgegeben wurde.
%X Wert von SMARTERHOST in mailcnfg.
%D Name der lokalen Domäne. Hierbei handelt es sich entweder
um DOMAIN aus mailcnfg oder den Wert, der von getdomainname
ausgegeben wurde.
\\n Die passende Teilzeichenkette (...) in den verglichenen
Mustern. Somit gilt die in regexp festgelegte Obergrenze
von 9 Teilzeichenketten für die regulären Ausdrücke sender
und recipient zusammen.
%keywords Weitere Schlüsselwörter entsprechend /etc/mail/mailcnfg
[siehe mailcnfg(4)].
Die Zeichenketten %L, %U, %D sowie %keywords sind sowohl in den Fel-
dern sender und recipient als auch in den Kommandofeldern zulässig.
Das nachfolgende Beispiel zeigt einen mailsurr-Eintrag, der den in
früheren rmail-Versionen eingebauten Aufruf von uux ersetzt:
'.+' '([^@!]+)!(.+)' '< /usr/bin/uux - \\1!rmail (\\2)'
Beispiele für Mail-Ersatzkommandos
Die nachfolgenden Beispiele für Mail-Ersatzkommandos bewirken inner-
halb von LAN-Netzen die Benachrichtung von Benutzern über eingegangene
Nachrichten, die Möglichkeit zur Übermittlung der Druckausgabe per
Mail sowie die Protokollierung sämtlicher rmail-Anforderungen zwischen
Remote-Systemen (d. h. der Nachrichten, die das lokale System ledig-
lich durchlaufen). Das nachfolgende Beispiel zeigt eine mailsurr-
Datei:
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
# Die nachfolgenden Zeilen zeigen einige Ersatz-Kommandos zur Übermittlung
# von Nachrichten an Remote-Systeme. Um diese Kommandos alle oder teilweise
# aufzurufen, entfernen Sie das Nummernzeichen (#) am Anfang der betreffenden
# Zeilen (andernfalls werden die Zeilen als Kommentar interpretiert. Beachten
# Sie, daß die Kommandozeilen entsprechend ihrer Reihenfolge in der Datei
# abgearbeitet werden; tragen Sie die von Ihnen bevorzugten Ersatzkommandos
# daher an erster Stelle ein.
# Interpretation sämtlicher Shell-Metazeichen verhindern
'.+' '.*[`;&|^<>()].*' 'Deny'
# Abbilden aller Namen im Format local machine!user -> user
'.+' '%L!(.+)' 'Translate R=\1'
# Abbilden aller Namen im Format uname!user -> user
# Muß aktiviert sein, wenn das Mail-System innerhalb einer Post-Gruppe
# benutzt wird.
#'.+' '%U!(.+)' 'Translate R=\1'
# Abbilden aller Namen im Format user@host -> host!user
'.+' '([^!@]+)@(.+)' 'Translate R=\2!\1'
# Abbilden aller Namen im Format host.uucp!user-> host!user
'.+' '([^!@]+)\.uucp!(.+)' 'Translate R=\1!\2'
# Abbilden aller Namen im Format host.local-domain!user-> host!user
# DOMAIN= innerhalb von /etc/mail/mailcnfg hebt getdomainname auf.
'.+' '([^!@]+)%D!(.+)' 'Translate R=\1!\2'
# Zugriff auf 'attmail' vom Remote-System 'sysa' aus ermöglichen
'sysa!.*' 'attmail!.+' 'Accept'
# Zugriff auf 'attmail' von allen anderen Remote-Systemen aus unterbinden
'.+!.+' 'attmail!.+' 'Deny'
# Nachricht für "laser" an angeschlossenen Laserdrucker schicken
# Sicherstellen, daß Störungen per Mail rückgemeldet werden.
'.+' 'laser' '< S=0;F=*; lp -dlaser'
# Alle lokalen Namen über die Alias-Umsetzungsfunktion des Mail-Systems
# laufen lassen
'.+' '[^!@]+' 'Translate R=|/usr/bin/mailalias %n'
# Für Nachrichten an Remote-Systeme über nusend
#'.+' '([^!]+)!(.+)' '< /usr/bin/nusend -d \\1 -s -e -!"rmail \\2" -'
# Für Nachrichten an Remote-Systeme über usend
'.+' '([^!]+)!(.+)' '< /usr/bin/usend -s -d\\1 -uNoLogin -!"rmail \\2" - '
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
# Für Nachrichten an Remote-Systeme über uucp
'.+' '([^!@]+)!.+' '<S=256;C=0;
/usr/lib/mail/surrcmd/ckbinarsys -t %C -s \\1'
'.+' '([^!@]+)!(.+)' '< /usr/bin/uux - \\1!rmail (\\2)'
# Für Nachrichten an Remote-Systeme über smtp
#'.+' '([^!@]+)!(.+)' '< /usr/lib/mail/surrcmd/smtpqer %R %n'
# Wenn keines der aufgeführten Verfahren funktioniert,
# soll ein Router die Adresse ändern.
#'.+' '.*[!@].*' 'Translate R=| /usr/lib/mail/surrcmd/smail -A %n'
# Wenn keines der aufgeführten Verfahren funktioniert, sollen die
# Remote-Nachrichten an einen intelligenteren Host geschickt werden.
# Sicherstellen, daß SMARTERHOST= in /etc/mail/mailcnfg definiert ist.
#'.+' '.*[!@].*' 'Translate R=%X!%n'
# Protokollierung der erfolgreich zugestellten Nachrichten
'(.+)' '(.+)' '>/usr/lib/mail/surrcmd/logger \1 \2'
Beachten Sie, daß beim Aufrufen von mail zum Lesen von Nachrichten
weder ein Zugriff auf die Datei mailsurr stattfindet noch Ersatzver-
fahren benutzt werden.
Sicherheit
Die Ersatzkommandos werden mit denselben Zugriffsberechtigungen wie
rmail ausgeführt (Benutzernummer des Aufrufers, Gruppennummer der
Nachricht). Dadurch können Ersatzkommandos sich selbst auf ihre Zuläs-
sigkeit überprüfen, indem sie sicherstellen, daß ihre effektive Grup-
pennummer beim Aufruf mail war. Aus diesem Grund müssen sämtliche
Erweiterungen der Datei mailsurr vorab genau überprüft werden, um den
Zugriff auf die Nachrichtendateien des Benutzers durch Unbefugte zu
verhindern. Sämtliche Ersatzkommandos werden mit dem Pfadnamen
/usr/lib/mail/surrcmd:/usr/bin aufgerufen.
Fehlersuche in neuen mailsurr-Einträgen
Zur Fehlersuche in mailsurr-Dateien rufen Sie das Kommando mail mit
der Option -T auf. Bei der Option -T muß ein Argument angegeben wer-
den, das als Pfadname einer mailsurr-Testdatei benutzt wird. Wenn kein
Pfadname angegeben wird (wie in -T ""), wird die mailsurr-Datei des
Systems benutzt. Wenn Sie das Kommando
mail -T testfile recipient
eingeben, erscheint eine simple Meldung (wie z. B. testing) auf dem
Bildschirm, gefolgt von einer Zeile, in der entweder nur ein Punkt (.)
oder CNTL-D enthalten ist. Das Ergebnis von -T wird auf der Standard-
Ausgabe ausgegeben; im einzelnen sind hier die vom Benutzer getätigten
Eingaben sowie die sich daraus ergebenden Umsetzungen enthalten, die
das Kommando mail bei der Verarbeitung der Datei mailsurr für den
angegebenen recipient durchgeführt hat.
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
mailsurr(4) mailsurr(4)
Mit der Option -T können auf keinen Fall Nachrichten abgeschickt oder
zugestellt werden.
HINWEISE
Nach dem Einfügen von neuen Einträgen in die mailsurr-Datei des
Systems sollte ihre Syntax auf jeden Fall mit mail -T ... auf Fehler
überprüft werden.
DATEIEN
/etc/mail/mailsurr
/usr/lib/mail/surrcmd/*
Ersatzkommandos
/etc/mail/mailcnfg
Informationen zur Initialisierung von mail
SIEHE AUCH
ed(1), egrep(1), mail(1), sh(1), uux(1), ckbinarsys(1M), exec(2),
exit(2), wait(2), popen(3S), mailcnfg(4), regexp(5).
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98