User-Information

 view release on metacpan or  search on metacpan

lib/User/Information/Source/POSIX.pm  view on Meta::CPAN

use strict;
use warnings;

use Carp;
use List::Util qw(any);

use User::Information::Path;

our $VERSION = v0.04;

my %_keys_getpwuid = (
    dir     => 'filename',
    shell   => 'filename',
);
my @_keys_getpwuid = qw(name passwd uid gid quota comment gcos dir shell expire);
my @_keys_getgrgid = qw(name passwd gid members);
my @_keys_uname    = qw(sysname nodename release version machine);

# ---- Private helpers ----

sub _load_getpwuid {
    my ($base, $info, $qkey, $subroot, $uid, $root, $key) = @_;
    my @d = getpwuid($uid);

    for (my $i = 0; $i < scalar(@_keys_getpwuid); $i++) {
        if (defined($d[$i]) && length($d[$i])) {
            my $dkey = $_keys_getpwuid[$i];
            my $v = {($_keys_getpwuid{$dkey} // 'raw') => $d[$i]};

            $base->_value_add(User::Information::Path->new($subroot => $dkey), $v);
            if ($dkey eq 'name') {
                $base->_value_add(User::Information::Path->new($root => [$dkey => $key]), $v);
            } elsif ($dkey eq 'gcos') {
                my $fn = {%{$v}};
                $fn->{(keys %{$fn})[0]} =~ s/\s*,.*$//;
                $base->_value_add(User::Information::Path->new($root => [fullname => $key]), $fn);
            }
        }

lib/User/Information/Source/POSIX.pm  view on Meta::CPAN


    foreach my $type (keys %{$data}) {
        my $value = $data->{$type};
        my @value = ($value);
        my $subroot = User::Information::Path->new($root => $type);

        if ($type eq 'user' || $type eq 'real_user' || $type eq 'effective_user') {
            @value = split(/\s+/, $value);
            $value = $value[0];

            foreach my $key (@_keys_getpwuid) {
                my $path = User::Information::Path->new($subroot => $key);
                push(@info, {
                        loadpath => $subroot,
                        path => $path,
                        loader => sub { my ($base, $info, $qkey) = @_; _load_getpwuid($base, $info, $qkey, $subroot, $value, $root, $type); },
                    });
            }
            push(@info, {
                    loadpath => $subroot,
                    path => User::Information::Path->new($root => ['name' => $type]),
                    loader => sub { my ($base, $info, $qkey) = @_; _load_getpwuid($base, $info, $qkey, $subroot, $value, $root, $type); },
                });
            push(@info, {
                    loadpath => $subroot,
                    path => User::Information::Path->new($root => ['fullname' => $type]),
                    loader => sub { my ($base, $info, $qkey) = @_; _load_getpwuid($base, $info, $qkey, $subroot, $value, $root, $type); },
                });
        } elsif ($type eq 'group' || $type eq 'real_group' || $type eq 'effective_group') {
            @value = split(/\s+/, $value);
            $value = $value[0];

            foreach my $key (@_keys_getgrgid) {
                my $path = User::Information::Path->new($subroot => $key);
                push(@info, {
                        loadpath => $subroot,
                        path => $path,



( run in 0.442 second using v1.01-cache-2.11-cpan-4ee56698ea0 )