diff --git a/SetupNewComp.pl b/SetupNewComp.pl index b548771..0c4d0bc 100755 --- a/SetupNewComp.pl +++ b/SetupNewComp.pl @@ -3,7 +3,12 @@ use warnings; use strict; use DBI; use Getopt::Long; -use Passwd::Unix; +use Passwd::Unix qw(check_sanity reset encpass passwd_file shadow_file + group_file backup warnings del del_user uid gid gecos + home shell passwd rename maxgid maxuid exists_user + exists_group user users users_from_shadow del_group + group groups groups_from_gshadow); +use File::Path qw( make_path ); use Data::Dumper qw(Dumper); my $db_adm = 'ase_lar'; @@ -14,6 +19,8 @@ my $db_adm_srv = 'www.aseltd.eu'; my ( $company, $company_id, $company_name ); my ( $company_db_name, $company_db_user, $company_db_pwd ); +my ( $company_os_user, $company_os_pwd ); +my $company_os_grp = '1005'; #group aseuser sub getTimeStamp { # parm [ts] => timestamp for filename; [log] => timestamp for log; [db_ts] => timestamp for db; @@ -48,7 +55,8 @@ sub checkCompanyDBSet { . " - pid $$ >> Could not connect to admin database: $DBI::errstr"; my $sth = - $dbh->prepare( "select id, name, db_user, db_pwd, db_name from " + $dbh->prepare( + "select id, name, db_user, db_pwd, db_name, os_user, os_pwd from " . "ase_lar.companies where name_short like '" . $company . "%';" ) @@ -68,6 +76,8 @@ sub checkCompanyDBSet { $company_db_name = $results->{'db_name'}; $company_db_user = $results->{'db_user'}; $company_db_pwd = $results->{'db_pwd'}; + $company_os_user = $results->{'os_user'}; + $company_os_pwd = $results->{'os_pwd'}; print getTimeStamp("log") . " - pid $$ >> Selected company: " . $company_name . ".\n"; @@ -88,6 +98,7 @@ sub setCompanyDBSet { $company_db_user = sprintf "dbu%08s", $company_id; $company_db_name = sprintf "dbn%08s", $company_id; $company_db_pwd = generateRandomPassword(16); + my $sth = $dbh->prepare( "update ase_lar.companies set db_user = '" . $company_db_user @@ -190,6 +201,46 @@ sub checkCompanyDBTables() { $sth_db->finish; } +sub setCompanyOSSet { + my $dbh = DBI->connect( "DBI:mysql:$db_adm;host=$db_adm_srv", + $db_adm_usr, $db_adm_pwd ) + or die getTimeStamp("log") + . " - pid $$ >> Could not connect to admin database: $DBI::errstr"; + + $company_os_user = sprintf "aseu%08s", $company_id; + $company_os_pwd = generateRandomPassword(16); + + my $sth = + $dbh->prepare( "update ase_lar.companies set os_user = '" + . $company_os_user + . "', os_pwd = '" + . $company_os_pwd + . "' where id = " + . $company_id + . ";" ) + or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr"; + + $sth->execute() or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr"; + $sth->finish; + + user( + $company_os_user, encpass($company_os_pwd), + maxuid() + 1, $company_os_grp, + $company_name . " user", "/home/" . $company_os_user, + "/bin/bash" + ) or die getTimeStamp("log") . " - pid $$ >> " . error() . ". \n"; + + if ( !-d "/home/" . $company_os_user ) { + make_path "/home/" . $company_os_user, + { mode => 0755, owner => $company_os_user, group => $company_os_grp } + or warn getTimeStamp("log") + . " >> Failed to create path: /home/" + . $company_os_user . "\n"; + } + + return 1; +} + print getTimeStamp("log") . " - pid $$ >> Execution started.\n"; GetOptions( "company=s" => \$company ) @@ -207,5 +258,10 @@ if ( !checkCompanyDBGrant() ) { setCompanyDBTables(); } -print getTimeStamp("log") . " - pid $$ >> Execution ended.\n"; +if ( !defined $company_os_user or !exists_user($company_os_user) ) { + print getTimeStamp("log") . " - pid $$ >> Create os user.\n"; + setCompanyOSSet(); +} + +print getTimeStamp("log") . " - pid $$ >> Execution ended . \n "; exit;