_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/sethostent - paruošti naudojimui hosts failą

  • sethostent STAYOPEN

    Šios paprogramės atlieka tokia pačias funkcijas kaip ir jų analogai sisteminėje bibliotekoje. Sąrašo kontekste, gražinamos reikšmės iš įvairių get paprogramių yra tokios:

        ($name,$passwd,$uid,$gid,
           $quota,$comment,$gcos,$dir,$shell,$expire) = getpw*
        ($name,$passwd,$gid,$members) = getgr*
        ($name,$aliases,$addrtype,$length,@addrs) = gethost*
        ($name,$aliases,$addrtype,$net) = getnet*
        ($name,$aliases,$proto) = getproto*
        ($name,$aliases,$port,$proto) = getserv*

    (Jei elementas neegzistuoja, gaunamas tuščias sąrašas.)

    Tiksli $gcos lauko reikšmė keičiasi, bet dažniausiai joje yra tikras vartotojo vardas (ne loginas) ir kita informacija, priklausanti vartotojui. Visgi, reikia saugotis, nes daugelyje sistemų vartotojai gali keisti savo informaciją, tad ji gali būti netiksli, o tuo pačiu ir $gcos yra neteisingas(daugiau perlsec). $passwd ir $shell, vartotojo užšifruotas slaptažodis ir prisijungimo shell'as, taip pat yra "užteršti" dėl tos pačios priežasties.

    Skaliariniame kontekste, gaunamas vardas, nebent funkcijoje buvo ieškoma informacijos pagal vardą. Esant šiuo atveju, gaunama visai kita reikšmė. (Jei reikšmė neegzistuoja, gaunamas neapibrėžtumas.) Pvz:

        $uid   = getpwnam($name);
        $name  = getpwuid($num);
        $name  = getpwent();
        $gid   = getgrnam($name);
        $name  = getgrgid($num);
        $name  = getgrent();
        #ir t.t.

    getpw*() laukai $quota, $comment ir $expire yra specialūs atvejai, turint omeny tai, kad daugelyje sistemų jie nepalaikomi. Jei $quota yra nepalaikomas, tai yra tuščias skaliaras. Jei palaikomas, jame dažniausiai užšifruoti administratoriaus komentarai apie vartotoją. Kai kuriose sistemose $quota laukas gali būti $change ar $age, laukai, kurie siejami su slaptažodžio senėjimu. Kai kuriose sistemose $comment laukas gali būti $class. $expire laukas, jei toks yra, užkoduoja account'o ar slaptažodžio galiojimo laiką. Dėl galimybės panaudoti bei tikros reikšmės sistemoje, reikėtų paskaityti getpwnam(3) dokumentaciją ir savo pwd.h failą. Iš Perl taip pat galima rasti, ką reiškia $quota ir $comment laukai bei ar yra $expire laukas, naudojant Config modulį ir reikšmes d_pwquota , d_pwage , d_pwchange , d_pwcomment ir d_pwexpire . Shadow password failai yra palaikomi tik jei jie yra įgyvendinti intuityvioje formoje, jog iškviečiant C bibliotekos paprogrames, jos pasiima shadow versijas, esant atitinkamoms privilegijoms ar egzistuojant shadow(3) funkcijomss, kaip yra V Sistemose (įskaitant Solaris ir Linux.) Šios sistemos, kuriose realizuota shadow password galimybė, vargu ar yra palaikomos.

    $members reikšmė, gražinta getgr*() yra tarpais atskirtas grupių narių prisijungimo vardų sarašas.

    Kas dėl gethost*() funkcijų, jei h_errno kintamasis yra palaikomas C, jis bus gražintas per$? jei funkcijos iškvietimas nepavyksta. @addrs reikšmė, gražinta įvykus sėkmingam kreipimuisi yra neapdorotų adresų, gražintų atitinkamos sistemos bibliotekos kreipimosi sąrašas. Interneto domene, kiekvienas adresas yra keturių baitų ilgio ir juos galima išpakuot maždaug taip:

        ($a,$b,$c,$d) = unpack('C4',$addr[0]);

    Socket'ų biblioteką tai šiek tiek palengvina:

        use Socket;
        $iaddr = inet_aton("127.1"); # ar koks bebūtų adresas
        $name  = gethostbyaddr($iaddr, AF_INET);
        # arba kitu būdu
        $straddr = inet_ntoa($iaddr);

    Jei pavargote besistengdami prisiminti, kruis elementas iš gražinamųjų sarašo, kurią reikšmę gražiną, pagal-vardą (by-name) sąsaja yra standartiniuose moduliuose: File::stat, Net::hostent, Net::netent, Net::protoent, Net::servent, Time::gmtime, Time::localtime ir User::grent. Šios reikšmės perrašo normalius standartus, vietoj jų pateikdamas gražinamus objektus su atitinkamais kiekvieno lauko pavadinimais. Pvz.:

       use File::stat;
       use User::pwent;
       $is_his = (stat($filename)->uid == pwent($whoever)->uid);

    Net jei atrodo tarsi jie yra tapatūs metodų kvietimams (uid), taip nėra, nes File::stat objektas skiriasi nuo User::pwent objekto.

algirdas@perl.lt 2005.04.11 - $dabar