#!/usr/bin/perl use warnings; use strict; use JSON; my $working_dir = "./"; my $account_dir = $working_dir."req/"; my $conf_path = $working_dir."lyadmin.conf.json"; my $ul_path = $working_dir."user_list.txt"; my $SHELL_ENUM; my @g; sub create($){ my $id = $_[0]; my $fn1 = $account_dir.$id.".ident"; my $username; my $shell_pref; my $user_email; my $pub_key; open FILE, $fn1 or die "could not open file $fn1"; $username = ; chomp $username; $user_email = ; chomp $user_email; { my $s0 = ; chomp $s0; unless($SHELL_ENUM->{$s0}){ die "invalid shell setting $s0 in file $id.ident"; } $shell_pref = $SHELL_ENUM->{$s0}; } $pub_key = ; chomp $pub_key; if(length($username) > 31 || !($username =~ /^[A-Za-z][A-Za-z0-9]+$/)){ printf("%s has an INVALID username\n", $id); die ("oh no"); } { my $cmd; $cmd = "useradd -m -s " . $shell_pref . " " . $username; printf("Y/N is this command OK?: %s\n", $cmd); if(!( =~ /^y/i)){ die "invalid characters?!!"; } system($cmd); system("echo '".$pub_key."' > /home/$username/.ssh/authorized_keys"); system("chmod 711 /home/$username"); system("mv $fn1 $fn1.done"); system("echo $username >> $ul_path"); # system("echo $username >> user_list.txt"); } close FILE; } if(!(`id` =~ /uid=0/)){ die "please run this script as root"; } if( `pwd` =~ /perl-script\/?\s*$/){ $working_dir = "../"; $account_dir = $working_dir."req/"; $conf_path = $working_dir."lyadmin.conf.json"; $ul_path = $working_dir."user_list.txt"; printf("%s\n", $conf_path); }elsif(!(join(" ", glob("./*")) =~ /perl-script/)){ die "please run this script with ./perl-script/ as the present working directory"; } open FILE, $conf_path or die "could not open file $conf_path"; { my $conf_str; my $conf_obj; local $/=undef; $conf_str = ; chomp $conf_str; $conf_obj = decode_json($conf_str); $SHELL_ENUM = $conf_obj->{"shell"}; }; close FILE; @g = glob("$account_dir*"); @g = map { s/.*\/([^\/]*).ident$/$1/; $_ } grep {$_ =~ /ident$/} @g; for my $fn (@g){ create($fn); }