- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka -

LinuxovΘ noviny 06/98

Kterak po╣tu na Linuxu Pmailem Φφsti

Dan Ohnesorg a Milan Ker╣lßger, 12. Φervna 1998

Pokud se rozhlΘdnete po Φesk²ch ╣kolßch, zjistφte, ╛e tΘm∞° v╣ude se pou╛φvß jako klient elektronickΘ po╣ty Pegasus Mail, dφlo to Davida Harrise. Jeho popularita je celosv∞tov∞ obrovskß a jeden Φas byl dokonce prost°ednictvφm firmy Novell prodßvßn pod nßzvem First Mail jako oficißlnφ klient novellskΘho po╣tovnφho systΘmu MHS, poslΘze ho v tΘto funkci nahradil GroupWise. Pegasus Mail je ╣φ°en jako freeware, s n∞kolika v²hradami - nejsou k dispozici zdrojovΘ texty, program se nesmφ prodßvat (m∙╛e b²t souΦßstφ n∞jakΘho placenΘho balφku, ale nesmφ b²t prodßn sßm o sob∞), nesmφ se pou╛φvat pro rozesφlßnφ nevy╛ßdan²ch reklamnφch mail∙ a nesmφ b²t modifikovßn bez p°edchozφho svolenφ autora.

Velikou v²hodou je ·zkß integrace se serverem Novell Netware. Pegasus mail si naΦφtß konfiguraci p°φmo ze serveru, umφ lokßln∞ doruΦovat p°φmo u╛ivatel∙m, bez pot°eby dal╣φho programu b∞╛φcφho na serveru, umφ vyhledßvat lokßlnφ u╛ivatele podle jmen ulo╛en²ch v tzv. bindery databßzi (mnohem slo╛it∞j╣φ obdoba souboru /etc/passwd, dostupnß ke Φtenφ a zßpisu jedin∞ slu╛bami b∞╛φcφmi na serveru (no za tuto v∞tu by se mi ka╛d² hacker vysmßl, ale pro na╣e ·Φely toto zjednodu╣enφ staΦφ)). Podporuje tzv. nßst∞nky, kterΘ fungujφ asi jako news, ale pouze lokßln∞. Je velice dob°e roz╣i°iteln², umo╛≥uje u╛ivatelskou definici menu, tφm pßdem takΘ p°eklad do jin²ch jazyk∙, u╛ivatel si definuje vlastnφ tabulky pro p°eklad mezi znakovou sadou svΘho poΦφtaΦe a ISO znakov²mi sadami, pou╛φvan²mi pro transport po╣ty po sφti. V souΦasnΘ dob∞ jsou k dispozici kompletn∞ ΦeskΘ p°eklady jak menu, tak nßpov∞dy. Pmail je k dispozici ve verzφch pro DOS, Windows, Windows 95/NT a Macintosh. Obrovskou v²hodou je identick² formßt pou╛φvan²ch soubor∙, tak╛e si m∙╛ete po╣tu Φφst souΦasn∞ pod v╣emi zmφn∞n²mi operaΦnφmi systΘmy s v²hradou, ╛e verze pro Macintosh nenφ lokalizovanß a asi v dohlednΘ dob∞ ani nebude. Vyrovnß se i s tφm, ╛e je spu╣t∞n vφcekrßt na vφce stanicφch v sφti pod stejn²m u╛ivatelem. Nenφ ale mo╛nΘ ze dvou poΦφtaΦ∙ modifikovat stejnou slo╛ku, kam se po╣ta uklßdß, to ale obvykle p°φli╣ nevadφ, proto╛e novou po╣tu lze Φφst bez omezenφ.

