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


--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem