create_user.pl - refactored create_user.pl so it can be run with STDIN instead of a file

This commit is contained in:
gashapwn 2020-12-29 03:44:14 +00:00
parent e71775bf17
commit 3bf739cbe7

View File

@ -19,32 +19,51 @@ my @g;
# Given a username... prompts and creates that user # Given a username... prompts and creates that user
sub create($){ sub create($){
my $id = $_[0]; my $id;
my $fn1 = $account_dir.$id.".ident"; my $fn1;
my $username; my $username;
my $shell_pref; my $shell_pref;
my $user_email; my $user_email;
my $pub_key; my $pub_key;
my $p0;
# Prompts...
$p0 = [
"Enter username: ",
"Enter pubkey: "
];
$fn1 = "";
if($_[0]){
$id = $_[0];
$fn1 = $account_dir.$id.".ident";
open IN0, $fn1 or die "could not open file $fn1";
$p0 = [ map("", @{$p0}) ];
}else{
*IN0 = *STDIN;
}
# read in username and validate # read in username and validate
open FILE, $fn1 or die "could not open file $fn1"; printf($p0->[0]);
$username = <FILE>; $username = <IN0>;
chomp $username; chomp $username;
if(length($username) > 31 || !($username =~ /^[A-Za-z][A-Za-z0-9]+$/)){ if(length($username) > 31 || !($username =~ /^[A-Za-z][A-Za-z0-9]+$/)){
printf("%s has an INVALID username\n", $id); printf("%s is an INVALID username\n", $id);
die ("oh no"); die ("oh no");
} }
# read in email # read in email
$user_email = <FILE>; $user_email = $_[0] ? <IN0> : "";
chomp $user_email; chomp $user_email;
# read in shell and validate # read in shell and validate
{ {
my $s0 = <FILE>; my $s0;
$s0 = $_[0] ? <IN0> : "SHELL_KSH";
chomp $s0; chomp $s0;
unless($SHELL_ENUM->{$s0}){ unless($SHELL_ENUM->{$s0}){
die "invalid shell setting $s0 in file $id.ident"; die "invalid shell setting $s0 in file $id.ident";
@ -53,7 +72,8 @@ sub create($){
} }
# read in pub key # read in pub key
$pub_key = <FILE>; printf($p0->[1]);
$pub_key = <IN0>;
chomp $pub_key; chomp $pub_key;
{ {
@ -70,10 +90,10 @@ sub create($){
system($cmd); system($cmd);
system("echo '".$pub_key."' > /home/$username/.ssh/authorized_keys"); system("echo '".$pub_key."' > /home/$username/.ssh/authorized_keys");
system("chmod 711 /home/$username"); system("chmod 711 /home/$username");
system("mv $fn1 $fn1.done"); system("test -f $fn1 && mv $fn1 $fn1.done");
system("echo $username >> $ul_path"); system("echo $username >> $ul_path");
} }
close FILE; close IN0;
} }
# MAIN starts here # MAIN starts here
@ -85,14 +105,15 @@ if(!(`id` =~ /uid=0/)){
# Adjusts the relative file paths based on where # Adjusts the relative file paths based on where
# the script runs from # the script runs from
if( `pwd` =~ /perl-script\/?\s*$/){ if(`pwd` =~ /perl-script\/?\s*$/){
$working_dir = "../"; $working_dir = "../";
$account_dir = $working_dir."req/"; $account_dir = $working_dir."req/";
$conf_path = $working_dir."lyadmin.conf.json"; $conf_path = $working_dir."lyadmin.conf.json";
$ul_path = $working_dir."user_list.txt"; $ul_path = $working_dir."user_list.txt";
printf("%s\n", $conf_path); printf("%s\n", $conf_path);
}elsif(!(join(" ", glob("./*")) =~ /perl-script/)){ }elsif(!(join(" ", glob("./*")) =~ /perl-script/)){
die "please run this script with ./perl-script/ as the present working directory"; create(0);
die "done...\n";
} }
# Opens the conf file to read # Opens the conf file to read
@ -117,4 +138,3 @@ close FILE;
for my $fn (@g){ for my $fn (@g){
create($fn); create($fn);
} }