Logika jeho prßce je velmi prostß a dob°e zdokumentovanß. M∞jme u╛ivatele A, u╛ivatel A mß pod Novellem Φφslo AN, kterΘ je mu p°id∞leno p°i vytvo°enφ ·Φtu na serveru. Tφmto Φφslem je u╛ivatel identifikovßn v bindery databßzi. Na disku, kter² se obvykle jmenuje SYS: existuje adresß° \MAIL\AN, kter² mß u╛ivatel sßm pro sebe. Tam se uklßdß ve╣kerß p°ichßzejφcφ po╣ta, ka╛dß zprßva do jednoho souboru, kter² se jmenuje n∞jak²m nßhodn²m Φφslem (podle data, hodiny a v²sledku fce random()). Tomuto souboru je p°id∞lena p°φpona .cnm. Pmail po startu hledß v╣echny souboru *.cnm a zobrazφ je. Cnm soubory obsahujφ Φistou mailovou zprßvu ve formßtu podle RFC 822 a navazujφcφch norem (MIME a pod.). U╛ivatel si dopisy potom p°esouvß do slo╛ek podle svΘ volby, ve slo╛ce je ji╛ vφce dopis∙ v jednou souboru, nebo m∙╛e vyu╛φt slu╛eb automatickΘho filtrovßnφ a p°esouvat dopisy do jednotliv²ch slo╛ek p°i otev°enφ novΘ po╣ty pomocφ pravidel, kterß si sßm nadefinuje. Verze pro Windows navφc umo╛≥uje aplikovat filtrovacφ pravidla na odesφlanΘ dopisy nebo na jednotlivΘ slo╛ky. TakΘ p°i odesφlßnφ lze na dopis takΘ aplikovat pravidla, kterß rozhodnou o osudu zprßvy. Pokud je zprßva lokßlnφ, Pegasus mail zjistφ pro jmΘno adresßta jeho Φφslo a ulo╛φ mu zprßvu do jeho adresß°e \MAIL\Φφslo. Pokud zprßva splnφ n∞jakΘ jinΘ filtrovacφ pravidlo, adresa t°eba zaΦφnß FAX: je nap°. spu╣t∞n externφ program. Pokud je vyhodnocena jako Internetovß, je ulo╛ena do p°edem vybranΘho adresß°e kde je zpracovßna typicky dal╣φm Harrisov²m programem - Mercurym, kter² zajistφ doruΦenφ. Toto chovßnφ je implicitnφ, ale dß se zm∞nit, t°eba p°i instalaci na server Windows NT se mφsto Φφsel pou╛φvajφ p°φmo jmΘna u╛ivatel∙.

Co z p°edchozφho vypl²vß pro nßs. Je z°ejmΘ, ╛e by nebylo slo╛itΘ do╣lou po╣tu uklßdat do adresß°e MAIL a odesφlanou vyzvedßvat z adresß°e urΦenΘho pro Mercuryho prost°edky Linuxu. U╛ivatel∙m by to p°ineslo "svobodu" lokßlnφho zpracovßnφ po╣ty, snadnΘ uklßdßnφ p°φloh dopis∙, rychle startujφcφ program, nepot°ebujφcφ slu╛by Φasto problematickΘho telnetu a bezproblΘmovou transparentnφ podporu Φe╣tiny. To samoz°ejm∞ nemohlo nez∙stat nepov╣imnuto a tak bych vßs rßd seznßmil s °e╣enφm, kterΘ pou╛il Milan Ker╣lßger. V²hodou je i to, ╛e budete moci pou╛φt Linux i na mnoho dal╣φch funkcφ, pro kter² byste jinak pot°ebovali dal╣φ stroj.

Budete pot°ebovat emulßtor slu╛eb serveru Novell Netware, kter² se pod Linuxem jmenuje Mars_nwe. Dßle samoz°ejm∞ fungujφcφ IPX na stanicφch a Pegasus mail. Mars na Linuxu asi mßte, je souΦßstφ b∞╛n²ch distribucφ, jak se instaluje IPX na stanice je popsßno v dokumentaci Marsu.

Pegasus mail pro DOS (spolu s pconfig.exe) najdeme na URL: http://risc.ua.edu/pub/network/pegasus/pmail340.zip

DoporuΦuji v╣ak pou╛φvat spustiteln² soubor z poslednφ preview, podle na╣i zku╣enostφ je dostateΦn∞ stabilnφ a spolehliv²: ftp://risc.ua.edu/pegasus-previews/pmdos_pv.zip

