Provision-Unix
view release on metacpan or search on metacpan
lib/Provision/Unix/User/Darwin.pm view on Meta::CPAN
# validate user creation
my $uid = $self->exists();
if ($uid) {
$prov->progress( num => 10, desc => 'created successfully' );
return $uid;
}
return $prov->progress(
num => 10,
desc => 'error',
err => $prov->{errors}->[-1]->{errmsg},
);
}
sub _next_uid {
# echo $[$(dscl . -list /Users uid | awk '{print $2}' | sort -n | tail -n1)+1]
}
sub _create_dscl {
my $self = shift;
my $user = $p_user->{username};
my $debug = $self->{debug};
my $dirutil = $util->find_bin( "dscl", debug => 0 );
$util->syscmd( "$dirutil . -create /users/$user",
debug => $debug,
);
$util->syscmd( "$dirutil . -createprop /users/$user uid $p_user->{uid}",
debug => $debug,
);
$util->syscmd( "$dirutil . -createprop /users/$user gid $p_user->{gid}",
debug => $debug,
);
$util->syscmd( "$dirutil . -createprop /users/$user shell $p_user->{shell}",
debug => $debug,
);
my $homedir = $p_user->{homedir};
$util->syscmd( "$dirutil . -createprop /users/$user home $homedir",
debug => $debug,
) if $homedir;
$util->syscmd( "$dirutil . -createprop /users/$user passwd '*'",
debug => $debug,
);
if ($homedir) {
mkdir $homedir, 0755
or $util->mkdir_system(
dir => $homedir,
mode => '0755',
debug => 0
);
$util->chown( $homedir, uid => $user, gid=>$p_user->{gid}, debug => $debug );
}
return getpwnam($user);
}
sub _create_niutil {
my $self = shift;
my $user = $p_user->{username};
my $debug = $p_user->{debug};
# use niutil on 10.4 and prior
my $dirutil = $util->find_bin( "niutil", debug => 0 );
$util->syscmd( "$dirutil -create . /users/$user",
debug => $debug,
) or die "failed to create user $user\n";
$prov->progress( num => 6, desc => "configuring $user" );
$util->syscmd( "$dirutil -createprop . /users/$user uid $p_user->{uid}",
debug => $debug,
);
$util->syscmd( "$dirutil -createprop . /users/$user gid $p_user->{gid}",
debug => $debug,
);
$util->syscmd( "$dirutil -createprop . /users/$user shell $p_user->{shell}",
debug => $debug,
);
my $homedir = $p_user->{homedir};
$util->syscmd( "$dirutil -createprop . /users/$user home $homedir",
debug => $debug,
);
$util->syscmd( "$dirutil -createprop . /users/$user _shadow_passwd",
debug => $debug,
);
$util->syscmd( "$dirutil -createprop . /users/$user passwd '*'",
debug => $debug,
);
if ($homedir) {
mkdir $homedir, 0755;
$util->chown( $homedir, uid => $user, gid=>$p_user->{gid}, debug => $debug );
}
return getpwnam($user);
}
sub destroy {
my $self = shift;
my %p = validate(
@_,
{ 'username' => { type => SCALAR },
'debug' => { type => SCALAR, optional => 1, default => 1 },
'test_mode' => { type => SCALAR, optional => 1, },
}
);
my $user = $p{username};
$prov->progress( num => 5, desc => "destroy Darwin user $user" );
return $prov->progress( num => 10, desc => 'test completed' )
if $p{test_mode};
# this works on 10.5
my $dirutil = $util->find_bin( "dscl", debug => 0, fatal => 0 );
my $cmd;
if ($dirutil) { # 10.5
$cmd = "$dirutil . -destroy /users/$user";
}
else {
# this works on 10.4 and previous
$dirutil = $util->find_bin( "niutil", debug => 0 );
$cmd = "$dirutil -destroy . /users/$user";
}
$util->syscmd( $cmd, debug => 0 );
# flush the cache
my $cacheutil = $util->find_bin( "dscacheutil", debug => 0, fatal => 0 );
if ( -x $cacheutil ) {
$util->syscmd( "$cacheutil -flushcache", debug=>0, fatal=>0);
};
return $self->exists($user)
? $prov->progress( num => 10, 'err' => 'failed' )
: $prov->progress( num => 10, desc => 'user destroyed' );
}
sub create_group {
my $self = shift;
my %p = validate(
@_,
{ 'group' => { type => SCALAR },
'gid' => { type => SCALAR },
'debug' => { type => SCALAR, optional => 1, default => 1 },
( run in 0.816 second using v1.01-cache-2.11-cpan-5511b514fd6 )