NAZWA
procmail - autonomiczny procesor pocztySKŁADNIA
procmail [-ptoY] [-f od_kogo] [ parametr= wartość | plik_rc] ...OPIS
Szybką orientację w temacie można uzyskać, czytając umieszczone na końcu UWAGI. Procmail powinien być wywoływany automatycznie, korzystając z mechanizmu .forward w momencie przybycia listu. Alternatywnie, gdy jest zainstalowany przez administratora systemu, może być wywoływany bezpośrednio przez program pocztowy (mailer). Po wywołaniu, najpierw ustawia na wartości domyślne pewne zmienne środowiskowe, odczytuje wiadomość pocztową ze stdin (do EOF), oddziela jej treść od nagłówka, a następnie, jeśli nie podano argumentów wiersza poleceń, zaczyna szukać pliku o nazwie $HOME/.procmailrc. Stosownie do reguł przetwarzania zawartych w tym pliku świeżo otrzymana wiadomość pocztowa zostaje umieszczona we właściwym katalogu. Jeśli nie istnieje plik rc, lub jego przetwarzanie dojdzie do końca, procmail zapisze wiadomość w domyślnej skrzynce pocztowej (mailbox) systemu. Jeśli nie podano ani pliku rc, ani opcji -p w wierszu poleceń, to program przed odczytaniem $HOME/.procmailrc zinterpretuje polecenia zawarte w /etc/procmailrc (o ile istnieją). Podczas tworzenia /etc/procmailrc trzeba uważać, ponieważ jeśli warunki na to pozwolą, zostanie on uruchomiony z prawami administratora (w przeciwieństwie do pliku $HOME/.procmailrc). Jeśli procmail zostanie uruchomiony z uprawnieniami roota lub jako suid root, to może pracować jako agent dostarczania poczty (mail delivery agent), z poszerzonymi możliwościami, wstecznie zgodny. Można go też wykorzystywać jako uniwersalny filtr pocztowy, tzn. poczyniono pewne kroki, by procmail mógł być wywoływany w specjalnej regule programu sendmail(8). Format pliku rc jest opisany szczegółowo na stronie podręcznika procmailrc(5). Technika punktowania ważonego jest szczegółowo opisana na stronie procmailsc(5). Przykłady plików rc można obejrzeć na stronie procmailex(5).Sygnały
- TERMINATE
- Kończy przedwcześnie i ponownie kolejkuje
wiadomość.
- HANGUP
- Kończy przedwcześnie i odbija
wiadomość do nadawcy.
- INTERRUPT
- Kończy przedwcześnie i odbija
wiadomość do nadawcy.
- QUIT
- Kończy przedwcześnie i milcząco traci
wiadomość.
- ALARM
- Wymusza przekroczenie limitu czasu (zobacz TIMEOUT).
- USR1
- Odpowiednik VERBOSE=off.
- USR2
- Odpowiednik VERBOSE=on.
OPCJE
- -v
- Procmail wypisuje swój numer wersji,
wyświetla wkompilowaną konfigurację i kończy
działanie.
- -p
- Preserve any old environment. Normally procmail clears the
environment upon startup, except for the value of TZ. However, in any
case: any default values will override any preexisting environment
variables, i.e., procmail will not pay any attention to any predefined
environment variables, it will happily overwrite them with its own
defaults. For the list of environment variables that procmail will preset
see the procmailrc(5) man page. If both -p and -m are specified,
the list of preset environment variables shrinks to just: LOGNAME, HOME,
SHELL, USER_SHELL, ORGMAIL and MAILDIR.
- -t
- Powoduje, że procmail zawodzi łagodnie, np.
jeśli nie może dostarczyć przesyłki do
żadnego z podanych mu celów, wiadomość nie
zostanie odbita, lecz powróci do kolejki poczty. W
przyszłości zostanie dokonana ponowna próba
dostarczenia.
- -f fromwhom
- Powoduje, że procmail ponownie generuje
początkową linię "From " z
wartością fromwhom jako wysyłającym
(zamiast -f można użyć alternatywnego i
przedawnionego -r). Jeśli fromwhom składa
się z pojedynczego "-", to program tylko
odświeży znacznik czasu w linii "From " (o ile
jest obecny, jeśli nie, to utworzy nowy).
- -o
- Zamiast pozwolić komukolwiek na generowanie linii
"From ", po prostu przesłoni fałszywki.
- -Y
- Zakłada, że do mamy czynienia z tradycyjnym
Berkeley'owskim formatem mailboxa, ignoruje wszelkie pola
Content-Length:.
- -a argument
- Ustawia $1 na wartość
argumentu. Każde następne -a argument
ustawią zmienną o kolejnym numerze ( $2, $3
itd.). Może być używane do przekazywania
metainformacji do procmaila. Zazwyczaj wykonuje się to przez
przesyłanie informacji $@x z reguły programu
sendmail(8).
- -d odbiorca ...
- Włącza jawny tryb dostarczania. Dostarczenie
nastąpi do lokalnego odbiorcy, oznaczonego jako odbiorca.
Jest to oczywiście możliwe tylko, jeśli procmail ma
prawa roota (lub efektywne prawa euid i egid odbiorcy). Procmail
będzie się suidował do podanych odbiorców i
dostarczał pocztę tak, jakby został wywołany
przez danego odbiorcę bez argumentów (tzn. jeśli nie
znaleziono pliku rc, dostarczanie zachodzi jak w zwyczajnej poczcie).
Opcja ta jest niezgodna z -p.
- -m
- Zmienia procmail w filtr pocztowy ogólnego
przeznaczenia. W tym trybie trzeba przekazać jeden plik rc w
wierszu poleceń. Po pliku rc procmail przyjmie
nieograniczoną liczbę argumentów. Jeśli plik
rc jest nazwą ze ścieżką absolutną,
zaczynającą się od /etc/procmailrcs/, bez
odwołań wstecznych (np. katalog nadrzędny nie
może być wymieniony), to procmail spróbuje,
jeżeli nie napotka naruszeń bezpieczeństwa,
zidentyfikować właściciela tego pliku (lub
dowiązania symbolicznego). Zaawansowane zastosowania tej opcji
można znaleźć w rozdziale PRZYKŁADY
poniżej.
ARGUMENTY
Wszelkie argumenty zawierające "=" są uważane za przypisania wartości zmiennym środowiskowym. Wszystkie one zostaną obliczone po przypisaniu wartości domyślnych, a przed otwarciem pierwszego pliku rc. Wszelkie inne argumenty są uważane za ścieżki pliku rc: albo absolutne, albo względne, w odniesieniu do bieżącego katalogu, jeśli zaczynają się od "./". Wszelkie inne ścieżki względne są uważane za podane względem katalogu $HOME, chyba że użyto opcji -m. Wówczas wszystkie ścieżki względne odnoszą się do bieżącego katalogu. Procmail zacznie od pierwszej ścieżki, którą znajdzie w wierszu poleceń. Następne zostaną przetworzone tylko wtedy, jeśli poprzednie nie mają odpowiadającego wpisu HOST-directive, lub w wypadku, gdy nie istnieją. Jeśli nie poda się plików rc, procmail zagląda do $HOME/.procmailrc. Jeśli nawet tego nie dało się znaleźć, przetwarzanie będzie kontynuowane zgodnie z domyślnymi ustawieniami zmiennych środowiskowych i zmiennych podanych w wierszu poleceń.PRZYKŁADY
Przykłady plików rc można obejrzeć na stronie procmailex(5). Mały fragment pliku rc można znaleźć w sekcji UWAGI, poniżej. Pomiń resztę tej sekcji, chyba że jesteś administratorem, który ma jakieś pojęcie o składni sendmail.cf. Opcja -m jest zazwyczaj używana, gdy procmail jest wywoływany przez regułę pliku sendmail.cf. Aby móc tego dokonać, dobrze jest utworzyć dodatkowy wpis o programie dostarczającym pocztę "procmail" w pliku sendmail.cf (poza już obecnym mailerem "local", który uruchamia procmaila). Aby utworzyć taki wpis, sugerujemy coś takiego:Mprocmail, P=/usr/bin/procmail, F=mSDFMhun, S=11, R=21, A=procmail -m $h $f $u
Umożliwi to wykorzystanie do filtrowania poczty poprzez mailer procmail reguł podobnych do poniższej (prawdopodobnie w zestawie reguł (ruleset) 0). Prosimy zwrócić uwagę na początkową tabulację oznaczającą kontynuację reguły i tabulację służącą do oddzielenia komentarzy:
R$*<@some.where>$* $#procmail $@/etc/procmailrcs/some.rc $:[email protected]$2 R$*<@$*.procmail>$* $1<@$2>$3 Już przefiltrowane, odwzoruj z powrotem
A plik /etc/procmailrcs/some.rc może być taki:
SENDER = "<$1>" # poprawienie pustego adresu nadawcy SHIFT = 1 # usunięcie go z $@ :0 # Spuść do muszli całą pocztę śmieciową * ^Subject:.*junk /dev/null :0 w # przekaż resztę przesyłek dalej ! -oi -f "$SENDER" "$@"
Należy uważać, gdy z wnętrza pliku /etc/procmailrcs/some.rc wysyłane będą listy: jeśli wyśle się je na adresy, które odpowiadają znowu pierwszej regule, można utworzyć nieskończoną pętlę.
PLIKI
- /etc/passwd
- to set the recipient's LOGNAME, HOME and USER_SHELL
variable defaults
- /var/mail/$LOGNAME
- systemowa skrzynka pocztowa; zarówno skrzynka
systemowa, jak i katalog, w którym się ona znajduje,
będą tworzone za każdym razem, gdy procmail startuje,
a któreś z nich nie istnieje
- /etc/procmailrc
- początkowy ogólnosystemowy plik rc
- /etc/procmailrcs/
- ścieżka specjalnych uprawnień do
plików rc
- $HOME/.procmailrc
- domyślny plik rc
- /var/mail/$LOGNAME.lock
- plik blokujący systemowej skrzynki pocztowej (nie
jest automatycznie używany przez procmail, chyba że
$DEFAULT jest równe /var/mail/$LOGNAME, a procmail
dostarcza coś do $DEFAULT)
- /usr/sbin/sendmail
- domyślny program ekspedycji poczty (forwarder)
- _????`hostname`
- tymczasowe "unikatowe" pliki zerowej
długości tworzone przez procmail
ZOBACZ TAKŻE
procmailrc(5), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), uucp(1), aliases(5), sendmail(8), egrep(1), grep(1), biff(1), comsat(8), lockfile(1), formail(1), cron(1)DIAGNOSTYKA
- Autoforwarding mailbox found (Znaleziono skrzynkę auto-przekazującą)
- Skrzynka systemowa miała ustawiony bit suid lub
sgid, procmail kończy z błędem EX_NOUSER,
zakładając że do tej skrzynki nie wolno
dostarczać poczty.
- Bad substitution of "x" (Złe podstawienie "x")
- Nie podano prawidłowej nazwy zmiennej
środowiskowej.
- Closing brace unexpected (Niespodziewane zamknięcie nawiasu)
- Nie było odpowiadającego nawiasu
otwierającego (zagnieżdżenie bloku).
- Conflicting options (Kolidujące opcje)
- Nie wszystkie kombinacje opcji są użyteczne
- Conflicting x suppressed (Zlikwidowane kolidujące x)
- Flaga x nie da się pogodzić z innymi flagami
tej reguły.
- Couldn't create "x" (Nieudane utworzenie "x")
- Brakowało skrzynki systemowej i nie dało
się jej było utworzyć.
- Couldn't create maildir part "x" (Nieudane utworzenie części "x" katalogu poczty)
- W katalogu pocztowym "x" brakuje jednego lub
więcej koniecznych podkatalogów, a procmail nie
mógł ich utworzyć.
- Couldn't create or rename temp file "x" (Nieudane utworzenie lub przemianowanie tymczasowego pliku "x")
- Wystąpił błąd w mechanizmie
dostarczania wiadomości do katalogu pocztowego "x".
- Couldn't determine implicit lockfile from "x" (Nie można określić jawnego pliku blokady z "x")
- Nie znaleziono przekierowań ">>",
używanie pliku o nazwie " $LOCKEXT" jako lokalnego
pliku blokującego (locallockfile).
- Couldn't read "x" (Nieudany odczyt "x")
- Procmail nie był w stanie otworzyć pliku rc
albo nie był to zwyczajny plik lub też program nie
mógł otworzyć katalogu MH, by znaleźć
plik o najwyższym numerze.
- Couldn't unlock "x" (Nieudane odblokowanie "x")
- Plik blokujący już zniknął lub
odebrano prawa zapisu do jego katalogu.
- Deadlock attempted on "x" (Próba zakleszczenia na "x")
- Lokalny plik blokujący (locallockfile) podany w tej
regule jest równy nadal aktywnemu $LOCKFILE.
- Denying special privileges for "x" (Odmowa specjalnych uprawnień dla "x")
- Procmail nie przybierze tożsamości narzucanej
mu plikiem rc, ponieważ wykryto pogwałcenie
bezpieczeństwa (np. -p lub przypisania zmiennych w wierszu
poleceń) albo program miał zbyt małe uprawnienia by
móc to zrobić.
- Descriptor "x" was not open (Deskryptor "x" nie był otwarty)
- Podczas startu procmaila nie były
przyłączone stdin, stdout lub stderr (prawdopodobnie
próba złamania bezpieczeństwa).
- Enforcing stricter permissions on "x" (Wymuszenie bardziej restrykcyjnych uprawnień do "x")
- Systemowa skrzynka pocztowa odbiorcy była
niezabezpieczona, procmail ją zabezpieczył.
- Error while writing to "x" (Błąd podczas zapisu do "x")
- Nieistniejący katalog, brak praw zapisu, padł
potok lub przepełniony dysk.
- Exceeded LINEBUF (Przekroczone LINEBUF)
- Wykryto przepełnienie bufora, LINEBUF był
zbyt mały, ustawiono zmienną PROCMAIL_OVERFLOW.
- MAILDIR is not an absolute path (MAILDIR nie jest ścieżką absolutną)
-
- MAILDIR path too long (Ścieżka MAILDIR zbyt długa)
-
- ORGMAIL is not an absolute path (ORGMAIL nie jest ścieżką absolutną)
-
- ORGMAIL path too long (Ścieżka ORGMAIL zbyt długa)
-
- default rcfile is not an absolute path (domyślny plik rc nie jest ścieżką absolutną)
-
- default rcfile path too long (zbyt długa ścieżka do domyślnego pliku rc)
- Pełna ścieżka do podanego elementu, po
rozwinięciu wszystkich linków, ma
długość większą niż
LINEBUF lub nie zaczyna się od znaku separatora
plików.
- Excessive output quenched from "x" (Stłumiono nadmierne wyjście z "x")
- The backquoted expression "x" tried to produce
too much output for the current LINEBUF; the rest was discarded and
PROCMAIL_OVERFLOW has been set.
- Extraneous x ignored (Nie związane x zignorowane)
- The action line or other flags on this recipe make x
meaningless.
- Failed forking "x" (Nieudane rozwidlenie "x")
- Tabela procesów jest pełna (i wykorzystano
RORESRETRY).
- Failed to execute "x" (Nieudane wykonanie "x")
- Program nie znajduje się w ścieżce lub
nie jest wykonywalny.
- Forced unlock denied on "x"
- Brak praw zapisu do katalogu, w którym znajduje
się plik blokujący lockfile "x", albo w tym
samym czasie próbuje wymusić blokowanie więcej
niż jeden procmail.
- Forcing lock on "x"
- Plik lockfile "x" zostanie usunięty
siłą, ponieważ nastąpiło przekroczenie
limitu czasu (zobacz także: LOCKTIMEOUT).
- Incomplete recipe
- Znaleziono początek reguły, lecz nie
została zakończona przed napotkaniem końca pliku.
- Insufficient privileges
- Procmail wymaga uprawnień roota lub musi mieć
określony (e)udi, (e)gid w trybie dostarczania. Wiadomości
będą odbijane (zwracane nadawcy).
- Invalid regexp "x" (Niepoprawne wyraż. regularne "x")
- Wyrażenie regularne "x" zawiera
błędy (najprawdopodobniej brakujące lub nadmiarowe
nawiasy).
- Kernel-lock failed (Błąd blokowania za pośrednictwem funkcji jądra)
- Podczas próby użycia obsługiwanych
przez jądro wywołań blokujących,
któreś z nich nie powiodło się (zwykle
wskazuje to na błąd systemu), procmail ignoruje ten
błąd i działa dalej.
- Kernel-unlock failed (Błąd odblokowania za pośrednictwem funkcji jądra)
- Zobacz wyżej.
- Lock failure on "x" (Błąd blokowania "x")
- Może się pojawić tylko jeśli
podasz jakieś naprawdę dziwne (i niedozwolone) nazwy
plików blokujących, lub jeśli nie można
było utworzyć pliku lockfile z powodu braku
uprawnień lub nieistniejących podkatalogów.
- Lost "x" (Zgubiono "x")
- Procmail próbował sklonować
się, lecz nie mógł znaleźć pliku rc
"x" (został przeniesiony lub był
ścieżką względną, a
zmieniłeś katalog od ostatniego otwarcia go przez
procmaila).
- Missing action (Brak akcji)
- Bieżąca reguła nie jest kompletna.
- Missing closing brace (Brak nawiasu zamykającego)
- Rozpoczęto zagnieżdżony blok, ale go
nie zakończono.
- Missing name (Brak nazwy)
- Opcja -f wymaga dodatkowego argumentu.
- Missing argument (Brak argumentu)
- Podano opcję -a, lecz zapomniano o
argumencie.
- Missing rcfile (Brak pliku rc)
- Podano opcję -m, procmail oczekuje nazwy
pliku rc jako argumentu.
- Missing recipient (Brak odbiorcy)
- Podano opcję -d lub wywołano procmail
pod inną nazwą, program oczekuje przynajmniej jednego
odbiorcy jako argumentu.
- No space left to finish writing "x" (Brak miejsca na dokończenie zapisu "x")
- System plików zawierający "x" nie
ma dość wolnego miejsca, aby umożliwić
dostarczenie wiadomości do pliku.
- Out of memory (Brak pamięci)
- Systemowi brakuje pamięci w przestrzeni wymiany
(swap) (i wyczerpano NORESRETRY).
- Processing continued (Kontynuowanie przetwarzania)
- Nierozpoznane opcje wierszu poleceń są
ignorowane, kontynuowanie jak zwykle.
- Program failure (nnn) of "x" (Błąd programu (nnn) na "x")
- Program uruchomiony przez procmaila zwrócił
kod nnn zamiast EXIT_SUCCESS (=0); Jeśli nnn
jest ujemne, to jest to sygnałem, że program umarł.
- Quota exceeded while writing "x" (Podczas zapisu "x" przekroczono ograniczenie udziału dyskowego)
- Ograniczenie wielkości pliku (quota) w systemie
plików odbiorcy zawierającym "x" nie pozwala na
dostarczenie danej wiadomości do pliku.
- Renaming bogus "x" into "x"
- Systemowa skrzynka pocztowa odbiorcy okazała
się być zmyślona, procmail wykonał
działania wymijające.
- Rescue of unfiltered data succeeded/failed (Ratowanie nieprzefiltrowanych danych pomyślne/nieudane)
- Filtr zakończył pracę
niepomyślnie, procmail próbował odzyskać
oryginalny tekst.
- Skipped: "x" (Pominięto: "x")
- Program nie mógł nic zrobić z
"x" w pliku rc (błąd składni), ignoruje to.
- Suspicious rcfile "x" (Podejrzany plik rc "x")
- Właściciel pliku rc nie był
odbiorcą ani rootem, plik był dostępny do zapisu dla
wszystkich, lub zawierający go katalog był zapisywalny dla
wszystkich, lub był to domyślny plik rc (
$HOME/.procmailrc) i albo ten plik, albo zawierający go
katalog były zapisywalne przez grupę (plik rc nie
został użyty).
- Terminating prematurely whilst waiting for ... (Przedwczesne zakończenie podczas oczekiwania na ...)
- Procmail otrzymał sygnał podczas oczekiwania
na ...
- Timeout, terminating "x"
- W filtrze lub programie "x"
nastąpiło przekroczenie limitu czasu.
- Timeout, was waiting for "x"
- W programie, filtrze lub pliku "x"
nastąpiło przekroczenie limitu czasu. Jeśli
był to program lub filtr, to wygląda na to, że
już nie działa.
- Truncated file to former size
- Plik nie mógł być
szczęśliwie dostarczony, więc został
skrócony do poprzedniej wielkości.
- Truncating "x" and retrying lock
- "x" nie wydaje się być
prawidłową nazwą pliku lub plik nie jest pusty.
- Unable to treat as directory "x" (Niemożliwe traktowanie jako katalogu "x")
- Albo przyrostek katalogu "x" wskazuje na to,
że powinien to być MH lub katalog wiadomości
pocztowych (maildir), albo został on wymieniony jako drugi katalog,
do którego należy wykonać dowiązanie, ale
już istnieje i nie jest to katalog.
- Unexpected EOL (Niespodziewany EOL)
- Brak zamykającego cytatu lub próba ucieczki
EOF.
- Unknown user "x" (Nieznany użytkownik "x")
- Podany odbiorca nie ma odpowiadającego mu uid.
ROZSZERZONA DIAGNOSTYKA
Rozszerzoną diagnostykę można włączać i wyłączać ustawieniem zmiennej VERBOSE.- [pid] time & date
- Pid i timestamp procmaila. Generowane za każdym
razem gdy procmail loguje diagnostykę, gdy
upłynęła chociaż sekunda od ostatniego
timestampu.
- Acquiring kernel-lock
- Procmail próbuje zablokować przez
jądro ostatnio otwarty plik (deskryptor).
- Assigning "x"
- Przyznanie wartości zmiennej środowiskowej.
- Assuming identity of the recipient, VERBOSE=off
- Porzucenie wszystkich uprawnień (jeśli
jakieś były), bezwarunkowo wyłącza
rozszerzoną diagnostykę.
- Bypassed locking "x"
- Katalog spool poczty nie był dostępny
procmailowi, bazował wyłącznie na blokadach
jądra.
- Executing "x"
- Uruchamianie programu "x"; jeśli jest on
uruchamiany bezpośrednio przez procmaila (bez pośredniej
powłoki), procmail pokaże gdzie oddzielił argumenty
poprzez wstawienie przecinków.
- HOST mismatched "x"
- Ten komputer był nazwany "x", a zmienna
HOST zawierała coś innego.
- Locking "x"
- Tworzenie pliku blokującego "x".
- Linking to "x"
- Tworzenie dowiązania twardego pomiędzy
folderami katalogów.
- Match on "x"
- Trafiony warunek.
- Matched "x"
- Przyznano "x" wartość MATCH.
- No match on "x"
- Warunek nie pasował, reguła pominięta.
- Non-zero exitcode (nnn) by "x" (Niezerowy (nn) kod zakończenia "x")
- Program uruchomiony przez procmaila jako warunek lub akcja
przepisu z flagą "W" zwrócił nnn
zamiast EXIT_SUCCESS (=0); sposób użycia wskazuje na
to, że nie jest to niespodziewana okoliczność.
- Notified comsat: "$LOGNAME@offset:file"
- Wysłano informację do
comsat(1)/biff(1), że pojawiła się
poczta dla użytkownika $LOGNAME pod "offsetem" w
pliku "file".
- Opening "x"
- Otwieranie pliku "x" dla dopisywania.
- Rcfile: "x"
- Plik rc zmieniony na "x".
- Reiterating kernel-lock
- Podczas próbowania różnych metod
blokowania, jedna z nich się nie powiodła. Procmail
będzie iterował od nowa, aż wszystkie się nie
powiodą.
- Score: added newtotal "x"
- Ten warunek dołożył
"dodatkowe" punkty, co dało w wyniku "nową
sumę" punktacji.
- Unlocking "x"
- Ponowne usuwanie pliku blokującego (lockfile)
"x".
OSTRZEŻENIA
Powinieneś utworzyć skrypt powłoki, który używa lockfile(1) zanim wywołasz swoją powłokę pocztową na którymkolwiek pliku skrzynki pocztowej, innym niż skrzynka systemowa (chyba że Twoja powłoka pocztowa używa tych samych plików blokujących (lokalnych lub globalnych), które podałeś w pliku rc). W rzadkich przypadkach, gdy trzeba zabić procmaila zanim zakończy działanie, należy użyć zwykłego polecenia kill(1) (a nie "kill -9", zobacz rozdział Sygnały dla sugestii), inaczej niektóre pliki blokujące (lockfiles) mogą nie zostać usunięte. Należy być ostrożnym podczas używania opcji -t, jeśli procmail jest ciągle niezdolny do dostarczenia poczty (np. przez nieprawidłowy plik rc), kolejka poczty systemu może się przepełnić. Może to zgorszyć zarówno postmastera, jak i innych użytkowników. Plik /etc/procmailrc może być uruchamiany z prawami roota, więc należy być bardzo ostrożnym z tym, co się tam wstawia. SHELL będzie zgodny z powłoką bieżącego odbiorcy, więc jeśli procmail ma wywoływać powłokę, najlepiej ustawić tę zmienną wpierw na bezpieczną wartość. Zobacz także : DROPPRIVS. Trzeba pamiętać, że jeśli na plikach w /etc/procmailrcs/ dozwolony jest chown(1), to mogą one być chown-owane na roota (lub kogokolwiek innego) przez ich obecnych właścicieli. Dla maksymalnego bezpieczeństwa należy się upewnić, że katalog ten jest wykonywalny tylko dla roota. Procmail nie jest właściwym narzędziem do wspólnego użytkowania jednej skrzynki pocztowej przez wielu użytkowników, jak to występuje w przypadku, gdy jest tylko jedno konto POP dla całej poczty w całej domenie. Da się to zrobić, jeśli uda się skonfigurować MTA tak, by dodawał nagłówki z danymi odbiorcy kopertowego, dzięki którym procmail będzie wiedział, dla kogo jest dana wiadomość. Jednak zwykle nie jest to dobre rozwiązanie. Być może lepiej zbadać, czy używany MTA oferuje "tabele użytkowników wirtualnych" ("virtual user tables") lub sprawdzić np. funkcję "multidrop" (wielopunktowości) programu fetchmail(1).BŁĘDY
Po usunięciu siłą pliku blokującego, procmail czeka $SUSPEND sekund zanim utworzy nowy plik blokujący, tak by inny proces, który chce usunąć stary plik blokujący nie usunął przypadkiem nowego. Procmail używa zwykłego sygnału TERMINATE do zakończenia filtrów, które uciekły, lecz nie sprawdza, czy filtr odpowiada na sygnał. Poza tym wysyła sygnał tylko do filtra, nie do jego dzieci. Kontynuowane pole Content-Length: nie jest prawidłowo obsługiwane. Nowe linie osadzone w kontynuowanym nagłówku powinny być pomijane podczas dopasowywania zamiast być traktowane jako pojedyncza spacja, jak to się dzieje obecnie.RÓŻNE
Jeśli w nagłówku istnieje pole Content-Length: a nie podano flagi -Y, procmail wykorzysta to pole do zgłoszenia właściwego rozmiaru. Procmail nie zmienia szerokości pola. Jeśli nie ma pola Content-Length: lub jeśli podano flagę -Y, a procmail dopisuje do zwykłych folderów pocztowych, to wszelkie linie ciała wiadomości, które wyglądają jak znaki pocztowe, są poprzedzane ">" (rozbraja nieprawdziwe nagłówki pocztowe). Wyrażenie regularne używane do wyszukiwania tych znaków pocztowych to:"\nFrom "
If the destination name used in explicit delivery mode is not in /etc/passwd, procmail will proceed as if explicit delivery mode was not in effect. If not in explicit delivery mode and should the uid procmail is running under, have no corresponding /etc/passwd entry, then HOME will default to /, LOGNAME will default to #uid, USER_SHELL will default to /bin/sh, and ORGMAIL will default to /tmp/dead.letter. Gdy procmail jest w jawnym trybie dostarczania, to będzie generował początkowe linie "From ", jeśli brak takowych. Jeśli linia taka już istnieje, procmail pozostawi ją bez zmian. Jeśli procmail nie jest wywołany z jednym z następujących id użytkownika lub grupy : "root", "daemon", "uucp", "mail", "x400", "network", "list", "lists" lub "news", lecz wciąż musi generować lub przyjmować nową linię "From ", to będzie generował dodatkową linię ">From ", pomagającą odróżnić fałszywe listy. Ze względów bezpieczeństwa, w wypadkach gdy właścicielem pliku rc jest odbiorca lub root, a plik nie jest ogólnie zapisywalny, lub gdy katalog, w którym on się znajduje nie jest ogólnie zapisywalny, procmail będzie używał tylko plików rc o nazwach bezwzględnych lub wyznaczonych względem $HOME. Plik $HOME/.procmailrc ma dodatkowe ograniczenie: ani on, ani katalog, w którym się znajduje, nie mogą być zapisywalne przez grupę. Jeśli /var/mail/$LOGNAME jest zmyśloną skrzynką (np. nie należy do odbiorcy, jest niezapisywalny, jest dowiązaniem symbolicznym lub twardym), procmail podczas startu spróbuje zmienić jego nazwę na zaczynającą się od "BOGUS.$LOGNAME." i kończącą się numerem sekwencyjnym i-węzła. Jeśli okaże się to niemożliwe, ORGMAIL nie będzie mieć wartości początkowej i wskutek tego będzie zakazywać dostarczania bez należytego pliku rc. Jeśli /var/mail/$LOGNAME jest już prawidłową skrzynką, lecz ma zbyt słabe prawa, procmail to poprawi. Aby zapobiec temu, ustaw bity u+x. Podczas dostarczania do katalogów (lub folderów MH), nie trzeba używać plików blokujących w celu zapobieżenia zamieszaniu powodowanemu przez kilka pracujących naraz procmaili. Dostarczanie do folderów MH jest trochę bardziej czasochłonne niż dostarczanie do normalnych katalogów lub mailboxów, ponieważ procmail musi poszukać następnego dostępnego numeru (zamiast korzystania od razu z gotowej nazwy pliku). Przy ogólnym niepowodzeniu, procmail zwróci EX_CANTCREAT, chyba że podana zostanie opcja -t — wówczas zwróci EX_TEMPFAIL. Procmail skleja wszystkie kontynuowane pola nagłówkowe, żeby można było w spójniejszy sposób je "egrepować". Robi to jednak tylko wewnętrznie — podczas dostarczania poczty, łamania linii pojawią się w postaci pierwotnej. Jeśli procmail jest wywoływany pod nazwą nie zaczynającą się od "procmail" (np. jeśli jest dowiązany do innej nazwy i wywołany pod tamtą nazwą), to włącza się w jawnym trybie dostarczania i oczekuje nazw odbiorców jako argumentów wiersza poleceń (tak, jakby było podane -d). Powiadomienia comstat(1)/biff(1) są dokonywane za pomocą UDP. Są one wysyłane, gdy procmail generuje wpis pliku z logiem. Komunikaty powiadamiania mają następujący rozszerzony format (lub tak zbliżony, jaki tylko można uzyskać, gdy ostateczne dostarczenie nie było do pliku):
$LOGNAME@offset_wiadomości_w_mailboksie :absolutna_ścieżka_do_mboxa
Kiedy tylko procmail otwiera plik, do którego dostarcza, używa konsekwentnie następujących, dostarczanych przez jądro, strategii blokowania : fcntl(2). Procmail jest odporny na NFS i czysty na ósmym bicie.
UWAGI
Wywoływanie procmaila z opcją -h lub -? spowoduje wyświetlenie pomocy wiersza poleceń oraz strony skróconej instrukcji flag reguł. Istnieje doskonałe FAQ dla początkujących dotyczące filtrów pocztowych (w szczególności procmaila). Jest prowadzone przez Nancy McGough <[email protected]>, a można je otrzymać wysyłając na adres [email protected] list z treścią:send usenet/news.answers/mail/filtering-faq
Jeśli procmail nie jest zainstalowany w systemie jako domyślny program dostarczania poczty (zapytaj administratora), musisz się upewnić, że jest wywoływany, gdy przybywa poczta. W tym wypadku Twój plik $HOME/.forward (uwaga, musi być dostępny do odczytu dla wszystkich) powinien zawierać poniższą linię. Upewnij się, że wstawiłeś pojedyncze i podwójne znaki cytowania i - o ile w Twoim systemie nie działa smrsh(8) (SendMail Restricted Shell) - musi to być absolutna ścieżka.
" |exec /usr/bin/procmail"Niektóre serwery pocztowe (np. exim(8)) nie akceptują powyższej składni. W tym przypadku należy użyć:
|/usr/bin/procmailProcmail może być też wywoływany do przetworzenia już wypełnionej skrzynki systemowej. Może to być użyteczne jeśli nie chcesz lub nie możesz używać pliku $HOME/.forward (wówczas można by wywoływać poniższy skrypt albo periodycznie z usługi cron(8), albo każdorazowo, gdy zaczynasz czytać pocztę):
#!/bin/sh ORGMAIL=/var/mail/$LOGNAME if cd $HOME && test -s $ORGMAIL && lockfile -r0 -l3600 .newmail.lock 2>/dev/null then trap "rm -f .newmail.lock" 1 2 3 15 umask 077 lockfile -l3600 -ml cat $ORGMAIL >>.newmail && cat /dev/null >$ORGMAIL lockfile -mu formail -s procmail <.newmail && rm -f .newmail rm -f .newmail.lock fi exit 0
Przykładowy mały $HOME/.procmailrc:
PATH=/usr/local/bin:/usr/bin:/bin MAILDIR=$HOME/Mail # upewnij się, że istnieje DEFAULT=$MAILDIR/mbox # kompletnie opcjonalne LOGFILE=$MAILDIR/from # zalecane :0: * ^From.*berg from_me :0 * ^Subject:.*Flame /dev/nullInne przykłady reguł plików rc można obejrzeć na stronie procmailex(5).
SOURCE
This program is part of the procmail mail-processing-package (v3.24) available at http://www.procmail.org/ or ftp.procmail.org in pub/procmail/.MAILINGLIST
Istnieje lista dyskusyjna dla pytań związanych z programami pakietu procmail:Aby być informowanym o nowych wersjach i oficjalnych łatach, należy wysłać zgłoszenie zapisania się do
(jest to lista tylko do odczytu).
AUTORZY
Stephen R. van den BergTŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <[email protected]>, Robert Luberda <[email protected]> i Michał Kułach <[email protected]> Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej [email protected]BuGless |