Instalace Pmailu spoΦφvß v rozbalenφ do adresß°e, kter² si vyberete. Potom nastavφte spu╣t∞nφm programu pconfig.exe cesty k adresß°i pro po╣tu, jmΘno serveru a podobn∞, tato Φßst je popsßna v konfiguraci serveru. Spustφte program pmail.exe a kouknete se jak funguje. P°i tom vznikne v po╣tovnφm adresß°i soubor pmail.ini, ten si prohlΘdnete, nastavφte konfiguraΦnφ volby podle vlastnφ ·vahy, p°edev╣φm ale nastavφte jako k≤dovßnφ mφsto ISO-8859-1 ISO-8852-2. Potom soubor okopφrujete pod nßzvem pmdflts.ini do adresß°e, kde je ulo╛en pmail.exe a sma╛ete nepou╛itΘ konfiguraΦnφ parametry. Podle tΘto ╣ablony se budou zaklßdat konfigurace u╛ivatel∙. Pro korektnφ funkci Φe╣tiny bude je╣t∞ pot°eba stßhnout Φeskou podporu ze strßnek pana Ji°φho Kuchty na http://www.fee.vutbr.cz/~kuchta/pmail nebo ze stejnΘho adresß°e odkud jste stßhli zßkladnφ instalaci pmailu. Instalace popsßna tamtΘ╛. Tφm mßme pmail funkΦnφ a dßme se do serveru.

Na serveru je konfigurace nßsledujφcφ, Pmail umφ odchozφ po╣tu sm∞rovat do tiskovΘ fronty nebo do sdφlenΘho adresß°e. Pro na╣i pot°ebu je v²hodn² sdφlen² adresß°, proto╛e do n∞j Pegasus odchozφ dopisy jednodu╣e umφstφ jako soubory, kterΘ m∙╛eme snadno zpracovßvat skriptem. Informace o umφst∞nφ tohoto adresß°e je ulo╛ena v bindery databßzi a tak se nemusφme starat o jednotlivΘ konfigurace pro ka╛dΘho u╛ivatele zvlß╣╗. K jejφmu nastavenφ slou╛φ program pconfig.exe, kter² je souΦßstφ distribuce Pegasus mailu. Toto nastavenφ respektujφ ob∞ verze Pegasa (DOSovß i pro Windows). Jako SUPERVISOR (ekvivalent roota na serveru Novell) spustφme pconfig.exe a nastavφme v menu: "SMTP Internet mail Interface:"

 Spool interface?:   Y
 Output path:        SYS:MAIL\SMTP
 Enabled?:           Y
 Preferred?:         N
 Use always?:        N
 This server's name: server.domena.cz
 Our time zone:      +0100 MET
 Organization:       N∞jakΘ jmΘno na╣φ organizace

Umφst∞nφ spool adresß°e je prakticky libovolnΘ, pokud ho chceme skr²t, nenφ ╣patnΘ ho umφstit jako klasick² mailov² adresß° do SYS:MAIL. U╛ivatele pot°ebujφ do tohoto adresß°e pouze prßvo C (Create), co╛ je v LinuxovΘm prost°edφ drwx-wx-wx. Polo╛ka "This server's name" urΦuje, co je p°idßno za jmΘno a zavinßΦ v adrese odesφlatele. M∙╛e to b²t konkrΘtnφ jmΘno stroje nebo jen domΘna - zßle╛φ na konfiguraci na╣eho po╣tovnφho systΘmu. ╚asovß z≤na je ponechßna na nßs. Uvedenß hodnota je star╣φ, poslednφ dobou se setkßvßm se zkratkou CEST, ale jist∞ si vyberete formßt dle vlastnφ ·vahy. Mezi letnφ a zimnφ Φasovou z≤nou musφte p°epφnat "ruΦn∞". JmΘno organizace je volitelnΘ a bude takΘ p°idßno do hlaviΦek odesφlan²ch dopis∙.

M∞l bych se takΘ zmφnit o bezpeΦnosti. Obvyklß situace je takovß, ╛e v╣ichni u╛ivatelΘ majφ prßvo zßpisu do po╣tovnφch adresß°∙ v╣ech ostatnφch u╛ivatel∙. To nenφ ╣╗astnΘ °e╣enφ, zvlß╣t∞ pokud dbßme na bezpeΦnost. Umo╛≥uje toti╛ krom∞ p°φmΘho doruΦenφ dopisu (jednoduchΘ vytvo°enφ *.cnm souboru v adresßtov∞ mailovΘm adresß°i) takΘ podvrhnout komukoliv jak²koliv soubor, kter² u╛ivatel je╣t∞ v po╣tovnφm adresß°i nemß. Nemusφm zd∙raz≥ovat, jak to m∙╛e b²t nep°φjemnΘ. ╪e╣enφm m∙╛e b²t odebrßnφ tohoto prßva a ponechßnφ jedinΘho p°φstupnΘho adresß°e pro v╣echny u╛ivatele - spool adresß°e pro odchozφ dopisy. Pak je mo╛nΘ doruΦit v╣echny dopisy jen p°es externφ po╣tovnφ systΘm (nß╣ script nebo Mercury) a odstranφme tak zmφn∞nΘ potencißlnφ nebezpeΦφ. V tomto p°φpad∞ je v╣ak nutnΘ nastavit v pconfig.exe volbu "Use always?" na "Y", aby se Pegasus nepokou╣el mφstnφ po╣tu doruΦovat p°φmo, ale pou╛il spool adresß°.

