Kontrola bezicich sluzeb (watchmen)
Dan Lukes
dan at obluda.cz
Thu Sep 9 18:11:57 CEST 2010
On 09/09/10 17:28, Miroslav Prýmek:
>
> On 9.9.2010, at 16:35, Dan Lukes wrote:
>> No, jedna cesta je "vepsat" do onoho programu funkcionalitu getty - to
>> znamena vzit posledni parametr, zavolat nejake ty chown() a chmmod() - a
>> hlavne - revoke() a mozna jeste par dalsich veci - to by se nejlepe
>> ukradlo ze samotneho getty.
>>
>> Nenech se zmast jeho rozsahlosti - velkou vetsinu jeho funkcnosti ty
>> nepotrebujes, bylo by to jen par radek.
>
> Aha, ja jsem myslel, ze kolem toho "pripojeni na terminal" je nejaka magie
> podobne jako u emulatoru terminalu... Ze proste getty dela neco tajemnyho :)
To samozrejme getty dela, nebo spis - muze delat - jenze to je docela
obycejne proto, ze pro nej je terminalem nejen ta rozsirena PC
klavesnice s VGA monitorem, ale take prehrsel nejruznejsich terminalu
pripojenych seriovou linkou. Nekdy se znamou rychlosti, jindy ma
terminal priprietarni zpusob jak rychlost "autodetekovat". A aby to
jeste bylo komplikovanejsi - terminal je pripojeny nikoliv nutne lokalne.
getty je navrzeno i na variantu, ze na tom seriaku nas pripojeny modem a
na ten odnekud zavolas - a tam nekde mas (zase modemem) teprve pripojeny
ten terminal. A ten modem musi getty spravne inicializovat a obsluhovat.
A aby toho jeste nebylo dost - getty pocita, ze takhle na dalku na nej
nikoliv nutne mluvis textove - muzes do toho modemu zacit piskat PPP - a
i na to umi zareagovat.
Nahlednuto z tohohle uhlu je prekvapive jak male ty zdrojaky jsou.
Jo, prapredci (getty je, z velke casti, jeden z nejstarsich pudovnich
kodu, ktere muzes ve zdrojacich FreeBSD najit) nebyli zadni pitomci.
Jenze - pro tvoje ucely z toho nepotrebujes prakticky nic. Nemam to chut
ted pokusne psat, ale bude tam neco jako, ze vezmes jmeno zarizeni na
kterem bezis (argv[2]), upravis u nej vlastnika a prava (chmod/chown)
nasilim uzavres vsechny descriptory, kter eby na nej nekdo mohl mit
otevrene (revoke() - to kvuli bezpecnosti), otevres ho tak abys ziskal
tri standardni descriptory a vyrobis nejmene environmentovou promennou
TERM i kdyz mozna by jich bezny program uvital trochu vic (man 7
environ). Nakonec zavolat tcsetattr() (u fixniho znameho typu terminalu
budou i poskytovane parametry konstanty) a pak uz muzes pokracovat
"normalnim kodem" tak, jak byl v programu puvodne.
Dan
More information about the Users-l
mailing list