getpwnam(3) - perldoc - phpman

Look up a command

 

Markdown Format | JSON API | MCP Server Tool


    getpwnam NAME
    getgrnam NAME
    gethostbyname NAME
    getnetbyname NAME
    getprotobyname NAME
    getpwuid UID
    getgrgid GID
    getservbyname NAME,PROTO
    gethostbyaddr ADDR,ADDRTYPE
    getnetbyaddr ADDR,ADDRTYPE
    getprotobynumber NUMBER
    getservbyport PORT,PROTO
    getpwent
    getgrent
    gethostent
    getnetent
    getprotoent
    getservent
    setpwent
    setgrent
    sethostent STAYOPEN
    setnetent STAYOPEN
    setprotoent STAYOPEN
    setservent STAYOPEN
    endpwent
    endgrent
    endhostent
    endnetent
    endprotoent
    endservent
            These routines are the same as their counterparts in the system
            C library. In list context, the return values from the various
            get routines are as follows:

             #    0        1          2           3         4
             my ( $name,   $passwd,   $gid,       $members  ) = getgr*
             my ( $name,   $aliases,  $addrtype,  $net      ) = getnet*
             my ( $name,   $aliases,  $port,      $proto    ) = getserv*
             my ( $name,   $aliases,  $proto                ) = getproto*
             my ( $name,   $aliases,  $addrtype,  $length,  @addrs ) = gethost*
             my ( $name,   $passwd,   $uid,       $gid,     $quota,
                $comment,  $gcos,     $dir,       $shell,   $expire ) = getpw*
             #    5        6          7           8         9

            (If the entry doesn't exist, the return value is a single
            meaningless true value.)

            The exact meaning of the $gcos field varies but it usually
            contains the real name of the user (as opposed to the login
            name) and other information pertaining to the user. Beware,
            however, that in many system users are able to change this
            information and therefore it cannot be trusted and therefore the
            $gcos is tainted (see perlsec). The $passwd and $shell, user's
            encrypted password and login shell, are also tainted, for the
            same reason.

            In scalar context, you get the name, unless the function was a
            lookup by name, in which case you get the other thing, whatever
            it is. (If the entry doesn't exist you get the undefined value.)
            For example:

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

            In *getpw*()* the fields $quota, $comment, and $expire are
            special in that they are unsupported on many systems. If the
            $quota is unsupported, it is an empty scalar. If it is
            supported, it usually encodes the disk quota. If the $comment
            field is unsupported, it is an empty scalar. If it is supported
            it usually encodes some administrative comment about the user.
            In some systems the $quota field may be $change or $age, fields
            that have to do with password aging. In some systems the
            $comment field may be $class. The $expire field, if present,
            encodes the expiration period of the account or the password.
            For the availability and the exact meaning of these fields in
            your system, please consult getpwnam(3) and your system's pwd.h
            file. You can also find out from within Perl what your $quota
            and $comment fields mean and whether you have the $expire field
            by using the "Config" module and the values "d_pwquota",
            "d_pwage", "d_pwchange", "d_pwcomment", and "d_pwexpire". Shadow
            password files are supported only if your vendor has implemented
            them in the intuitive fashion that calling the regular C library
            routines gets the shadow versions if you're running under
            privilege or if there exists the shadow(3) functions as found in
            System V (this includes Solaris and Linux). Those systems that
            implement a proprietary shadow password facility are unlikely to
            be supported.

            The $members value returned by *getgr*()* is a space-separated
            list of the login names of the members of the group.

            For the *gethost*()* functions, if the "h_errno" variable is
            supported in C, it will be returned to you via $? if the
            function call fails. The @addrs value returned by a successful
            call is a list of raw addresses returned by the corresponding
            library call. In the Internet domain, each address is four bytes
            long; you can unpack it by saying something like:

                my ($w,$x,$y,$z) = unpack('W4',$addr[0]);

            The Socket library makes this slightly easier:

                use Socket;
                my $iaddr = inet_aton("127.1"); # or whatever address
                my $name  = gethostbyaddr($iaddr, AF_INET);

                # or going the other way
                my $straddr = inet_ntoa($iaddr);

            In the opposite way, to resolve a hostname to the IP address you
            can write this:

                use Socket;
                my $packed_ip = gethostbyname("www.perl.org");
                my $ip_address;
                if (defined $packed_ip) {
                    $ip_address = inet_ntoa($packed_ip);
                }

            Make sure "gethostbyname" is called in SCALAR context and that
            its return value is checked for definedness.

            The "getprotobynumber" function, even though it only takes one
            argument, has the precedence of a list operator, so beware:

                getprotobynumber $number eq 'icmp'   # WRONG
                getprotobynumber($number eq 'icmp')  # actually means this
                getprotobynumber($number) eq 'icmp'  # better this way

            If you get tired of remembering which element of the return list
            contains which return value, by-name interfaces are provided in
            standard modules: "File::stat", "Net::hostent", "Net::netent",
            "Net::protoent", "Net::servent", "Time::gmtime",
            "Time::localtime", and "User::grent". These override the normal
            built-ins, supplying versions that return objects with the
            appropriate names for each field. For example:

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

            Even though it looks as though they're the same method calls
            (uid), they aren't, because a "File::stat" object is different
            from a "User::pwent" object.

            Many of these functions are not safe in a multi-threaded
            environment where more than one thread can be using them. In
            particular, functions like "getpwent()" iterate per-process and
            not per-thread, so if two threads are simultaneously iterating,
            neither will get all the records.

            Some systems have thread-safe versions of some of the functions,
            such as "getpwnam_r()" instead of "getpwnam()". There, Perl
            automatically and invisibly substitutes the thread-safe version,
            without notice. This means that code that safely runs on some
            systems can fail on others that lack the thread-safe versions.

            Portability issues: "getpwnam" in perlport to "endservent" in
            perlport.


Generated by phpMan Author: Che Dong Under GNU General Public License
2026-06-02 20:35 @216.73.216.151 CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 TransitionalValid CSS!

^_back to top