Celß finta, jak po╣tu p°ijφmat a odesφlat, je realizovßna dv∞ma scripty. Jist∞ existujφ i elegantn∞j╣φ °e╣enφ p°es procmail a podobn∞, ale tohle je vyzkou╣enΘ a funkΦnφ.

ZaΦneme tφm jednodu╣╣φm scriptem, kter² slou╛φ na odesφlßnφ po╣ty do internetu. Je na v²pise Script pro odesφlßnφ po╣ty do Internetu.

#!/bin/sh

SMTP_DIR="/home/nwserv.sys/mail/smtp"

for file in $SMTP_DIR/*
do
  if [ -e $file ]; then
    FROM=`grep "^From:" $file | head -1 | sed -e 's/.*<//' -e
    's/>.*//'` TO=`fromdos < $file | sed -n '2,/^$/p'` echo -n " 
    $FROM -> $TO ..." fromdos < $file | sed '1,/^$/d' | sendmail $TO
    echo " done." rm $file
  fi
done

V²pis Φ. 1: Script pro odesφlßnφ po╣ty do Internetu

A co vlastn∞ d∞lß? Musφ zajistit p°edßnφ po╣ty ze sdφlenΘho adresß°e do fronty sendmailu. Pmail odesφlanou po╣tu uklßdß do adresß°e, kterΘmu se v pconfigu °φkß spool directory, v na╣em scriptu je to SMTP_DIR a skript z n∞j vybere v╣echny soubory a v nich nalezne polo╛ku From: a To: (tyto polo╛ky jsou v souboru dvakrßt, jednou pro Mercuryho a podruhΘ v t∞le zprßvy, script vybφrß prvnφ variantu, druhß nemusφ b²t nap°. u BCC: validnφ, z t∞la zprßvy je vybφrßno From: ale jen pro diagnostickΘ ·Φely). PotΘ je vyvolßn program sendmail, kter² po╣tu ulo╛φ do fronty.

A te∩ slo╛it∞j╣φ script T°φd∞nφ po╣ty.

#!/usr/bin/perl

$mail_dir  = "/home/nwserv.sys/mail/user";
$spoll_dir = "/var/spool/mail";

sub cnm_from_file {
  $number = 0;
  $close  = 0;
  while ( $line = <VSTUP> ) {
    chop ($line);
    if ( $line =  /^From / ) {
      while ( -e "${mail_dir}/${user_name}/${number}.cnm" ) {
        $number++;
      }
      if ( $close != 0 ) {
        close (VYSTUP);
      } else {
        $close = 1;
      }
      if (! open (VYSTUP, ">${mail_dir}/${user_name}/${number}.cnm") )
      {
        print "nemohu zapsat do souboru
        ${mail_dir}/${user_name}/${number}.cnm\n"; return 1;
      } else {
        print "  vytvarim ${user_name}/${number}.cnm ...\n";
      }
    }
    print VYSTUP "$line\r\n";
  }
  close (VYSTUP);
  return 0;
}

opendir(SPOOL, $spoll_dir) || \
   die "nemohu cist z adresare $spoll_dir";
while ( $user_name = readdir(SPOOL) ) {
  if ( -f "${spoll_dir}/${user_name}" && -s
  "${spoll_dir}/${user_name}") {
    rename ("${spoll_dir}/${user_name}",
    "${spoll_dir}/${user_name}.lock") || \
         die "nemohu prejmenovat soubor ${spoll_dir}/${user_name}";
    open (VSTUP, "${spoll_dir}/${user_name}.lock") || \
         die "nemohu otevrit soubor ${spoll_dir}/${user_name}.lock";
    if ( &cnm_from_file ) {
      close (VSTUP);
      rename ("${spoll_dir}/${user_name}.lock",
      "${spoll_dir}/${user_name}");
    } else {
      close (VSTUP);
      unlink ("${spoll_dir}/${user_name}.lock") || \
           die "nemohu smazat soubor ${spoll_dir}/${user_name}.lock";
    }
  }
}
exit 0;

