56 lines
1.4 KiB
Perl
Executable File
56 lines
1.4 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# (C) 2007 Michael Weinberger
|
|
# See http://wiki.contribs.org/Dirty_Tools for full documentation
|
|
|
|
use strict;
|
|
use esmith::AccountsDB;
|
|
use Getopt::Long;
|
|
|
|
|
|
my %opts;
|
|
my $getRes = GetOptions(
|
|
"unlock"=>\$opts{'unlock'},
|
|
);
|
|
|
|
( my $myself = $0) =~ s/.*\///;
|
|
$opts{'unlock'} = ($myself eq 'dt-unlock-account' or $opts{'unlock'}) ? 1 : 0;
|
|
|
|
my $account=$ARGV[0];
|
|
|
|
die "Usage: dt-lock-account account\n dt-unlock-account account\n" if not $account;
|
|
|
|
if( $account eq 'admin' )
|
|
{
|
|
print "not applicable to account 'admin'\n"; exit -1;
|
|
}
|
|
|
|
my $accountdb = esmith::AccountsDB->open or die "Could not open account db";
|
|
|
|
my $acct = $accountdb->get($account);
|
|
|
|
|
|
if (not $acct or $acct->prop('type') ne "user")
|
|
{
|
|
print "User '$account' does not exist.\n";
|
|
exit -1;
|
|
}
|
|
|
|
if( $opts{'unlock'} )
|
|
{
|
|
my $status=system("/usr/bin/passwd", "-u", $account)>>8;
|
|
if( $status==254 )
|
|
{
|
|
print "Account $account has never been assigned a password. Cannot unlock.\n";
|
|
exit -1;
|
|
}
|
|
die "Error running /usr/bin/passwd command to unlock account $account" if $status>0 and $status!=254;
|
|
system("/usr/bin/smbpasswd", "-e", $account) == 0
|
|
or die "Error running /usr/bin/smbpasswd command to unlock account $account";
|
|
$acct->set_prop('PasswordSet', 'yes');
|
|
}
|
|
else
|
|
{
|
|
not system("/sbin/e-smith/signal-event", "user-lock", $account)
|
|
or die "Error occurred while locking account '$account'";
|
|
}
|