NIMI
procmail − automaattinen sähköpostin käsittelijä
YLEISKATSAUS
procmail
[−ptoY] [−f keneltä]
[parametri=arvo | ohjetiedosto]
...
procmail [−toY] [−f
keneltä] [−a argumentti]
−d vastaanottaja ...
procmail [−ptY] −m
[parametri=arvo] ...
ohjetiedosto
[argumentti] ...
procmail −v
KUVAUS
Päästäksesi suoraan asiaan, katso MERKINNÄT manuaalitiedoston lopussa.
Yleensä Procmail käynnistetään automaattisesti tiedoston .forward kautta heti, kun sähköposti saapuu. Vaihtoehtoisesti, jos toiminnan asentaa systeemin ylläpitäjä, se voidaan käynnistää heti sähköpostin välittäjäohjelmasta. Käynnistyessään ohjelma asettaa joitain ympäristömuuttujia oletusarvoihinsa, lukee sähköpostiviestin vakiosyötteestä tiedoston loppumerkkiin saakka, erottaa viestinrungon sen otsikkotiedoista ja lopulta, jos mitään komentoriviargumentteja ei ole annettu, etsii tiedostoa nimeltään $HOME/.procmailrc. Tässä tiedostossa olevien käsittelyohjeiden mukaan juuri saapunut sähköpostiviesti mm. siirretään oikeaan kansioon. Jos ohjetiedostoa ei löydy tai ohjetiedoston käsittely epäonnistuu, procmail tallettaa viestin systeemin oletuspostilaatikkoon.
Jos ohjetiedostoja eikä optiota −p ole asetettu komentorivillä, procmail käy läpi ennen tiedoston $HOME/.procmailrc lukemista komennot tiedostosta /etc/procmailrc (jos se on olemassa). Tiedoston /etc/procmailrc luonnissa täytyy olla varovainen, sillä olosuhteiden sen salliessa se ajetaan pääkäyttäjän (root) oikeuksilla (tietenkin päin vastoin kuin tiedosto $HOME/.procmailrc).
Jos procmail ajetaan pääkäyttäjän oikeuksilla, procmailia voidaan käyttää toiminnallisesti kehittyneenä, taaksepäin yhteensopivana sähköpostin välittäjäohjelmana.
Procmailia voidaan käyttää myöskin yleiskäyttöisenä sähköpostin suodattimena, eli on pyritty huolehtimaan siitä, että se voidaan käynnistää erityisenä sendmailin konfiguraatiosääntönä.
Ohjetiedoston muotoa kuvataan yksityiskohtaisesti procmailrc(5) -manuaalitiedostossa.
Arvotettua pisteytystekniikkaa kuvataan yksityiskohtaisesti procmailsc(5) -manuaalitiedostossa.
Esimerkkejä ohjetiedoston muodostamiseen voi katsoa procmailex(5) -manuaalisivuilta.
Signaalit
TERMINATE |
Keskeytä toiminta ja ohjaa sähköpostiviesti uudelleen jonoon. | ||
HANGUP |
Keskeytä toiminto ja palauta viesti takaisin lähettäjälle. | ||
INTERRUPT |
Keskeytä toiminto ja palauta viesti takaisin lähettäjälle. | ||
QUIT |
Keskeytä toiminto ja hukkaa viesti äänettömästi. | ||
ALARM |
Pidä tauko ajossa (katso TIMEOUT). | ||
USR1 |
Sama kuin VERBOSE=off. | ||
USR2 |
Sama kuin VERBOSE=on. |
OPTIOT
−v |
Procmail tulostaa versionumeronsa, näyttää käännösaikaisen konfiguraationsa ja lopettaa. | ||
−p |
Säilytä kaikki tieto ajoa edeltävästä ympäristöstä. Tavallisesti procmail tyhjentää ympäristön käynnistyessään, paitsi aikavyöhykeasetukset. Kuitenkin joka tapauksessa: kaikki oletusarvot kumoavat olemassaolevien ympäristömuuttujien vaikutuksen, esim. procmail ei lainkaan huomioi mitään etukäteen määriteltyjä ympäristömuuttujia, vaan iloisesti korvaa ne omilla oletuksillaan. Listan procmailin valmiiksi asettamista ympäristömuuttujista näet tiedoston procmailrc(5) manuaalisivuilla. Jos sekä −p että −m on annettu komentorivillä, näitä valmiiksi asetettuja ympäristömuuttujia ovat vain LOGNAME, HOME, SHELL, ORGMAIL ja MAILDIR. | ||
−t |
Aseta procmail epäonnistumaan mahdollisimman pehmeästi, eli jos procmail ei voi jakaa sähköpostiviestiä mihinkään antamaasi määränpäähän, postia ei palauteta lähettäjälle, vaan se palaa sähköpostijonoon. Seuraava jakeluyritys tehdään sitten joskus hamassa tulevaisuudessa. |
−f keneltä
Panee procmailin muuttamaan alussa olevan ’From ’-rivillä olevan lähettäjänimen nimeksi keneltä (−f:n sijaan voisi käyttää vaihtoehtoista, mutta vanhentunutta optiota −r). Jos keneltä muodostuu vain yksinkertaisesti viivasta ’-’, procmail päivittää vain ’From ’-rivillä olevan aikamerkinnän (jos se löytyy, muussa tapauksessa se tuottaa uuden).
−o |
Sen sijaan että sallittaisiin kuka tahansa tuottamaan ’From ’-rivejä, kumoa tekaistut nimet. | ||
−Y |
Oleta perinteinen Berkeleyn postilaatikkomuoto, jätä huomiotta kaikki Content-Length: -kentät. |
−a argumentti
Tämä asettaa $1:n muotoon argumentti. Sen avulla voidaan välittää lisätietoa procmailille. Näin tehdään tyypillisesti välitettäessä muodon $@x avulla tietoa sendmailin sähköpostinvälittäjälle.
−d vastaanottaja ...
Tämä käynnistää eksplisiittisen jakelutilan, posti välitetään paikalliselle käyttäjälle vastaanottaja. Tämä tietenkin on mahdollista vain, jos procmaililla on pääkäyttäjän oikeudet (tai jos procmailia jo ajetaan vastaanottajan euid:lla ja egid:lla). Procmail muuttaa uid:tään aiotuille vastaanottajille ja lukee vain vastaanottajan $HOME/.procmailrc-tiedoston (jos se on olemassa, muutoin jakelu tapahtuu samoin kuin tavallisen sähköpostin jakelu). Tämä optio ei sovi yhteen option −p kanssa.
−m |
Muuttaa procmailin yleiskäyttöiseksi sähköpostisuodattimeksi. Tässä tilassa yksi ohjetiedosto täytyy määrittää komentorivillä. Ohjetiedoston jälkeen procmail hyväksyy rajoittamattoman määrän argumentteja. Jos ohjetiedosto on absoluuttinen polku alkaen hakemistosta /etc/procmailrcs/ ilman viittauksia takaisinpäin (eli yläpuolella oleviin hakemistoihin ei voi viitata), procmail muuttaa käyttäjäid:nsä ohjetiedoston (tai symbolisen linkin) omistajan uid:ksi. Tämä tapahtuu siis vain, jos mitään turvallisuusrikkomuuksia ei löydy. Tämän option käyttöesimerkkejä löytyy allaolevasta kappaleesta ESIMERKKEJÄ. |
ARGUMENTIT
Mitä tahansa argumenttia, jossa on ’=’, pidetään ympäristömuuttujamäärittelynä. Ne kaikki asetetaan sen jälkeen, kun oletusarvot on annettu ja ennen kuin avataan ensimmäinen ohjetiedosto.
Mitkä tahansa muut argumentit oletetaan ohjetiedostojen poluiksi. (Joko absoluuttisiksi, tai jos ne alkavat merkeillä ’./’, lähtien nykyisestä hakemistosta, tai muutoin miksi tahansa muuksi $HOME:sta lähteväksi hakemistoksi, jollei optiota −m ole asetettu. Jälkimmäisessä tapauksessa kaikki suhteelliset polut lähtevät nykyisestä hakemistosta.) Procmail aloittaa ensimmäisestä komentoriviltä löytämästään ohjetiedostosta. Jälkimmäiset käydään läpi vain, jos edellisissä on väärä HOST-direktiivi, tai siinä tapauksessa, että sitä ei ole lainkaan.
Jos yhtäkään ohjetiedostoa ei anneta, ohjelma etsii tiedostoa $HOME/.procmailrc. Jos tätäkään ei löydetä, käsittely jatkuu ympäristömuuttujien oletusasetusten ja komentorivimääritysten mukaan.
ESIMERKKEJÄ
Ohjetiedoston ohjeisiin voi katsoa esimerkkejä manuaalisivulta procmailex(5). Pieni näyte ohjetiedostoksi löytyy allaolevasta kappaleesta MERKINNÄT.
Hyppää vapaasti yli loput tästä ESIMERKKEJÄ-kappaleesta, jollet ole ylläpitäjä, jolla on jonkin verran tietoa sendmail.cf:n syntaksista.
Optiota −m käytetään yleensä, kun procmailia kutsutaan sendmailin konfiguraatiotiedostosta sendmail.cf. Tehdäksesi tämän on kätevää luoda ylimääräinen ’procmail’ postinvälittäjä sendmail.cf-tiedostossa (jo siellä mahdollisesti olevan paikallisen procmailin käynnistävän postinvälittäjän lisäksi). Luodaksesi tällaisen postinvälittäjän, käytä esim. seuraavaa riviä:
Mprocmail,
P=/usr/bin/procmail, F=mSDFMhun, S=11, R=21,
A=procmail −m $h $f $u
Tämä mahdollistaa seuraavanlaisten konfiguraatiosääntöjen käytön (todennäköisimmin sääntöjoukossa 0) postin suodatukseen procmailin kautta (huomaa sääntöä jatkavan rivin alussa oleva tabulaattori ja tabulaattori, joka erottaa kommentit):
R$*<@jossain.muualla>$*
$#procmail $@/etc/procmailrcs/jossain.rc
$:$1 [AT] jossain.procmail$2
R$*<@$*.procmail>$*
$1<@$2>$3 Jo suodatettu, vie takaisin
Ja /etc/procmailrcs/jossain.rc voisi näyttää suunnilleen seuraavalta:
:0 #
hylkää kaikki roskaposti
* ^Subject:.*junk
/dev/null
:0 # ota mukaan
kaikki muu posti
! −oi −f "$@"
Ole tarkkana, kun lähetät postia tiedoston /etc/procmailrcs/jossain.rc kautta - jos lähetät postia osoitteisiin, jotka taas sopivat ensimmäiseen sääntöön, voit vahingossa luoda loppumattoman postisilmukan.
TIEDOSTOT
/etc/passwd |
asettaa oletukset vastaanottajaa koskeviin ympäristömuuttujiin LOGNAME, HOME ja SHELL |
/var/spool/mail/$LOGNAME
systeemin postilaatikko; sekä systeemin postilaatikko että sen sijaintihakemisto luodaan aina, kun procmail käynnistyy ja jompi kumpi näistä ei ole olemassa
/etc/procmailrc |
ensin läpikäytävä koko systeemin kattava ohjetiedosto | ||
/etc/procmailrcs/ |
polku ohjetiedostoille, joissa tarvitaan erityisiä käyttöoikeuksia | ||
$HOME/.procmailrc |
oletusohjetiedosto |
/var/spool/mail/$LOGNAME.lock
systeemin postilaatikon lukkotiedosto (procmail ei käytä tätä automaattisesti, jollei $DEFAULT ole sama kuin /var/spool/mail/$LOGNAME ja procmail ole välittämässä postia $DEFAULT:iin)
/usr/sbin/sendmail |
oletuksena oleva postin forwardoija (eteenpäinviejä) | ||
_????’isäntäkone’ |
procmailin luomia nollapituisia väliaikaistiedostoja (nimet muodostuvat siten, ettei olemassaolevien tiedostojen päälle kirjoiteta) |
DIAGNOSTIIKKA
Autoforwarding mailbox found
(Löytyi automaattisesti forwardoiva postilaatikko): Systeemin postilaatikossa oli asetettu suid- tai sgid-bitti; procmail keskeyttää ajon signaaliin EX_NOUSER olettaen, että tähän postilaatikkoon ei saa postia välittää.
Bad substitution of "x"
("x":n asettaminen ei onnistu): Määritetty ympäristömuuttujan nimi ei kelpaa.
Closing brace unexpected
(Odottamaton lopettava aaltosulku): Vastaavaa aloittavaa aaltosulkua ei ollut (sisäkkäinen blokki).
Conflicting options |
(Yhteensopimattomia optioita): Kaikki optioyhdistelmät eivät toimi. |
Conflicting "x" suppressed
(Yhteensopimaton "x" ohitettu): Valinta x ei sovi yhteen jonkin toisen tässä ohjeessa olevan valinnan kanssa.
Couldn’t create "x" |
("x":n luominen epäonnistui): Systeemin postilaatikkoa ei ollut olemassa eikä sitä voida luoda/tulla luomaan. |
Couldn’t determine implicit lockfile from "x"
("x":stä ei pystynyt päättelemään lukkotiedostoa): Yhtäkään ’>>’ uudelleenohjausmerkkiä ei löytynyt, paikallisena lukkotiedostona käytetään yksinkertaisesti muuttujan ’$LOCKEXT’ sisältöä.
Couldn’t unlock "x" |
(Lukkotiedostoa "x" ei pystytty avaamaan): Lukkotiedosto on jo tuhottu, tai kirjoitusoikeudet lukkotiedoston sisältävään hakemistoon on poistettu. |
Deadlock attempted on "x"
("x":ssä ajauduttu umpikujaan): Paikallinen tässä säännössä määritetty lukkotiedosto on sama kuin edelleen aktiivinen $LOCKFILE.
Denying special privileges for "x"
(Erityisoikeudet estetty "x":ltä): Procmail ei käytä ohjetiedoston käyttäjätunnusta (uid:tä), sillä se löysi turvallisuusrikkeen (esim. −p tai komentorivillä tehdyt muuttujamäärittelyt) tai sillä ei ole tarpeeksi oikeuksia tehdä niin.
Enforcing stricter permissions on "x"
(Asetan tiukempia oikeuksia "x":lle): Vastaanottajan postilaatikko oli näemmä turvaton, procmail turvasi sen.
Error while writing to "x"
("x":ään kirjoitettaessa tuli virhe): Alihakemistoa ei ole, ei kirjoitusoikeuksia, putki katkesi tai levy on täynnä.
Exceeded LINEBUF |
(LINEBUF ylitettiin): Havaittiin puskurin ylivuoto, LINEBUF oli liian pieni, muistissa saattaa olla vikaa. |
Excessive output quenched from "x"
(Liiallinen tulostus "x":stä katkaistu): Ohjelma tai suodatin "x" yritti tuottaa liian paljon tulostusta nykyiseen LINEBUF:iin (rivipuskuriin), loppu heitettiin menemään.
Extraneous x ignored |
(Epäolennainen x jätettiin huomiotta): Tämän ohjeen toimintarivi tekee option x merkityksettömäksi. | ||
Failed forking "x" |
("x":n haarautuminen epäonnistui): Prosessitaulu on täynnä (ja NORESRETRY käytetty loppuun). | ||
Failed to execute "x" |
("x":n ajaminen epäonnistui): Ohjelma ei ole polussa, tai sillä ei ole ajo-oikeuksia. |
Forced unlock denied on "x"
("x":n avaaminen kielletty): Lukkotiedoston "x" sisältävään hakemistoon ei ole kirjoitusoikeuksia, tai useampi kuin yksi procmail yrittää lukita sitä täsmälleen samaan aikaan.
Forcing lock on "x" |
("x":n lukitus pakotetaan): Lukkotiedostoa "x" ollaan poistamassa yliajan vuoksi (katso myös: LOCKTIMEOUT). | ||
Incomplete recipe |
(Epätäydellinen ohje): Ohjeen alku löydettiin, mutta loppua ei näkynyt ennen EOFia (tiedoston loppumerkkiä). |
Insufficient privileges
(Riittämättömät oikeudet): Procmail joko tarvitsee pääkäyttäjän oikeuksia tai sillä täytyy olla oikea (e)uid ja (e)gid, jotta sitä voitaisiin ajaa jakelutilassa. Jakelua yritetään alkuperäisellä procmailin käynnistäjällä.
Invalid regexp "x" |
(Epäkelpo säännöllinen lauseke "x"): Säännöllisessä lausekkeessa "x" on virheitä (todennäköisesti puuttuvia tai liiallisia sulkumerkkejä). | ||
Kernel-lock failed |
(Kernelin lukitus epäonnistui): Kun yritettiin käyttää kernelin tukemia lukituskutsuja, yksi niistä epäonnistui (yleensä tämä viittaa käyttöjärjestelmävirheeseen). Procmail jättää tämän virheen huomiotta ja jatkaa. | ||
Kernel-unlock failed |
(Kernelin lukituksen avaaminen epäonnistui): Katso yllä. | ||
Lock failure on "x" |
(Lukitusvirhe "x":ssä): Tämä voi tapahtua vain, jos käytät ihan outoja (tai virheellisiä) lukkotiedostojen nimiä tai jos lukkotiedostoa ei voitu luoda riittämättömien oikeuksien vuoksi tai koska määritettyä alihakemistoa ei ollut olemassa. | ||
Lost "x" |
("x" katosi): Procmail yritti kloonata itsensä, muttei enää löytänyt ohjetiedostoa "x" (se joko oli poistettu tai siihen viitattiin suhteellisella polulla ja muutit hakemistoa sen jälkeen, kun procmail avasi sen viimeksi). | ||
Missing closing brace |
(Sulkeva aaltosulku puuttuu): Sisäkkäinen blokki aloitettiin aaltosululla, muttei koskaan lopetettu. | ||
Missing name |
(Nimi puuttuu): Optio −f tarvitsee lisäargumentin. | ||
Missing argument |
(Argumentti puuttuu): Käytit optiota −a, mutta unohdit argumentin. | ||
Missing rcfile |
(Ohjetiedosto puuttuu): Käytit optiota −m, joten procmail odottaa ohjetiedoston nimeä argumenttina. | ||
Missing recipient |
(Vastaanottaja puuttuu): Käytit optiota −d tai kutsuit procmailia toisella nimellä. Tällöin se odottaa yhtä tai useampaa vastaanottajan määrittävää argumenttia. |
No space left to finish writing "x"
("x":n kirjoittamisen viimeistelyyn ei ole tilaa): "x":n sisältävässä tiedostojärjestelmässä ei ole tarpeeksi vapaata tilaa, jotta viesti voitaisiin viedä tiedostoon.
Out of memory |
(Muisti loppui): Järjestelmästä loppui sivutusmuistitila (ja NORESRETRY on käytetty loppuun). | ||
Processing continued |
(Käsittely jatkuu): Komentorivin tuntemattomat optiot jätettiin huomiotta, procmail jatkaa kuten tavallisesti. |
Program failure (nnn) of "x"
(Ohjelmavirhe (nnn) "x":ssä): Procmailin käynnistämä ohjelma palautti arvon nnn EXIT_SUCCESSin (=0) asemesta (EXIT_SUCCESS = onnistunut lopetus); jos nnn on negatiivinen, tämä on signaali, johon ohjelma kuoli.
Renaming bogus "x" into "y"
(Muutan vääränlaisen "x":n nimen "y":ksi): Systeemin vastaanottajaa varten tarkoittama postilaatikko huomattiin vääränlaiseksi, procmail pyrki toimimaan väärennöksiä vältellen.
Skipped: "x" |
(Ohitettu: "x"): Procmail ei voinut tehdä mitään ohjetiedostossa olevalla "x":llä, joten se jättää sen huomiotta. | ||
Suspicious rcfile "x" |
(Epäilyttävä ohjetiedosto "x"): Tämän ohjetiedoston omistaja ei ollut vastaanottaja eikä pääkäyttäjä, tai sitten sen sisältävä hakemisto oli kaikkien kirjoitettavissa (ohjetiedostoa ei käytetty). |
Terminating prematurely whilst waiting for ...
(Ennenaikainen keskeytys odotettaessa...): Procmail vastaanotti tapposignaalin odottaessaan...
Quota exceeded while writing "x"
(Käyttäjäkohtainen levykiintiö ylittyi "x":ää kirjoitettaessa): Vastaanottajan levykiintiö "x":n sisältävässä tiedostojärjestelmässä ei salli viestin siirtoa tiedostoon.
Timeout, terminating "x"
(Keskeytys, "x" lopetetaan): Ohjelmassa tai suodattimessa "x" ylitettiin määritetty odotusaika.
Timeout, was waiting for "x"
(Keskeytys, odotin "x":ää): Ohjelmassa, suodattimessa tai tiedostossa "x" ylitettiin määritetty odotusaika. Jos se oli ohjelma tai suodatin, se ei näyttänyt olevan ajossa enää.
Truncated file to former size
(Tiedosto lyhennetty aikaisempaan kokoonsa): Postinjakelu tiedostoon ei onnistunut, joten tiedosto lyhennettiin aikaisempaan kokoonsa.
Truncating "x" and retrying lock
("x" lyhennetään ja lukitusta yritetään uudelleen): "x" ei näytä olevan kelvollinen tiedostonimi tai tiedosto ei ole tyhjä.
Rescue of unfiltered data succeeded/failed
(Ei-suodatetun datan pelastaminen onnistui/epäonnistui): Suodatin antoi epäonnistumisesta kertovan paluuarvon, procmail yritti palata takaisin alkuperäiseen tekstiin.
Unexpected EOL |
(Ei-odotettu EOL (=rivin loppu)): Puuttuvat sulkevat lainausmerkit, tai EOFia (tiedoston loppumerkkiä) yritetään välttää. | ||
Unknown user "x" |
(Tuntematon käyttäjä "x"): Määritetyllä vastaanottajalla ei ole vastaavaa uid:tä (käyttäjän identifioivaa numeroa). |
LAAJENNETTU DIAGNOSTIIKKA
Laajennettu
diagnostiikka voidaan asettaa päälle tai pois
määrittämällä muuttuja VERBOSE.
[pid] aika & päivämäärä
Procmailin pid (prosessi-identifikaationumero) ja aikamerkintä. Tuotetaan aina, kun procmail kirjoittaa lokitiedostoon diagnostiikkaa ja ainakin sekunti on kulunut edellisestä aikamerkinnästä.
Acquiring kernel-lock |
(Kernel-lukitusta ollaan tekemässä): Procmail yrittää nyt kernel-lukita viimeksi avatun tiedoston (-kuvauksen). | ||
Assigning "x" |
(Asettamassa "x":ää): Ympäristömuuttujan asetus. |
Assuming identity of the recipient, VERBOSE=off
(Oletetaan vastaanottajan identiteetti, VERBOSE=off (VERBOSE=monisanaisuus)): Kaikki etuoikeudet (jos niitä on) unohdetaan, asettaa epäsuorasti laajennetun diagnostiikan pois päältä.
Bypassed locking "x" |
(Ohittamassa "x":n lukitusta): Procmaililla ei ollut pääsyä sähköpostin spool-hakemistoon, se luotti pelkästään kernelin lukkoihin. | ||
Executing "x" |
(Ajamassa "x":ää): Aloittamassa ohjelmaa "x". Jos se aloitetaan procmailista suoraan (ilman välissä olevaa komentotulkkia), procmail näyttää missä kohdin se erotti argumentit lisäämällä pilkkuja. | ||
HOST mismatched "x" |
(ISÄNTÄKONE ei ole sama kuiin "x"): Tämän isäntäkoneen nimi oli "x", ISÄNTÄKONE (HOST) näytti joltain muulta. | ||
Locking "x" |
(Lukitsemassa "x":ää): Luomassa lukkotiedostoa "x". | ||
Linking to "x" |
(Linkkaamassa "x":ään): Luomassa kovaa linkkiä hakemistokansioiden välille. | ||
Match on "x" |
(Sopii "x":ään): Ehto sopi. | ||
Matched "x" |
(Sovitettiin "x"): Asetettiin "x" SOPIMAAN. | ||
No match on "x" |
("x":ään ei löytynyt sopivaa): Ehtoon sopivaa tietoa ei löytynyt, ohje ohitettiin. |
Notified comsat: "$LOGNAME@offset:file"
(Ilmoitettiin comsatille: "$LOGNAME@alkukohta:tiedosto"): Lähetettiin comsatille/biffille (sähköpostin saapumisesta ilmoittavia ohjelmia) ilmoitus, että postia saapui käyttäjälle $LOGNAME ’tiedoston’ kohtaan ’alkukohta’.
Opening "x" |
(Avataan "x":ää): Avataan tiedosto "x" lisäämistä varten. | ||
Rcfile: "x" |
(Ohjetiedosto: "x"): Ohjetiedosto muuttui "x":ksi. |
Reiterating kernel-lock
(Toistetaan kernel-lukkoa): Montaa lukitusmenetelmää yritettäessä yksi epäonnistui. Procmail toistaa niitä kunnes ne kaikki onnistuvat nopeasti peräjälkeen.
Score: added newtotal "x"
(Pistemäärä: lisättiin uusi kokonaissumma "x"): Tämä ohje aiheutti ’lisäpisteitä’, jotka tuottivat pistemäärän "x".
Unlocking "x" |
(Avaamassa "x":ää): Poistamassa taas lukkotiedostoa "x". |
VAROITUKSET
Olisi hyvä luoda komentojono, joka käyttää ohjelmaa lockfile(1) ennen kuin antaa sähköpostin komentotulkkisi käsitellä mitään muuta postilaatikkotiedostoa kuin systeemin postilaatikkoa (jollei tietenkin sähköpostin komentotulkkisi käytä samoja lukkotiedostoja (paikallisia tai koko systeemin kattavia) kuin, jotka määritit ohjetiedostossa).
Siinä epätodennäköisessä tapauksessa, että procmail on ehdottomasti tapettava ennen kuin se lopettaa ajonsa, yritä ensin käyttää tavallista kill-komentoa (eli ei kill −9, katso ehdotuksia alaotsikon Signaalit alta) - muutoin jotkin lukkotiedostot voivat tuhoutua.
Ole varovainen käyttäessäsi optiota −t, sillä jos procmail ei toistuneiden yritysten jälkeenkään pysty jakelemaan postia (esim. väärän ohjetiedoston vuoksi), systeemin postijono voi täyttyä. Tämä voisi suututtaa niin paikallista sähköpostiylläpitäjää kuin muitakin käyttäjiä.
Tiedosto /etc/procmailrc saatetaan ajaa pääkäyttäjän oikeuksilla, joten katso tarkkaan, mitä siihen laitat. SHELL on sama kuin kyseisellä vastaanottajalla, joten jos procmailin on kutsuttava komentotulkkia, se olisi parasta asettaa ensin joksikin turvalliseksi. Katso myös: DROPPRIVS.
Pidä mielessäsi, että jos chown(1) on sallittu hakemiston /etc/procmailrcs/ sisältämille tiedostoille, niiden omistaja voidaan muuttaa pääkäyttäjäksi (root) (tai miksi tahansa muuksi) niiden edellisten omistajien toimesta. Turvallisinta olisi varmistaa, että tästä hakemistosta ainoastaan pääkäyttäjä voi käynnistää ohjelmia.
BUGIT
Poistettuaan voimatoimin lukkotiedoston procmail odottaa $SUSPEND sekuntia ennen kuin luo uuden lukkotiedoston, jotta toinen prosessi, joka päättää tuhota vanhan lukkotiedoston, ei vahingossa tuhoa juuri luotua lukkoa.
Procmail käyttää säännöllistä TERMINATE (keskeytä)-signaalia keskeyttääkseen villiintyneen suodattimen, mutta se ei tarkista vastaako suodatin tuohon signaaliin, ja se lähettää signaalin suodattimelle itselleen, ei tämän aliprosesseille.
Jatkettua Content-Length: -kenttää ei osata käsitellä oikein.
SEKALAISTA
Jos postin otsikossa on kenttä Content-Length: ja optiota −Y ei ole asetettu, procmail poistaa kentästä ylimääräiset välilyönnit löytääkseen oikean koon. Procmail ei muuta kentän leveyttä.
Jos kenttää Content-Length: ei ole olemassa tai optiota −Y ei ole asetettu ja procmail lisää posteja tavallisiin postikansioihin, kaikkiin viestin rungossa oleviin välitystiedoilta näyttäviin riveihin lisätään alkuun ’>’ (tämä estää väärennetyt postiotsikot). Näitä etsitään seuraavalla säännöllisellä lausekkeella:
’\nFrom ’
Jos itse jakelutilassa käytetty kohteen nimi ei löydy /etc/passwd:stä, procmail jatkaa kuin jakelutila ei olisi päällä. Jollei procmail ole jakelutilassa ja jos procmailin käyttämä uid ei löydy /etc/passwd:stä, oletus HOMElle on /, LOGNAMElle #uid ja SHELLille /bin/sh.
Jakelutilassa procmail luo alkuun ’From ’-rivin, jos sellaista ei ole olemassa. Jos sellainen jo on, procmail ei koske siihen. Jos procmailia ei ole kutsuttu millään seuraavilla käyttäjä- tai ryhmä-id:illä: root, daemon, uucp, mail, x400, network, list, lists tai news, mutta sen silti täytyy tuottaa tai hyväksyä uusi ’From ’-rivi, se tuottaa myös lisärivin ’>From ’ auttaakseen erottamaan väärennetyt viestit.
Turvallisuussyistä procmail käyttää vain absoluuttista tai $HOME:een suhteellista ohjetiedoston polkua, jos sen omistaa joko vastaanottaja tai pääkäyttäjä ja se ei ole kaikkien kirjoitettavissa tai jos sen sisältävä hakemisto ei ole kaikkien kirjoitettavissa.
Jos /var/spool/mail/$LOGNAME on vääränlainen postilaatikko (eli se ei kuulu vastaanottajalle, siihen ei voi kirjoittaa tai se on symbolinen tai kova linkki), procmail yrittää käynnistyessään muuttaa sen nimen tiedostoksi, joka alkaa sanalla ’BOGUS.’ ja loppuu inode-jonokoodiin. Jos tämä havaitaan mahdottomaksi, muuttuja ORGMAIL ei saa alkuarvoa ja siten se estää postinjakelun ilman kunnollista ohjetiedostoa.
Jos /var/spool/mail/$LOGNAME on jo oikeanlainen postilaatikko, mutta sillä on heikot oikeusmääritykset, procmail korjaa asian. Estääksesi procmailin tekemästä tätä varmista, että u+x-bitti on asetettu.
Jakaessasi postia alihakemistoihin (tai MH-kansioihin), lukkotiedostoja ei tarvita estämään useiden päällekkäin ajavien procmail-prosessien sotkeentumista toisiinsa.
MH-kansioihin jakelu vie hiukan enemmän aikaa kuin jakelu tavallisiin alihakemistoihin tai kansioihin, sillä procmailin täytyy etsiä seuraavaa tarjolla olevaa numeroa (sen sijaan, että tiedostonimi olisi heti tiedossa).
Yleiseen virheeseen kaatuessaan procmail palauttaa arvon EX_CANTCREAT, jollei optiota −t ole määritetty. Tämän option määrityksen jälkeen se palauttaisi arvon EX_TEMPFAIL.
Jotta otsikoiden ’egreppaus’ olisi johdonmukaisempaa, procmail yhdistää kaikki otsikoiden jatkorivit (useammalle riville jakautuvat); mutta vain sisäisesti. Sähköpostin jakelussa rivinvaihdot näkyvät kuten ennenkin.
Jos procmailia kutsutaan nimellä, joka ei ala ’procmail’ (esim. jos se on linkattu toiselle nimelle ja kutsuttu sillä), se siirtyy jakelutilaan ja olettaa vastaanottajan nimien olevan komentoriviargumentteina (aivan kuten jos olisi määritetty −d).
Ilmoitukset comsatille/biffille tehdään käyttämällä udp:tä. Ne lähetetään kerran, kun procmail tuottaa tavallisen merkinnän lokitiedostoon. Ilmoitusviesteillä on seuraava laajennettu muoto (tai niin lähelle kuin pystyy pääsemään, kun lopullista jakelua ei suoritettu tiedostoon)
$LOGNAME@viestin_alkukohta_kansiossa:kansion_absol_polku
Kun procmail itse avaa tiedoston jakelua varten, se käyttää johdonmukaisesti seuraavia kernelin lukitsemisstrategioita: fcntl(2) ja lockf(3).
Procmail käyttäytyy hyvin NFS:n (verkkotiedostojärjestelmän) kanssa ja käsittelee oikein kahdeksannen bitin.
MERKINNÄT
Kun procmailia kutsutaan −h tai −? optiolla, se näyttää komentorivin aputekstin ja tiiviin listan ohjetiedoston ohjeista.
Sen sijaan, että käyttäisit järjestelmän tarjoamaa procmailin kutsua sähköpostin saapuessa, voit hallita procmailin kutsua myös itse. Tässä tapauksessa tiedostosi $HOME/.forward (ole varovainen, sen nimittäin täytyy olla kaikkien luettavissa) täytyisi sisältää allaoleva rivi. Varmista, että käytät oikein yksinkertaisia ja kaksinkertaisia lainausmerkkejä ja absoluuttista polkua. #KÄYTTÄJÄTUNNUKSESI ei oikeastaan ole procmailin vaatima parametri, vaan sh hylkää sen ennen kuin procmail koskaan edes näkee sitä; se on kuitenkin ihan tarpeellinen kikka ylioptimoivia sendmail-ohjelmia vastaan:
"|IFS=’ ’&&exec /usr/local/bin/procmail -f-||exit 75 #KÄYTTÄJÄTUNNUKSESI"
Procmail voidaan myös kutsua jälkikäsittelemään jo täysi systeemin postilaatikko. Tämä voi olla hyödyllistä, jos et halua tai voi käyttää tiedostoa $HOME/.forward (missä tapauksessa seuraava skripti voitaisiin määräajoin kutsua cron(1) -ohjelmasta tai aina, kun aloitat postinluvun):
#!/bin/sh
ORGMAIL=/var/spool/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
Esimerkki
pienestä $HOME/.procmailrc-tiedostosta:
PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/Mail #varmista, että tämä
tosiaan on olemassa
DEFAULT=$MAILDIR/mbox #täysin vapaaehtoinen
LOGFILE=$MAILDIR/from #suositeltu
:0:
* ^From.*berg
minulta
:0
* ^Subject:.*Liekitys
/dev/null
Muita esimerkkejä ohjetiedoston ohjeisiin voi etsiä manuaalisivulta procmailex(5).
LÄHDE
Tämä ohjelma on osa pakettia procmail mail-processing-package (postin-käsittely-paketti) (v3.10 1994/10/31), jonka saa lähimmästä USENETin comp.sources.misc -arkistosta ftp.informatik.rwth-aachen.de:stä polusta pub/packages/procmail/procmail.tar.gz.
POSTITUSLISTA
Procmail-paketin mihin tahansa ohjelmaan liittyviä kysymyksiä varten on olemassa postituslista:
kysymysten/vastausten lähettämiseen.
procmail-request [AT] informatik.de
liittymispyyntöihin.
TEKIJÄ
Stephen R. van den Berg at RWTH-Aachen, Germany
KATSO MYÖS
procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1), grep(1), biff(1), comsat(8), lockfile(1), formail(1), cron(1).