V²pis Φ. 2: T°φd∞nφ po╣ty

Ten funguje takto:

Vybφrß po╣tu z adresß°∙ /var/spool/mail/jmeno a rozlßme ji na jednotlivΘ soubory. Z t∞ch vyrobφ *.cnm soubory, kterΘ ulo╛φ do po╣tovnφho adresß°e u╛ivatele. Volφ trochu odli╣n² postup ne╛ Pmail, vytvß°φ soubory 0.cnm, 1.cnm a pokud ji╛ takov² existuje, inkrementuje nßzev, dokud se netrefφ do volnΘ pozice. Mail v unixovΘm mailboxu zaΦφnß "From jmΘno" od zaΦßtku °ßdku. (Nenφ tam dvojteΦka.) Aby se nemohlo stßt, ╛e dopis obsahujφcφ od zaΦßtku °ßdku From bude rozd∞len, je p°ed ulo╛enφm do mailboxu From quotovßno >From , tzv. vrßnu je tedy pot°eba odstranit p°ed ulo╛enφm do cnm souboru. Script se nezab²vß zamykßnφm mailboxu a jednodu╣e frontu p°ejmenuje na *.lock. Po zpracovßnφ je po╣ta na linuxu smazßna. Script vyu╛φvß toho, ╛e Mars zaklßdß v po╣tovnφm adresß°i adresß° user s adresß°i dle jmen u╛ivatel∙ a linkuje je oproti adresß°∙m MAIL\cislo_uzivatele. Dal╣φm p°edpokladem ·sp∞╣nΘho b∞hu je, ╛e u╛ivatelΘ majφ na Novellu a v Linuxu stejnß jmΘna, a ╛e vytvo°φme link root->supervisor, nebo budeme po╣tu pro roota forwardovat jinΘmu u╛ivateli (klasick²m souborem /.forward). Vytvo°enφ link∙ povolφme marsu v sekci 16, konfiguraΦnφho souboru Marsu, kde nastavφme hodnotu bu∩ 1 nebo 2. ╚eskß dokumenace k Marsu je na http://www.spsselib.hiedu.cz/homedirs/~kerslage/manuals/linux/.

A te∩ ji╛ t°e╣niΦka na dortu, jak to funguje celΘ dohromady. Nejd°φve spustφme prvnφ script. Ten nßm p°edß po╣tu od u╛ivatel∙ do fronty, potom nahodφme sendmail, UUCP, ETRN Φi co vlastn∞ pou╛φvßme a po╣tu ode╣leme a p°ijmeme. A do t°etice spustφme druh² script, ten nßm po╣tu rozd∞lφ mezi jednotlivΘ u╛ivatele. Prvnφ script nenφ ╣patnΘ pou╣t∞t pravideln∞ a Φasto z cronu. Pmail toti╛ i lokßlnφ po╣tu, pokud obsahuje @ uklßdß do fronty pro odesφlßnφ do Internetu.

A mß to n∞jakΘ chyby? Jist∞, nemohu tvrdit, ╛e Pmail je naprosto bezchybn² produkt, ale p°i b∞╛nΘm pou╛φvßnφ jich moc nenajdete. Pmailu pro Windows t°eba nechutnajφ n∞kterΘ specißlnφ p°φpady MIME k≤dovßnφ, t°eba BASE64 v hlaviΦkßch, zato ale narozdφl od Netscape mailu umφ odesφlat hlaviΦky s diakritikou.

Za urΦitou zßvadu prezentovanΘho °e╣enφ lze pova╛ovat to, ╛e k po╣t∞ nenφ nadßle mo╛nΘ p°istupovat p°es POP3 a IMAP4 protokol. O podpo°e pro POP3 se uva╛uje, o IMAPu zatφm ne, ale je zde samoz°ejm∞ mo╛nost, ╛e tento Φlßnek p°ilßkß n∞koho, kdo by m∞l zßjem s nßmi °e╣enφ dßle rozvφjet a zdokonalovat. Kdo vφ, t°eba se jednou stane integrßlnφ souΦßstφ MARS NWE. Pokud mßte pocit, ╛e mluvφm prßv∞ o Vßs, urΦit∞ se nßm ozv∞te. *


- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka -