Ubic
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Ubic/Credentials/OS/MacOSX.pm view on Meta::CPAN
package Ubic::Credentials::OS::MacOSX;
$Ubic::Credentials::OS::MacOSX::VERSION = '1.60';
use strict;
use warnings;
use parent qw(Ubic::Credentials);
# ABSTRACT: MacOSX-specific credentials implementation
use List::MoreUtils qw(uniq);
use Params::Validate qw(:all);
use Carp;
sub new {
my $class = shift;
my $params = validate(@_, {
user => 0,
group => 0,
service => { optional => 1, isa => 'Ubic::Service' },
});
my $self = {};
if (defined $params->{user}) {
if (defined $params->{service}) {
croak "Only one of 'user' and 'service' parameters should be specified";
}
$self->{user} = $params->{user};
$self->{group} = $params->{group} if defined $params->{group};
if (ref $self->{group}) {
$self->{group} = $self->{group}[0];
}
}
elsif (defined $params->{service}) {
$self->{user} = $params->{service}->user;
my @group = $params->{service}->group;
$self->{group} = $group[0] if @group;
}
else {
$self->{real_user_id} = $<;
$self->{effective_user_id} = $>;
($self->{real_group_id}) = $( =~ /^(\d+)/;
($self->{effective_group_id}) = $) =~ /^(\d+)/;
# TODO - derive user from real_user_id when user is not specified (or from effective_user_id?!)
}
return bless $self => $class;
}
sub user {
my $self = shift;
unless (defined $self->{user}) {
$self->{user} = getpwuid($>);
}
return $self->{user};
}
sub group {
my $self = shift;
unless (defined $self->{group}) {
$self->_user2group;
}
return $self->{group};
}
sub _user2uid {
my $self = shift;
my $user = $self->user;
my $id = scalar getpwnam($user);
unless (defined $id) {
croak "user $user not found";
}
return $id;
}
sub real_user_id {
my $self = shift;
return $self->{real_user_id} if defined $self->{real_user_id};
return $self->_user2uid;
}
sub effective_user_id {
my $self = shift;
return $self->{effective_user_id} if defined $self->{effective_user_id};
return $self->_user2uid;
}
sub _group2gid {
my $self = shift;
my $group = $self->group;
my $gid = getgrnam($group);
unless (defined $gid) {
croak "group $group not found";
}
return $gid;
}
sub real_group_id {
my $self = shift;
return $self->{real_group_id} if defined $self->{real_group_id};
return $self->_group2gid;
}
sub effective_group_id {
my $self = shift;
return $self->{effective_group_id} if defined $self->{effective_group_id};
return $self->_group2gid;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.570 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )