#!/usr/bin/perl -w
use strict;
# use diagnostics;
use POSIX qw/uname/;
use POSIX qw/strftime/;
my ($os, $hostname, undef)=POSIX::uname();
my ($host, undef)=split(/\./, $hostname);
my $OS = lc($os);
my ( $MODE, $USERNAME, $NEWPASS, $APACHECONF, @THINGS );
$MODE = $USERNAME = $NEWPASS = $APACHECONF = "UNDEFINED";
unless ( $ARGV[0] =~ m/-(p|a|d|ha|hd)/ )
{
print "500 - DONE - $host - Missing or bad mode\n";
exit;
}
if ( defined $ARGV[0] ) { $MODE = $ARGV[0] }
if ( defined $ARGV[1] ) { $USERNAME = $ARGV[1] }
if ( defined $ARGV[2] ) { $NEWPASS = $ARGV[2] }
#print "MODE = $MODE\nUSERNAME = $USERNAME\nNEWPASS = $NEWPASS\n";
# Format: MODE => ( COMMAND, ACTION TAKEN, CHECKMODES, ERRORS )
my %cmd=( "-p" => { "COMMAND" => { "linux" => "/usr/local/bin/setpass.expect $USERNAME $NEWPASS",
"aix" => "" },
"ACTION" => "Password Changed",
"CHECKMODES" => &checkparms(),
"ERRORS" => { "$OS:256" => "$USERNAME Does not exist" } },
"-d" => { "COMMAND" => { "linux" => "/usr/sbin/userdel -r $USERNAME",
"aix" => "" },
"ACTION" => "Deleted",
"CHECKMODES" => &checkparms(),\
"ERRORS" => { "$OS:1536" => "$USERNAME Does not exist" } },
"-a" => { "COMMAND" => { "linux" => "/usr/sbin/useradd $USERNAME &&
/usr/local/bin/setpass.expect $USERNAME $NEWPASS",
"aix" => "" },
"ACTION" => "Added",
"CHECKMODES" => &checkparms(),
"ERRORS" => { "$OS:2304" => "$USERNAME exists" } },
"-ha" => { "COMMAND" => { "linux" => "/usr/bin/htpasswd -bd $APACHECONF $USERNAME $NEWPASS",
"aix" => "" },
"ACTION" => "Added",
"CHECKMODES" => &checkparms() },
"-hd" => { "COMMAND" => { "linux" => "/usr/bin/htpasswd -D $APACHECONF $USERNAME",
"aix" => "" },
"ACTION" => "Deleted",
"CHECKMODES" => &checkparms() } );
if ( $cmd{$MODE}{'CHECKMODES'} == 0 )
{
#qx/$cmd{$MODE}{'COMMAND'}/;
print "$cmd{$MODE}{'COMMAND'}{$OS}\n";
check_error($?);
}
else
{
print "500 - DONE - $host - @THINGS not defined";
}
exit;
###############
sub check_error
###############
{
$_=shift;
my $err="$OS:$_";
my $msg = "$USERNAME $cmd{$MODE}{'ACTION'}";
$msg = $cmd{$MODE}{'ERRORS'}{$err} if ( defined ($cmd{$MODE}{'ERRORS'}{$err}) );
open (LOGFILE, ">>/var/log/usermaint_.log") or warn "Unable to open logfile\n";
( $_ == 0 ) ? print "200 - DONE - $host - Sucess ($_) - $msg\n"
: print "500 - DONE - $host - Failure ($_) - $msg\n";
my $now = strftime "%m/%d/%Y %H:%M:%S", (localtime);
print LOGFILE "$now - $_ - $USERNAME - $msg\n";
close (LOGFILE) or warn "Unable to close logfile\n";
return 1;
}
##############
sub checkparms
##############
{
push (@THINGS, "Username") if ( $USERNAME eq "UNDEFINED" );
push (@THINGS, "Password") if ( $NEWPASS eq "UNDEFINED" and
$MODE eq "-a" or
$MODE eq "-p" or
$MODE eq "-ha");
push (@THINGS, "httpd.conf") if ( $MODE eq "-ha" or
$MODE eq "-hd" and
$APACHECONF eq "UNDEFINED" );
my $return_val = ( scalar(@THINGS) == 0 ) ? return 0 : return 1;
}
__END__
####
500 - DONE - SERVER - Username Username Username Username Username not defined
####
500 - DONE - SERVER - Username Password httpd.conf Username Password httpd.conf Username Password httpd.conf Username Password httpd.conf Username Password httpd.conf not defined