abilita tutti local user

This commit is contained in:
2017-09-17 21:49:43 +02:00
parent a86359d4b2
commit 6810d4a1d6

View File

@@ -11,77 +11,106 @@ $SIG{CHLD} = 'IGNORE';
$|++; # Autoflush $|++; # Autoflush
sub getTimeStamp { # parm [ts] => timestamp for filename; log => timestamp for log sub getTimeStamp
my $format = "%04d%02d%02d%02d%02d%02d"; { # parm [ts] => timestamp for filename; log => timestamp for log
my ($p1) = @_; my $format = "%04d%02d%02d%02d%02d%02d";
if (defined $p1 and $p1 eq "log") { my ($p1) = @_;
$format = "%04d%02d%02d %02d:%02d:%02d"; if ( defined $p1 and $p1 eq "log" ) {
} $format = "%04d%02d%02d %02d:%02d:%02d";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); }
my $timestamp = sprintf ( $format, $year+1900,$mon+1,$mday,$hour,$min,$sec); my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
return $timestamp; localtime(time);
my $timestamp =
sprintf( $format, $year + 1900, $mon + 1, $mday, $hour, $min, $sec );
return $timestamp;
} }
sub getUnitName { # parm => file received ($trfile) sub getUnitName { # parm => file received ($trfile)
my ($filename) = @_; my ($filename) = @_;
open FILE, $filename or warn getTimeStamp("log") . " >> Error: opening input file $filename\n"; open FILE, $filename
my ($fileDate, $fileTime) = split(/\s/, <FILE>); or warn getTimeStamp("log") . " >> Error: opening input file $filename\n";
my ($unittype, $unit) = split(/\s/, uc <FILE>); my ( $fileDate, $fileTime ) = split( /\s/, <FILE> );
close FILE; my ( $unittype, $unit ) = split( /\s/, uc <FILE> );
return $unit; close FILE;
return $unit;
} }
my $readingFile; my $readingFile;
my $ftpuser = "asega";
my $ftpuser1 = "corra";
my $recvOKstr = "OK UPLOAD"; my $recvOKstr = "OK UPLOAD";
my $ext = ".csv"; my $ext = ".csv";
my $dbname = "ase_mums"; my $dbname = "ase_mums";
GetOptions( "file=s" => \$readingFile ) GetOptions( "file=s" => \$readingFile )
or die("Error in command line arguments\n"); or die("Error in command line arguments\n");
my($scriptname, $scriptpath) = fileparse($0); my ( $scriptname, $scriptpath ) = fileparse($0);
my $tail = new File::SmartTail; my $tail = new File::SmartTail;
$tail->WatchFile( -file => $readingFile, -type => "UNIX", -timeout => '10' ); $tail->WatchFile( -file => $readingFile, -type => "UNIX", -timeout => '10' );
while ( my $line = $tail->GetLine() ) { while ( my $line = $tail->GetLine() ) {
if (((index($line, $ftpuser) != -1) or (index($line, $ftpuser1) != -1)) and (index($line, $recvOKstr) != -1)) { if ( index( $line, $recvOKstr ) != -1 ) {
my (undef, undef, undef, $truser, undef, $trip, undef, $trfile, $trstat) = split(/[\"\[\]]/, $line); my (
my ($login,$pass,$uid,$gid) = getpwnam($truser) or warn getTimeStamp("log") . " >> $truser not in passwd file.\n"; undef, undef, undef, $truser, undef,
$trip, undef, $trfile, $trstat
) = split( /[\"\[\]]/, $line );
my ( $login, $pass, $uid, $gid ) = getpwnam($truser)
or warn getTimeStamp("log") . " >> $truser not in passwd file.\n";
my($filename, $path, $suffix) = fileparse($trfile, qr/\.[^.]*/); my ( $filename, $path, $suffix ) = fileparse( $trfile, qr/\.[^.]*/ );
if ( ((uc $suffix) eq (uc $ext)) and ($filename =~ m/^(\d\d_\d\d\d\d_|)(DT\d\d\d\d|LOC\d*)$/i) ){ if ( ( ( uc $suffix ) eq ( uc $ext ) )
my $unit = getUnitName($trfile); and ( $filename =~ m/^(\d\d_\d\d\d\d_|)(DT\d\d\d\d|LOC\d*)$/i ) )
print getTimeStamp("log") . " >> Unit $unit - Filename $trfile\n"; {
my $outpath = $path . $unit; my $unit = getUnitName($trfile);
if ( !-d "$outpath/SQL" ) { print getTimeStamp("log") . " >> Unit $unit - Filename $trfile\n";
make_path "$outpath/SQL" , {mode => 0755, owner=>$truser, group=>$truser} or warn getTimeStamp("log") . " >> Failed to create path: $outpath/SQL";
} if ( !-d "$path/log" ) {
my $timestamp = getTimeStamp(); make_path "$path/log",
my $dest = $outpath . "/" . $filename . "_". $timestamp . $suffix; { mode => 0755, owner => $truser, group => $truser }
if ( !move $trfile, $dest) { or warn getTimeStamp("log")
warn getTimeStamp("log") . " >> Move $trfile -> $dest failed: $!"; . " >> Failed to create path: $path/log";
} else { }
print getTimeStamp("log") . " >> Moved $trfile -> $dest.\n";
chmod 0664 , $dest; my $outpath = $path . $unit;
my @fname = ($dest); if ( !-d "$outpath/SQL" ) {
chown $uid, $gid, @fname; make_path "$outpath/SQL",
if ($filename =~ m/^(\d\d_\d\d\d\d_|)(DT\d\d\d\d|LOC\d.*)$/i and ($unit ne 'ID9999') and (index($line, $ftpuser) != -1)) { { mode => 0755, owner => $truser, group => $truser }
print getTimeStamp("log") . " >> Sender user $ftpuser: load data into DB.\n"; or warn getTimeStamp("log")
unless (fork()) { . " >> Failed to create path: $outpath/SQL";
setgid($gid); }
setuid($uid);
$ENV{"HOME"} = 'home/' . $ftpuser; my $timestamp = getTimeStamp();
exec( $scriptpath . "LoadCSVData.pl -f \"$dest\" -s \"$outpath/SQL/$filename" . "_" . "$timestamp.sql\" -d $dbname >> /home/$truser/log/loadcsvdata.log 2>&1"); my $dest = $outpath . "/" . $filename . "_" . $timestamp . $suffix;
exit(0) if ( !move $trfile, $dest ) {
} warn getTimeStamp("log")
} . " >> Move $trfile -> $dest failed: $!";
} }
} else {
} print getTimeStamp("log") . " >> Moved $trfile -> $dest.\n";
chmod 0664, $dest;
my @fname = ($dest);
chown $uid, $gid, @fname;
if ( $filename =~ m/^(\d\d_\d\d\d\d_|)(DT\d\d\d\d|LOC\d.*)$/i
and ( $unit ne 'ID9999' ) )
{
print getTimeStamp("log")
. " >> Sender user $truser: load data into DB.\n";
unless ( fork() ) {
setgid($gid);
setuid($uid);
$ENV{"HOME"} = 'home/' . $truser;
exec( $scriptpath
. "LoadCSVData.pl -f \"$dest\" -s \"$outpath/SQL/$filename"
. "_"
. "$timestamp.sql\" -d $dbname >> /home/$truser/log/loadcsvdata.log 2>&1"
);
exit(0);
}
}
}
}
}
} }
exit(0); exit(0);