Unix-Passwd-File
view release on metacpan or search on metacpan
lib/Unix/Passwd/File.pm view on Meta::CPAN
summary => 'If true, return all fields instead of just usernames',
schema => ['bool' => {default => 0}],
},
with_field_names => {
summary => 'If false, don\'t return hash for each entry',
schema => [bool => {default=>1}],
description => <<'_',
By default, when `detail=>1`, a hashref is returned for each entry containing
field names and its values, e.g. `{user=>"titin", pass=>"x", uid=>500, ...}`.
With `with_field_names=>0`, an arrayref is returned instead: `["titin", "x",
500, ...]`.
_
},
},
};
sub list_users {
my %args = @_;
my $detail = $args{detail};
my $wfn = $args{with_field_names} // ($detail ? 1:0);
_routine(
%args,
_read_passwd => 1,
_read_shadow => $detail ? 2:0,
with_field_names => $wfn,
_after_read => sub {
my $stash = shift;
my @rows;
my $passwd = $stash->{passwd};
my $passwdh = $stash->{passwdh};
for (my $i=0; $i < @$passwd; $i++) {
if (!$detail) {
push @rows, $passwd->[$i][0];
} elsif ($wfn) {
push @rows, $passwdh->[$i];
} else {
push @rows, $passwd->[$i];
}
}
$stash->{res} = [200, "OK", \@rows];
$stash->{res}[3]{'table.fields'} = [\@passwd_field_names]
if $detail;
$stash->{exit}++;
[200];
},
);
}
$SPEC{get_user} = {
v => 1.1,
summary => 'Get user details by username or uid',
description => <<'_',
Either `user` OR `uid` must be specified.
The function is not dissimilar to Unix's `getpwnam()` or `getpwuid()`.
_
args_rels => {
'choose_one' => [qw/user uid/],
},
args => {
%common_args,
user => {
schema => 'unix::username*',
},
uid => {
schema => 'unix::uid*',
},
with_field_names => {
summary => 'If false, don\'t return hash',
schema => [bool => {default=>1}],
description => <<'_',
By default, a hashref is returned containing field names and its values, e.g.
`{user=>"titin", pass=>"x", uid=>500, ...}`. With `with_field_names=>0`, an
arrayref is returned instead: `["titin", "x", 500, ...]`.
_
},
},
};
sub get_user {
my %args = @_;
my $wfn = $args{with_field_names} // 1;
my $user = $args{user};
my $uid = $args{uid};
return [400, "Please specify user OR uid"]
unless defined($user) xor defined($uid);
_routine(
%args,
_read_passwd => 1,
_read_shadow => 2,
with_field_names => $wfn,
detail => 1,
_after_read_passwd_entry => sub {
my $stash = shift;
my @rows;
my $passwd = $stash->{passwd};
my $passwdh = $stash->{passwdh};
if (defined($user) && $passwd->[-1][0] eq $user ||
defined($uid) && $passwd->[-1][2] == $uid) {
$stash->{res} = [200,"OK", $wfn ? $passwdh->[-1]:$passwd->[-1]];
$stash->{exit}++;
}
[200];
},
_after_read => sub {
my $stash = shift;
[404, "Not found"];
},
);
}
lib/Unix/Passwd/File.pm view on Meta::CPAN
=back
Returns an enveloped result (an array).
First element (status) is an integer containing HTTP status code
(200 means OK, 4xx caller error, 5xx function error). Second element
(msg) is a string containing error message, or 'OK' if status is
200. Third element (payload) is optional, the actual result. Fourth
element (meta) is called result metadata and is optional, a hash
that contains extra information.
Return value: (any)
=head2 get_max_uid
Usage:
get_max_uid(%args) -> [status, msg, payload, meta]
Get maximum UID used.
This function is not exported by default, but exportable.
Arguments ('*' denotes required arguments):
=over 4
=item * B<etc_dir> => I<str> (default: "/etc")
Specify location of passwd files.
=back
Returns an enveloped result (an array).
First element (status) is an integer containing HTTP status code
(200 means OK, 4xx caller error, 5xx function error). Second element
(msg) is a string containing error message, or 'OK' if status is
200. Third element (payload) is optional, the actual result. Fourth
element (meta) is called result metadata and is optional, a hash
that contains extra information.
Return value: (any)
=head2 get_user
Usage:
get_user(%args) -> [status, msg, payload, meta]
Get user details by username or uid.
Either C<user> OR C<uid> must be specified.
The function is not dissimilar to Unix's C<getpwnam()> or C<getpwuid()>.
This function is not exported by default, but exportable.
Arguments ('*' denotes required arguments):
=over 4
=item * B<etc_dir> => I<str> (default: "/etc")
Specify location of passwd files.
=item * B<uid> => I<unix::uid>
=item * B<user> => I<unix::username>
=item * B<with_field_names> => I<bool> (default: 1)
If false, don't return hash.
By default, a hashref is returned containing field names and its values, e.g.
C<< {user=E<gt>"titin", pass=E<gt>"x", uid=E<gt>500, ...} >>. With C<< with_field_names=E<gt>0 >>, an
arrayref is returned instead: C<["titin", "x", 500, ...]>.
=back
Returns an enveloped result (an array).
First element (status) is an integer containing HTTP status code
(200 means OK, 4xx caller error, 5xx function error). Second element
(msg) is a string containing error message, or 'OK' if status is
200. Third element (payload) is optional, the actual result. Fourth
element (meta) is called result metadata and is optional, a hash
that contains extra information.
Return value: (any)
=head2 get_user_groups
Usage:
get_user_groups(%args) -> [status, msg, payload, meta]
Return groups which the user belongs to.
This function is not exported by default, but exportable.
Arguments ('*' denotes required arguments):
=over 4
=item * B<detail> => I<bool> (default: 0)
If true, return all fields instead of just group names.
=item * B<etc_dir> => I<str> (default: "/etc")
Specify location of passwd files.
( run in 2.264 seconds using v1.01-cache-2.11-cpan-13bb782fe5a )