_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/endpwent - gražina, naudojant passwd failą
  • endpwent

    Šios paprogramės atlieka tokias pačias funkcijas kaip ir jų kopijos sistemų bibliotekoje. Sarašo kontekste, gražinamos reikšmės iš įvairių gražinančių paprogramių yra:

        ($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 įvestis neegzistuoja - gaunamas tuščias sarašas.)

    Tiksli $gcos lauko reikšmė kinta, bet dažniausia ji talpina tikra vartotojo varda (ne prisijungimo) bei kita informacija, priklausančia jam. Visgi neverta aklai pasitikėti $gcos, nes daugumoje sistemų vartotojai gali pasikeisti savo infomacija, tad ji gali būti nepatikima (žr. perlsec). $passwd ir $shell, vartotojo užkoduotas slaptažodis bei prisijungimo šelas, yra nepatikimi dėl tos pačios priežasties.

    Skaliariniame kontekste, gražinamas vardas, nebent funkcijoje buvo ieškoma pagal varda, tuo atveju gaunami kitokie rezultatai. (Jei įvestis 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 specialūs atvejai, turint omeny, kad daugumoje sistemų jie nepalaikomi. Jei nepalaikomas $quota - jo reikšmė - tuščias skaliaras. Jei palaikomas, jis dažniausia užšifruoja disko norma. Jei $comment laukas nepalaikomas, analogiškas tuščias skaliaras. Jei palaikomas jis dažniausia užkoduoja administruojama komentara apie vartotoja. Kai kuriose sistemose laukas $quota gali būti $change ar $age, laukai, susijæ su slaptažodžio amžiumi. Kai kuriose sistemose laukas $comment gali būti $class. $expire laukas, jei egzistuoja, saugo account'o ar slaptažodžio galiojimo perioda. Dėl egzistavimo ir tikslios reikšmės sistemoje, reikėtų pasikonsultuoti su getpwnam(3) dokumentacija ir pwd.h failu. Taip pat, ka reiškia $quota ir $comment, ir ar yra $expire laukai galima sužinoti iš Perlo, pasinaudojant Config moduliu ir d_pwquota , d_pwage , d_pwchange , d_pwcomment bei d_pwexpire reikšmėmis. Slaptažodžių shadow failai yra palaikomi tik tuo atveju, jei gamintojas intuityviai įdiegė, kad iškviečiant C bibliotekų paprogrames gaunamos shadow versijos, turint rpiviletgijų, ar egzistuojant shadow(3) funkcijoms kaip System V (Solaris, Linux...) Tos sistemos, kuriose įdiegtas savarankiškas shadow slaptažodžių valdymas, dažniausiai nėra palaikomos.

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

    gethost*() funkcijoms, jei h_errno kintamasis palaikomas C, jsi bus gražinamas per $?, jei nepavyksta funkcijos kvietimas. @addrs reikšmė, gražinama sėkmingo kvietimo yra plikų adresų, gražintų atitinkamos sitemos bibliotekos kvietimo, sarašas. Interneto domenuose, kiekvienas adresas yra keturių baitų ilgio ir galima juos išpakuoti parašant:

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

    Socket biblioteka šitai truputėlį palengvina:

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

    Jei pavargsti beprisimininėdamas kuris gražinamojo sarašo elementas kuria reikšmæ turi, interfeisai yra standartiniuose moduliuose: File::stat, Net::hostent, Net::netent, Net::protoent, Net::servent, Time::gmtime, Time::localtime ir User::grent. Tai perrašo normalius built-inus, pateikiant versijas, kurios gražina objektus su atitinkamais vardais kiekvienam laukui. Pvz:

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

    Net jei atrodo, kad tai tie patys metodiniai iškvietimai (uid), taip nėra, nes File::stat objektas skiriasi nuo User::pwent objekto.

algirdas@perl.lt 2005.04.11 - $dabar