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.443 second using v1.01-cache-2.11-cpan-4ee56698ea0 )