procmailrc - plik rc procmaila
Szybką orientację w temacie można
uzyskać, czytając UWAGI umieszczone na końcu
strony podręcznika procmail(1).
Plik rc składa się z przypisań zmiennych
środowiskowych (niektóre z nich mają specjalne
znaczenie dla procmaila) i reguł. W najprostszej postaci,
reguły są po prostu jednoliniowymi wyrażeniami
regularnymi, które są poszukiwane w nagłówkach
przychodzącej poczty. Pierwsza reguła, która zostanie
dopasowana, jest używana do określenia, gdzie dany list ma
pójść (zwykle do pliku). Jeśli przetwarzanie
dojdzie do końca pliku rc, procmail dostarczy pocztę do
$DEFAULT.
Istnieją dwa rodzaje reguł: dostarczające i
niedostarczające. Jeśli dopasowana zostanie reguła
dostarczająca, procmail zakłada, że poczta (jak
się można domyślić) jest dostarczona i
zakończy przetwarzanie pliku rc po wykonaniu linii akcji
reguły. Jeśli dopasowana zostanie reguła
niedostarczająca, to przetwarzanie pliku rc będzie
kontynuowane nawet po wykonaniu akcji tej reguły.
Reguły dostarczające są tymi, które
powodują zapis nagłówka lub ciała listu do
pliku, jego zaabsorbowanie przez program lub przekazanie (forwardowanie) do
innego adresu pocztowego.
Reguły niedostarczające to te, które
łapią wyjście programu lub filtru z powrotem do
procmaila, lub te, które rozpoczynają
zagnieżdżony blok.
Można powiedzieć procmailowi, by traktował
regułę dostarczającą jako
niedostarczającą poprzez przekazanie takiej regule flagi
"c". Spowoduje to, że procmail wygeneruje kopię
listu (carbon copy), dostarczając go regule i
kontynuując przetwarzanie pliku rc.
Używając dowolnej liczby reguł, można
posortować pocztę wprost do określonych folderów
pocztowych. Należy pamiętać jednak, że poczta
może wpływać do tych folderów w tym samym
momencie (jeśli kilka procmaili działa naraz, co nie jest
nieprawdopodobne przy dużej ilości poczty). Aby upewnić
się, że nie narobi to bałaganu, zalecane jest robienie
właściwego użytku z plików
blokujących.
Inicjacje zmiennych środowiskowych i
reguły mogą być swobodnie przeplatane w pliku
rc. Jeśli zmienna środowiskowa ma dla procmaila specjalne
znaczenie, zostanie użyta odpowiednio w momencie przetwarzania. (np.
można zmienić katalog bieżący, kiedy tylko jest
taka potrzeba, przez podanie nowego MAILDIR, zamienić pliki
blokujące przez podanie nowego LOCKFILE, zmienić umask,
itd., możliwości jest nieskończenie wiele :-).
Inicjacje i podstawienia tych zmiennych środowiskowych
są obsługiwane dokładnie jak w sh(1)
(włączając w to wszystkie możliwe cytowania i
sekwencje specjalne) i dodatkowo: spacje dookoła znaku "="
są ignorowane, a każda zmienna nie zawierająca
końcowego "=" zostanie usunięta ze
środowiska. Każdy program w odwrotnych apostrofach,
uruchomiony przez procmail, będzie miał przekazany cały
list na swoim wejściu (stdin).
Słowo zaczynające się od # wraz z wszystkimi
znakami występującymi po nim aż do znaku nowej linii
jest ignorowane. Nie dotyczy to linii warunkowych, które nie
mogą być komentowane.
Linia zaczynająca się od ":" oznacza
początek reguły. Ma następujący format:
:0 [flagi] [ : [lokalnyplikblokujący] ]
<zero lub więcej warunków (jeden na linię)>
<dokładnie jedna linia akcji>
Warunki zaczynają się od "*" i wszystko,
co następuje po tym znaku, jest przekazywane niezmienione
wewnętrznemu egrepowi, z wyjątkiem początkowych i
końcowych białych spacji. Wyrażenia regularne są
całkowicie kompatybilne z normalnymi wyrażeniami
regularnymi egrep(1). Zobacz także Rozszerzone
wyrażenia regularne.
Warunki są logicznie koniugowane; jeżeli nie ma
warunków, wynik jest domyślnie prawdziwy.
Flagi mogą być dowolnymi z
następujących:
- H
- Egrepuj nagłówek (domyślnie).
- B
- Egrepuj ciało.
- D
- Powiedz wewnętrznemu egrepowi, aby rozróżniał
duże i małe litery (zachowaniem domyślnym jest
ignorowanie wielkości liter).
- A
- Ta reguła będzie zależeć od ostatniej
poprzedzającej reguły (na bieżącym poziomie
zagnieżdżenia) bez flagi "A" lub "a".
Umożliwia to wiązanie akcji zależących od
wspólnego warunku.
- a
- Ma takie samo znaczenie jak flaga "A" z dodatkowym warunkiem
mówiącym, że bezpośrednio poprzedzająca
reguła musi się pomyślnie
zakończyć przed uruchomieniem bieżącej
reguły.
- E
- Ta reguła jest wykonywana tylko, jeśli bezpośrednio
poprzedzająca reguła nie była wykonana. Wykonanie tej
reguły wyłącza także wszelkie
bezpośrednio następujące reguły z flagą
"E". Umożliwia to definiowanie akcji typu "else
if".
- e
- Ta reguła jest wykonywana tylko, jeśli bezpośrednio
poprzedzająca reguła się nie powiodła
(tj. podjęto próbę wykonania akcji, ale
skończyła się ona błędem).
- h
- Przesyła nagłówek listu do potoku, pliku lub innego
miejsca docelowego (domyślne).
- b
- Przesyła ciało listu do potoku, pliku lub innego miejsca
docelowego (domyślne).
- f
- Zakłada, że potok jest filtrem.
- c
- Generuje kopię carbon copy tego listu. Ma to tylko sens dla
reguł dostarczających. Jedyną
niedostarczającą regułą, dla której
flaga ta ma jakiś skutek jest wypadek zagnieżdżonego
bloku — w celu wygenerowania kopii proces procmaila zostanie
sklonowany (pliki blokujące nie zostaną
odziedziczone); podczas gdy klon będzie pracować jak zwykle,
rodzic przeskoczy blok.
- w
- Czeka na zakończenie filtru lub programu i sprawdza kod
wyjścia (normalnie ignorowany); jeśli filtr
zwrócił błąd, tekst nie był filtrowany.
- W
- Ma takie samo znaczenie jak flaga "w", lecz powstrzyma wszelkie
informacje typu "Program failure".
- i
- Ignoruje wszelkie błędy zapisu na tej regule (np. zwykle
przez wcześnie zamknięty potok).
- r
- Tryb surowy: nie próbuje zapewnić, że list
kończy się pustą linią i zapisuje go takim,
jakim jest.
Istnieją pewne warunki specjalne, których
można użyć, a które nie są w pełni
wyrażeniami regularnymi. Aby je wybrać, warunek musi
zaczynać się od:
- !
- Odwraca warunek.
- $
- Oszacowuje resztę warunku według reguł podstawiania
sh(1) wewnątrz podwójnych cudzysłowów,
pomija początkowe białe spacje i ponownie przetwarza
regułę.
- ?
- Używa kodu wyjścia podanego programu.
- <
- Sprawdza, czy całkowita długość listu jest
krótsza niż podana (dziesiętnie) liczba
bajtów.
- >
- Analogiczne do "<".
- zmienna
??
- Porównuje resztę warunku z wartością tej
zmiennej środowiskowej (nie może to być
pseudozmienna). Specjalnymi wypadkami są zmienne "B",
"H", "HB" i "BH", które zwyczajnie
przeciążają domyślny obszar przeszukiwania
nagłówka/ciała (header/body) zdefiniowanego na
początku dla tej reguły.
- \
- Aby zacytować dowolny z powyższych znaków na
początku linii.
Jeśli umieści się drugi
(kończący) ":" w pierwszej linii reguły, to
procmail użyje lokalnego pliku blokującego
(locallockfile; tylko dla tej reguły). Opcjonalnie można
podać nazwę pliku, który będzie użyty;
jednak jeśli się tego nie zrobi, procmail użyje nazwy
pliku celu (lub nazwy pliku następującej po pierwszym
">>") i dopisze do niej $LOCKEXT.
Linia akcji może zaczynać się od
następujących znaków:
- !
- Przekazuje (forwarduje) e-mail do wszystkich podanych adresów
pocztowych.
- |
- Uruchamia określony program, prawdopodobnie w $SHELL-u,
jeśli wykryto któryś ze znaków
$SHELLMETAS. Można opcjonalnie poprzedzić ten symbol
potoku wyrażeniem zmienna=, co spowoduje, że
standardowe wyjście (stdout) programu zostanie przechwycone do
zmiennej środowiskowej zmienna (procmail nie
zakończy przetwarzania pliku rc w tym momencie). Jeśli
podany zostanie tylko symbol potoku, bez żadnego programu, to
procmail wypisze list na stdout.
- {
- Jeśli następuje za tym przynajmniej jedna spacja, tabulacja
lub nowa linia, to oznacza to początek zagnieżdżonego
bloku. Wszystko, aż do następnego nawiasu
zamykającego, będzie zależeć od
warunków podanych dla tej reguły. Dozwolone jest
nieograniczone zagnieżdżanie. Nawias zamykający
istnieje zwyczajnie po to, by oddzielić blok; w żadnym
wypadku nie wywoła zakończenia procmaila w
żaden sposób. Po dotarciu do końca bloku,
przetwarzanie będzie kontynuowane, jak zwykle, po tym bloku. W
bloku zagnieżdżonym flagi "H" i "B"
dotyczą tylko warunków prowadzących do tego bloku,
flagi "h" i "b" w ogóle nie
działają.
Wszystko inne będzie uznawane za nazwę skrzynki
pocztowej (zarówno nazwę pliku lub katalogu,
bezwzględną lub względną w stosunku do
bieżącego katalogu (zobacz opis zmiennej MAILDIR)).
Jeśli jest to (możliwe że jeszcze nieistniejąca)
nazwa pliku, poczta zostanie do niego doklejona.
Jeśli jest to katalog, poczta zostanie dostarczona do nowo
utworzonego, unikatowego pliku o nazwie $MSGPREFIX* w podanym
katalogu. Jeśli nazwa skrzynki pocztowej kończy się
"/.", to katalog ten jest uznawany za folder MH, tj. procmail
użyje następnego numeru, który będzie
dostępny. Jeśli nazwa skrzynki pocztowej kończy
się znakiem "/", to ten katalog jest uznawany za folder
maildir, tj. procmail zapisze pocztę w pliku w podkatalogu o nazwie
"tmp", a następnie przeniesie go do podkatalogu o nazwie
"new". Jeśli skrzynka pocztowa jest podana jako folder MH
lub maildir, procmail utworzy wymagane katalogi, jeśli nie
istnieją, zamiast traktować skrzynkę pocztową
jako nieistniejącą. Gdy procmail dostarcza do
katalogów, można podać wiele katalogów, do
których należy dostarczyć (procmail dostarczy
pocztę, używając twardych dowiązań).
- LOGNAME, HOME i
SHELL
- Twoje (odbiorcy) wartości domyślne
- PATH
- $HOME/bin :/usr/local/bin :/usr/bin :/bin (z wyjątkiem
przetwarzania pliku /etc/procmailrc, w którego czasie
zostanie ustawione na "/usr/local/bin :/usr/bin :/bin".)
- SHELLMETAS
- & |<>~;?*[
- SHELLFLAGS
- -c
- ORGMAIL
- /var/mail/$LOGNAME
(Chyba że podano -m, wtedy opcja ta jest nieustawiona)
- MAILDIR
- $HOME
(Chyba że nazwa pierwszego pomyślnie otwartego pliku rc
zaczyna się od "./", w którym wypadku
wartością domyślną jest ".")
- DEFAULT
- $ORGMAIL
- MSGPREFIX
- msg.
- SENDMAIL
- /usr/sbin/sendmail
- SENDMAILFLAGS
- -oi
- HOST
- Nazwa bieżącego komputera
- COMSAT
- no
(Jeśli plik rc jest podany w linii komend)
- PROCMAIL_VERSION
- 3.23pre
- LOCKEXT
- .lock
Inne czyszczone lub preustawiane zmienne środowiskowe to
IFS, ENV i PWD.
Z powodów bezpieczeństwa podczas startu procmail
wyrzuci wszystkie zmienne środowiskowe, co do których ma
podejrzenia, że mogą wpływać na działanie
dynamicznego konsolidatora (ld.so(8)).
Środowisko
Zanim zgubisz się w mętliku zmiennych
środowiskowych, pamiętaj że wszystkie one mają
sensowne wartości domyślne.
- MAILDIR
- Bieżący katalog w momencie, gdy procmail jest uruchomiany
(znaczy to, że wszystkie ścieżki są relatywne
do $MAILDIR).
- DEFAULT
- Domyślny plik mailbox (jeśli nie powiedziano inaczej,
procmail wrzuci pocztę do tego pliku). Procmail automatycznie
użyje $DEFAULT$LOCKEXT jako pliku blokującego przed
zapisaniem czegoś do tej skrzynki pocztowej. Nie trzeba
ustawiać tej zmiennej, ponieważ standardowo wskazuje ona na
standardową skrzynkę pocztową systemu.
- LOGFILE
- Plik ten będzie zawierał wszelkie komunikaty diagnostyczne i
komunikaty o błędach od procmaila (zazwyczaj żadne)
lub od innych programów uruchomionych przez procmaila. Jeśli
plik ten nie jest podany, komunikaty będą przesyłane
e-mailem z powrotem do nadawcy. Zobacz także LOGABSTRACT.
- VERBOSE
- Ustawiając tę zmienną na "yes" lub
"on", można włączyć
rozszerzoną diagnostykę,
wyłączyć zaś można ją przez
ustawienie zmiennej na "no" lub "off".
- LOGABSTRACT
- Zanim procmail zakończy, raportuje dostarczoną
wiadomość w $LOGFILE, pokazując pola
"From " i "Subject: " nagłówka, folder,
w którym wiadomość została zapisana, oraz jej
długość (w bajtach). Ustawienie tej zmiennej na
"no" powstrzymuje generowanie tych informacji. Po ustawieniu jej
na "all", procmail będzie logował
każdą pomyślnie zakończoną
regułę dostarczenia, którą przetworzy.
- LOG
- Wartość przypisana tej zmiennej będzie dopisana do
pliku $LOGFILE.
- ORGMAIL
- Zazwyczaj mailbox systemowy (ORiGinal MAILbox).
Jeśli z jakiegoś powodu (jak przepełnienie systemu
plików), list nie mógł być dostarczony do
tego mailboxa, to procmail dostarczy go tutaj. Jeśli jednak nie
będzie mógł nawet tego uczynić, to list
zostanie odbity do nadawcy.
- LOCKFILE
- Globalny plik blokujący. Jeśli plik ten już istnieje,
procmail będzie czekał aż zniknie i utworzy go
samodzielnie (i wyczyści gdy skończy). Jeśli podano
więcej niż jeden plik blokujący, to poprzedni
zostanie usunięty przed próbą utworzenia nowego.
Używanie globalnego pliku blokującego jest złą
praktyką, lepiej używać lokalnych (zależnych
od reguły).
- LOCKEXT
- Domyślne rozszerzenie, które jest dodawane do plików
docelowych, aby określić, którego z lokalnych
plików blokujących użyć (tylko
jeśli używanie tych plików jest
włączone dla danej reguły).
- LOCKSLEEP
- Liczba sekund, które procmail ma odespać przed
każdą kolejną próbą użycia pliku
blokującego (jeśli taki już istniał);
jeśli liczby nie podano, to wynosi ona 8 sekund.
- LOCKTIMEOUT
- Liczba sekund, które muszą minąć od utworzenia
lub ostatniej modyfikacji pliku blokującego, zanim procmail
zdecyduje, że jest to plik blokujący pozostawiony w wyniku
błędu i że trzeba go usunąć na
siłę. Wartość zero mówi, że
timeout nie jest ustawiony i że procmail ma czekać do
skutku. Jeśli nie jest podany, to odpowiada 1024 sekundom.
Wartość ta jest przydatna w zapobieganiu niezdefiniowanym
zawieszeniom programów sendmail(8) lub procmail. Procmail
jest odporny na różnice w czasie lokalnym na
różnych komputerach.
- TIMEOUT
- Liczba sekund, które muszą minąć zanim
procmail zdecyduje, że dziecko, które uruchomił,
musiało się zawiesić. Program odbierze od procmaila
sygnał TERMINATE, a przetwarzanie pliku rc pójdzie
dalej. Jeśli podano zero, to nie będzie tu używany
czas oczekiwania i procmail będzie czekać do skutku;
jeśli zmienna nie jest podana, wartość
domyślna odpowiada 960 sekundom.
- MSGPREFIX
- Przedrostek nazwy pliku, który jest używany w wypadku
dostarczania do katalogu (nie używany w katalogach maildir lub MH).
- HOST
- Jeśli nie jest to nazwa bieżącego komputera,
to przetwarzanie bieżącego pliku rc zostaje
natychmiast przerywane. Jeśli w linii komend podano inne pliki rc,
to przetwarzanie będzie kontynuowane z następnym z nich.
Jeśli wykorzystane zostaną wszystkie pliki rc, program
zakończy pracę, lecz nie wygeneruje błędu (np.
mailer będzie sądził, że
wiadomość została dostarczona).
- UMASK
- Nazwa mówi za siebie (jeśli nie, zapomnij o tym :-).
Cokolwiek zostanie przypisane do zmiennej UMASK jest interpretowane
jako wartość ósemkowa. Jeśli nie jest
podana, to domyślna wartość maski wynosi 077.
Jeśli maska zezwala na ustawienie o+x, to owo o+x zostanie dodane
do praw dostępu wszystkich skrzynek pocztowych, do których
procmail dostarcza pocztę bezpośrednio. Może to
być używane do sprawdzania, czy przybyła nowa poczta.
- SHELLMETAS
- Jeśli jakikolwiek ze znaków wymienionych w SHELLMETAS
pojawi się w linii określającej filtr lub program, to
linia zostanie przekazana powłoce $SHELL, a nie zostanie
wywołana bezpośrednio.
- SHELLFLAGS
- Każde wywołanie powłoki $SHELL będzie
następujące:
"$SHELL" "$SHELLFLAGS" "$*";
- SENDMAIL
- Jeśli nie używa się właściwości
forwardowania, nie należy się tym przejmować.
Określa to program wzywany do forwardowania poczty.
Jest wywoływany jako: "$SENDMAIL" $SENDMAILFLAGS
"$@";
- NORESRETRY
- Liczba powtórek, które mają być dokonane po
wystąpieniu jednego z błędów "process
table full", "file table full", "out of
memory" lub "out of swap space".
Jeśli liczba ta jest ujemna, procmail będzie
próbował wiecznie; jeśli nie jest podana, odpowiada
wartości 4. Powtórki zachodzą co każde
$SUSPEND sekund. Idea, która się za tym kryje, jest
taka, że jeśli np. całkowicie wykorzystane
zostały obszar pamięci wymiany lub
tablica procesów, to wiele innych programów
wykryje to także i przerwie działanie lub
"padnie", zwalniając cenne zasoby procmailowi.
- SUSPEND
- Liczba sekund, podczas których procmail będzie
czekał, jeśli musi, na coś, co obecnie jest
niedostępne (pamięć, fork, itd.); jeśli nie
podano, to wartością domyślną jest 16 sekund.
Zobacz także: LOCKSLEEP.
- LINEBUF
- Długość wewnętrznych buforów liniowych,
nie może być mniejsza niż 128. Wszystkie linie
odczytywane z pliku rc nie powinny mieć więcej
niż $LINEBUF znaków przed i po rozszerzeniu.
Jeśli wartość nie jest podana, odpowiada 2048. Limitu
tego oczywiście nie stosuje się do samego listu,
który może mieć dowolne długości linii
lub może być plikiem binarnym. Patrz także opis
PROCMAIL_OVERFLOW.
- DELIVERED
- Jeśli ustawione na "yes", to procmail będzie
udawał przed agentem pocztowym, że poczta została
dostarczona. Jeśli poczta nie mogła być dostarczona
po napotkaniu tego ustawienia, zostanie utracona (tj. nie będzie
zwrócona do nadawcy).
- TRAP
- Gdy procmail będzie kończył działanie, ale nie
z powodu otrzymania sygnału, to wywoła
zawartość tej zmiennej. Kopia listu może być
odczytana ze stdin. Wszelkie wyjście wyprodukowane przez tę
komendę będzie dodane do pliku $LOGFILE.
Przykładowe zastosowania TRAP to: usuwanie plików
tymczasowych, logowanie własnych uzupełnień, itp.
Zobacz także EXITCODE i LOGABSTRACT.
- EXITCODE
- Domyślne procmail zwraca zerowy kod błędu
(oznaczający powodzenie), jeśli udało mu się
poprawnie dostarczyć list lub gdy zmienna HOST nie
była ustawiona na nazwę bieżącego komputera, a
w linii poleceń nie podano kolejnych plików rc. W przeciwnym
wypadku zwracany jest błąd. Przed zakończeniem
jednakże procmail sprawdza wartość tej zmiennej.
Jeśli została ustawiona na dodatnią
wartość numeryczną, procmail użyje jej jako
kodu wyjścia. Jeśli zmienna ta jest ustawiona, lecz pusta,
procmail ustawi kod wyjścia na wartość
zwracaną przez program TRAP. Jeśli zmienna ta nie
została ustawiona, procmail ustawi ją na krótko przed
wywołaniem programu TRAP.
- LASTFOLDER
- Zmienna ta jest inicjowana przez procmail za każdym razem, gdy
dostarcza coś jakiemuś folderowi lub programowi. Zawsze
zawiera nazwę ostatniego foldera (lub programu), do którego
coś dostarczano. Jeśli ostatnie dostarczenie
obejmowało łącznie kilka folderów, to
$LASTFOLDER będzie zawierał nazwy wszystkich
plików (będących de facto dowiązaniami
twardymi) jako listę rozdzieloną spacjami.
- MATCH
- Zmienna ta jest inicjowana przez procmail za każdym razem, gdy ma
wyciągnąć tekst z wyrażenia regularnego.
Będzie zawierać cały tekst odpowiadającego
wyrażenia regularnego występującego po żetonie
"\/".
- SHIFT
- Przypisanie dodatniej wartości tej zmiennej daje taki sam rezultat,
jak komenda "shift" w sh(1). Komenda ta jest najbardziej
użyteczna do wyciągania dodatkowych argumentów
podanych procmailowi działającemu jako filtr pocztowy.
- INCLUDERC
- Nazywa plik rc (względny w stosunku do bieżącego
katalogu), który powinien być włączony jako
część bieżącego pliku rc. Dozwolone
jest nieograniczone zagnieżdżanie (limitowane tylko przez
zasoby systemowe takie jak pamięć czy liczba
dostępnych deskryptorów plików). Ponieważ nie
są są sprawdzane ani uprawnienia, ani
właściciel pliku rc, użytkownicy INCLUDERC
powinni się upewnić, że tylko zaufani
użytkownicy mają prawa do zapisu włączanego
pliku rc i do katalogu, w którym się ten plik znajduje.
Przypisanie zmiennej INCLUDERC wartości w linii
poleceń nie ma żadnego efektu.
- SWITCHRC
- Nazywa plik rc (względny w stosunku do bieżącego
katalogu), na który powinno się
przełączyć przetwarzanie. Jeśli podany plik rc
nie istnieje, nie jest zwykłym plikiem ani plikiem
/dev/null, to zostanie wypisany błąd i będzie
kontynuowane przetwarzanie bieżącego pliku rc. W przeciwnym
razie przetwarzanie bieżącego pliku rc zostanie przerwane i
rozpocznie się przetwarzanie pliku podanego jako
wartość tej zmiennej. Jeśli zmienna SWITCHRC
zostanie usunięta, to procmail przerywa przetwarzanie
bieżącego pliku, tak jakby plik ten się
kończył na linii usuwającej tę zmienną.
Podobnie jak w przypadku INCLUDERC nie są są
sprawdzane ani uprawnienia, ani właściciel pliku rc, a
przypisanie tej zmiennej wartości w linii poleceń nie ma
żadnego efektu.
- PROCMAIL_VERSION
- Numer wersji działającego procmaila.
- PROCMAIL_OVERFLOW
- Zmienna ta zostanie ustawiona na niepustą wartość,
jeśli procmail wykryje przepełnienie bufora. Patrz
rozdział BŁĘDY poniżej po opis innych
działań podejmowanych po wykryciu przepełnienia
bufora.
- COMSAT
- Notyfikacja comsat(8)/biff(1) domyślnie jest
włączona, lecz można ją
wyłączyć przez ustawienie tej zmiennej na
"no". Alternatywnie, usługę biff można
dokonfigurować przez ustawienie zmiennej na "service@",
"@hostname" lub "sevice@hostname".
Wartością domyślną jest biff@localhost.
- DROPPRIVS
- Jeśli jest to ustawione na "yes", procmail porzuci
wszelkie uprawnienia (suid lub sgid), jakie może mieć. Opcja
ta jest użyteczna, aby zagwarantować, że dolna
część pliku /etc/procmailrc jest
wywoływana w imieniu odbiorcy.
Następujące żetony rozpoznawane są
zarówno przez wewnętrzny egrep procmaila, jak i przez
standardowy egrep(1) (proszę być świadomym tego,
że niektóre implementacje egrepa zawierają
niestandardowe rozszerzenia, w szczególności operator
powtarzania { nie jest obsługiwany przez wewnętrznego
egrepa procmaila):
- ^
- Początek linii.
- $
- Koniec linii.
- .
- Dowolny znak poza znakiem nowej linii.
- a*
- Dowolna sekwencja składająca się z zera lub
więcej znaków "a".
- a+
- Dowolna sekwencja składająca się z jednego lub
więcej znaków "a".
- a?
- Ciąg pusty albo jeden znak "a".
- [^-a-d]
- Dowolny znak, który nie jest kreską, znakiem
"a", "b", "c" lub "d", lub znakiem
nowej linii.
- de|abc
- Albo sekwencja "de", albo "abc".
- (abc)*
- Zero lub więcej sekwencji "abc".
- \.
- Dopasowuje pojedynczą kropkę; należy
użyć \ przed którymkolwiek ze znaków
specjalnych, aby pozbyć się jego specjalnego znaczenia.
Patrz także opis podstawień zmiennych $\nazwa w
rozdziale BŁĘDY.
Były to tylko przykłady, oczywiście
można używać również bardziej
złożonych kombinacji.
Następujące znaczenia żetonów
są rozszerzeniami procmaila:
- ^ lub $
- Pasuje do znaku nowej linii (dla trafień wieloliniowych).
- ^^
- Zakotwicza wyrażenie na samym początku obszaru
przeszukiwania lub jeśli napotkane na końcu
wyrażenia, na samym końcu obszaru przeszukiwań.
- \< lub \>
- Dopasowuje znak przed słowem lub po nim. Są to
ogólnie skróty dla "[^a-zA-Z0-9_]", lecz
mogą także dopasowywać znaki nowej linii.
Ponieważ odpowiadają rzeczywistym znakom, nadają
się tylko do oddzielania słów, nie do oddzielania
przestrzeni między słowami.
- \/
- Dzieli wyrażenie na dwie części. Wszystko
odpowiadające prawej stronie będzie przypisane do zmiennej
środowiskowej MATCH.
Kontynuowane linie w linii akcji, która określa
program, muszą zawsze kończyć się odwrotnym
ukośnikiem, nawet jeśli używana powłoka nie
potrzebuje lub nie chce odwrotnego ukośnika do wskazania kontynuacji.
Jest tak z powodu dwustopniowego procesu przetwarzania (najpierw procmail,
potem powłoka (lub nie, zależnie od SHELLMETAS)).
Nie wstawia komentarzy w regule w liniach warunkowych
wyrażeń regularnych, linie te są przekazywane
wewnętrznemu egrepowi wprost (z wyjątkiem odwrotnych
ukośników kontynuacji znajdujących się na
końcu linii).
Początkowe białe spacje w kontynuowanych
wyrażeniach regularnych są zazwyczaj ignorowane (więc
linie mogą być wcięte), lecz nie jest tak w
kontynuowanych wyrażeniach warunkowych, które są
odczytywane według reguł podstawiania sh(1)
wewnątrz podwójnych cudzysłowów.
Uwaga na deadlocki podczas wykonywania niezdrowych rzeczy jak
przekazywanie poczty na swoje własne konto. Deadlocki można
złamać przez właściwe użycie
LOCKTIMEOUT.
Wszelkie domyślne wartości, których procmail
używa dla zmiennych środowiskowych zawsze
przeciążą te, które były wcześniej
zdefiniowane. Aby naprawdę przeciążyć
wartości domyślne, należy je albo wstawić do
pliku rc, albo wypisać w linii poleceń jako argumenty.
Plik /etc/procmailrc nie może zmienić
ustawienia zmiennej PATH widzianej później przez pliki
rc użytkowników — wartość tej zmiennej
jest przywracana, gdy procmail kończy przetwarzanie pliku
/etc/procmailrc. W przyszłości należy się
spodziewać ulepszenia tego zachowania, jednakże obecnie
jedynym rozwiązaniem jest przekompilowanie procmaila z
żądaną wartością tej zmiennej.
Zmienne środowiskowe, ustawiane wewnątrz
interpretowanej przez powłokę części akcji
reguły "|", nie zachowają swoich
wartości po zakończeniu reguły, gdyż są
ustawiane w podpowłoce procmaila. Aby upewnić się,
że wartość zostanie zachowana, należy
dokonać przypisania przed początkowym znakiem "|"
reguły, tak że może przechwycić stdout
programu.
Jeśli w regule dostarczającej podana zostanie tylko
flaga "h" lub "b" i reguła ta zostanie
dopasowana, to jeżeli nie użyto flagi "c",
ciało listu lub (odpowiednio) jego nagłówek
zostaną utracone.
procmail(1), procmailsc(5), procmailex(5),
sh(1), csh(1), mail(1), mailx(1),
uucp(1), aliases(5), sendmail(8), egrep(1),
regexp(5), grep(1), biff(1), comsat(8),
lockfile(1), formail(1)
Jedyne podstawienia zmiennych środowiskowych, które
mogą być obsługiwane przez samego procmaila są
typu $nazwa, ${nazwa}, ${nazwa:-tekst},
${nazwa:+tekst}, ${nazwa-tekst}, ${nazwa+tekst},
$\nazwa, $#, $n, $$, $?, $_,
$- i $=; gdzie $\nazwa zostanie zastąpione przez
nazwa z zacytowanymi wszystkimi znakami mającymi specjalne
znaczenie w wyrażeniach regularnych; $_ będzie
zastąpione nazwą bieżącego pliku rc, $-
przez $LASTFOLDER, a $= będzie zawierać
punktację (score) ostatniej reguły. Co więcej znaki
spacji nigdy nie będą rozdzielać wyniku podstawiania
$\nazwa. Gdy użyte są opcje -a lub -m to
"$@" (cudzysłowy są wymagane) rozwinie
się do podanych argumentów. Jednakże
"$@" będzie rozwijany tylko wtedy, gdy jest
używany na liście argumentów programu, i tylko jedno
wystąpienie tej zmiennej będzie rozwijane.
Niecytowanie ekspansje zmiennych przeprowadzane przez procmail
są zawsze dzielone na spacjach, tabulatorach i znakach nowej linii;
zmienna IFS nie jest wewnętrznie używana.
Procmail nie wspiera rozwijania "~".
Bufor linii o długości $LINEBUF jest
używany podczas przetwarzania pliku rc; wszystkie ekspansje,
które nie mieszczą się w tym limicie
długości są obcinane i ustawiana jest zmienna
PROCMAIL_OVERFLOW. Jeśli zbyt długa linia jest
linią warunku lub akcji, to reguła zawierająca taki
warunek lub akcję jest uznawana za zakończoną
niepowodzeniem, a procmail kontynuować będzie przetwarzanie
kolejnych reguł. Jeśli linia taka występuje w
przypisaniu zmiennej lub linii rozpoczynającej, to procmail przerwie
przetwarzanie pliku rc.
Jeśli globalny plik blokujący ma
ścieżkę relatywną, a
bieżący katalog nie jest taki sam, jak wtedy, gdy globalny
plik blokujący został utworzony, to ten globalny plik
blokujący nie zostanie usunięty, jeśli procmail
zakończy w tym momencie działanie (tak więc:
należy używać ścieżek absolutnych
dla globalnych plików blokujących).
Jeśli plik rc ma ścieżkę
względną, to kiedy ten plik jest otwierany po raz
pierwszy, to MAILDIR zawiera ścieżkę
względną. Jeśli w którymś momencie
procmail zostanie poinstruowany, żeby się sklonował, a
bieżący katalog roboczy się zmienił od czasu
otwarcia pliku rc, to procmail nie będzie w stanie się
sklonować (lekarstwo: używanie ścieżek
bezwzględnych do odwołań do plików rc lub
upewnienie się, że MAILDIR zawiera
ścieżkę bezwzględną przed otwarciem pliku
rc).
Lokalny plik blokujący reguły, który zaznacza
początek zagnieżdżonego bloku, nie działa tak,
jak by się tego oczekiwało.
Gdy przechwytuje się standardowe wejście z
reguły do zmiennej środowiskowej, to zostanie obcięty
dokładnie jeden, kończący znak nowej linii.
Niektóre nieoptymalne i nieoczywiste wyrażenia
regularne ustawiają niepoprawną wartość zmiennej
MATCH. Takie wyrażenie regularne można poprawić,
usuwając jeden lub więcej niepotrzebnych operatorów
"*", "+" lub "?" znajdujących
się po lewej stronie tokena \/.
Jeśli wyrażenie regularne zawiera
"^TO_", to zostanie zastąpione przez
"(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope
|Apparently(-Resent)?)-To) :(.*[^-a-zA-Z0-9_.])?)", co
powinno złapać wszystkie specyfikacje celu zawierające
określony adres.
Jeśli wyrażenie regularne zawiera
"^TO", to zostanie zastąpione przez
"(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope
|Apparently(-Resent)?)-To) :(.*[^a-zA-Z])?)", co powinno
złapać wszystkie specyfikacje celu zawierające
określone słowo.
Jeśli wyrażenie regularne zawiera
"^FROM_DAEMON", to zostanie zastąpione przez
"(^(Mailing-List : |Precedence :.*(junk |bulk |list) |To
: Multiple recipients of |(((Resent-)?(From |Sender)
|X-Envelope-From) : |>?From
)([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)? |n) |office)
|(send)?Mail(er)? |daemon |m(mdf |ajordomo) |n?uucp |LIST(SERV
'u' |proc) |NETSERV |o(wner |ps) |r(e(quest |sponse) |oot)
|b(ounce 'u' |bs\.smtp) |echo |mirror |s(erv(ices? |er)
|mtp(error)? |ystem) |A(dmin(istrator)? |MMGR
|utoanswer))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t
][^<)]*(\(.*\).*)?)?$([^>] |$)))", co powinno
złapać maile pochodzące od większości
demonów (jak się podoba to wyrażenie regularne? :-)
Jeśli wyrażenie regularne zawiera
"^FROM_MAILER", to zostanie zastąpione przez
"(^(((Resent-)?(From |Sender) |X-Envelope-From) :
|>?From )([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)? |n)
|office) |(send)?Mail(er)? |daemon |mmdf |n?uucp |ops
|r(esponse |oot) |(bbs\.)?smtp(error)? |s(erv(ices? |er)
|ystem) |A(dmin(istrator)? |MMGR))(([^).!
:a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>]
|$))" (uproszczona wersja "^FROM_DAEMON"), co
powinno złapać maile pochodzące od
większości demonów pocztowych.
Podczas przypisywania wartości logicznych zmiennym takim
jak VERBOSE, DELIVERED czy COMSAT, procmail przyjmuje
jako prawdziwy napis zaczynający się od: cyfry
różnej od zera, "on", "y", "t"
lub "e". Fałsz jest każdym napisem
zaczynającym się od: cyfry zero, "off",
"n", "f" lub "d".
Jeśli linia akcji reguły określa program, to
pojedyncza para znaków odwrotny-ukośnik+nowa-linia w niej
występująca zostanie przekształcona w nową
linię, pod warunkiem, że linia nie zawiera innych
żadnych znaków.
Silnik wyrażeń regularnych wbudowany w procmaila nie
obsługuje nazwanych klas znaków (np. [:alnum:]).
Ponieważ niecytowane początkowe białe spacje
są ogólnie ignorowane w plikach rc, można
zastosować takie wcięcia linii, jakie nam
odpowiadają.
Początkowy znak "|" w linii akcji
wskazującej program lub filtr, jest obcinane przed sprawdzeniem
$SHELLMETAS.
Pliki włączane dyrektywą INCLUDERC
zawierające tylko przypisania wartości zmiennym
środowiskowym mogą być dzielone z sh(1).
Nie ma żadnych gwarancji, że bieżące
zachowanie przypisań zmiennych INCLUDERC i SWITCHRC w
linii poleceń nie zostanie zmienione. Zostało już raz
zmienione w przeszłości i może być zmienione
ponownie lub nawet usunięte w przyszłych wersjach.
W celu naprawdę skomplikowanego przetwarzania
można nawet rozważyć rekurencyjne wywoływanie
procmaila.
W bardzo starych wersjach procmaila zamiast ":0"
rozpoczynającego regułę trzeba było
używać ":n", gdzie n oznaczało liczbę
warunków w regule.
Stephen R. van den Berg
Philip A. Guenther
Autorami polskiego tłumaczenia niniejszej strony
podręcznika man są: Przemek Borys (PTM)
<pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i
Michał Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią
projektu manpages-pl; uwagi, pomoc, zgłaszanie
błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją
3.22 oryginału.