1 2 3 4 5 6
my $logfile = "/tmp/rnetposts/$ARGV[0]-$scriptname.log"; open(my $LOGDATEI, ">$logfile") or die "Konnte Datei nicht oeffnen"; chmod(0666, $LOGDATEI); select($LOGFILE); print "Progarmm laeuft ab und gibt Informationen aus"; close($LOGDATEI);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# fetch commandline argument my $argument = shift @ARGV or die "Kommandozeilenargument fehlt"; use File::Basename; # get filename of program my $scriptname = fileparse($0); # make new log filename my $logfile = "/tmp/rnetposts/${argument}-${scriptname}.log"; my $err_logfile = "/tmp/rnetposts/${argument}-${scriptname}_error.log"; my $out_logfile = "/tmp/rnetposts/${argument}-${scriptname}_out.log"; open(STDOUT, ">", $out_logfile) or die "Konnte STDOUT nicht in Datei $out_logfile umleiten"; open(STDERR, ">", $err_logfile) or die "Konnte STDERR nicht in Datei $err_logfile umleiten"; open(my $LOGDATEI, ">", $logfile) or die "Konnte Datei $logfile nicht oeffnen"; chmod(0666, $LOGDATEI); select($LOGFILE); print "Programm laeuft ab und gibt Informationen aus"; close($LOGDATEI) or die "Konnte Datei $logfile nicht speichern";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
use strict; use warnings; use File::Compare; my %exclude; my $file1 = 'default_sysdumpdev_150319.txt'; my $file2 = 'd100spuptl25e0_sysdumpdev.txt'; my $compare = compare('d100spuptl25e0_sysdumpdev.txt', 'default_sysdumpdev_150319.txt'); open my $file, '<', 'default_sysdumpdev_150319.txt' or die $!; while (<$file>) { chomp; $exclude{$_}++; $file } open $file, '<', 'd100spuptl25e0_sysdumpdev.txt' or die $!; while (<$file>) { chomp; if($compare == 1){ print "False! the files are not equal \n"; print "$_\n" unless $exclude{$_}; . } elsif($compare == 0){ print "True! the Files are equal \n"; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use strict; use warnings; use File::Compare; my %exclude; my $file1 = 'default_sysdumpdev_150319.txt'; my $file2 = 'd100spuptl25e0_sysdumpdev.txt'; my $compare = compare('d100spuptl25e0_sysdumpdev.txt', 'default_sysdumpdev_150319.txt'); open my $file, '<', 'default_sysdumpdev_150319.txt' or die $!; while (<$file>) { chomp; $exclude{$_}++; $file } my $logdatei = 'compare.log'; open my $logfh, '>', $logdatei or die $!; open $file, '<', 'd100spuptl25e0_sysdumpdev.txt' or die $!; while (<$file>) { chomp; if($compare == 1){ print $logfh "False! the files are not equal \n"; print $logfh "$_\n" unless $exclude{$_}; . } elsif($compare == 0){ print $logfh "True! the Files are equal \n"; } } close $logfh;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
use strict; use warnings; use File::Compare; use Getopt::Long; $| = 1; sub help { print STDERR <<TXT; Syntaxbeispiel: $0 -f1 datei1.txt -f2 datei2.txt -log log.log TXT exit 255; } my $file1 = ''; my $file2 = ''; my $logdatei = ''; my $help = 0; GetOptions ( 'h|?' => \$help, 'log|logfile=s' => \$logdatei, 'f1|file1=s' => \$file1, 'f2|file2=s' => \$file2 ); help() if $help; print "\x07### ERROR: Dateiname erste Datei fehlt" and help() if not length $file1; print "\x07### ERROR: Dateiname zweite Datei fehlt" and help() if not length $file2; print "\x07### ERROR: Dateiname Log-Datei fehlt" and help() if not length $logdatei; my %exclude; my $compare = compare($file1,$file2); open my $fh1, '<', $file1 or die $!; while (<$fh1>) { chomp; $exclude{$_}++; } close $fh1; open my $logfh, '>', $logdatei or die $!; open my $fh2, '<', $file2 or die $!; while (<$fh2>) { chomp; if($compare == 1){ print $logfh "False! the files are not equal \n"; print $logfh "$_\n" unless $exclude{$_}; } elsif($compare == 0){ print $logfh "True! the Files are equal \n"; } } close $fh2; close $logfh;
QuoteInsecure dependency in open while running setgid at rnetposts.pl line 83.
1
2
3
4
5
6
7
8
if($logfile =~ m:^([a-zA-Z0-9\_/\s\-]+)$:)
{
$logfile = $1;
}
else
{
die "Bad data in $logfile";
}
2013-11-15T08:10:04 Eng1958Es lag doch nicht an dem Code der dort zu sehen war sondern mal wieder an einer Regulare Expression...
Da das ganze im Hintergrund läuft gibt Perl wieder tainted Code aus.
QuoteInsecure dependency in open while running setgid at rnetposts.pl line 83.
Das heißt mal wieder muss das ganze überprüft werden.
Habe diese hier genommen:
Code: (dl )1
2
3
4
5
6
7
8if($logfile =~ ^([a-zA-Z0-9\_/\s\-]+)$)
{
$logfile = $1;
}
else
{
die "Bad data in $logfile";
}
if ($logfile =~ m:^([a-zA-Z0-9\_/\s\-]+)$:) { ...}
if ($logfile =~ /^([a-zA-Z0-9\_\/\s\-]+)$/) { ...}
QuoteWo hast Du in dem Code-Schnipsel denn eine Regex?
QuoteDafür brauchst Du erstmal einen Match-Operator, damit der Parser das weiß. Das ist m. Das fehlt hier
QuoteIch bin jetzt zu faul das auszuprobieren, aber was macht Dein Code überhaupt?
2013-11-15T11:05:30 Eng1958Es funktioniert eben nicht. Ich bekomme ein Bad Data.
QuoteHast Du Dich eigentlich schon mal mit der Doku, die ich Dir schon mal verlinkt hatte, beschäftigt (siehe msg #171931)?
QuoteSTDOUT und ERROUT in eine Datei umleiten
2013-11-20T06:55:31 Eng1958Ich arbeite in Sachen Regulare Expressions mit diesem Buch: http://www.amazon.de/Regul%C3%A4re-Ausdr%C3%BCcke-...
In diesem steht leider im Kapitel Perl, dass der Punkt mit /s abgefangen wird.(http://s7.directupload.net/file/d/3447/6g93w52r_jp...) Nach einigem Ausprobieren und Googlen habe ich es dann auch gefunden.
perldoc perlre...
Modifiers
...
s Treat string as single line. That is, change "." to match any character whatsoever, even a newline, which normally it would not match.
perldoc perlre...
Metacharacters
...
In particular the following metacharacters have their standard egrep-ish meanings:
\ Quote the next metacharacter
^ Match the beginning of the line
. Match any character (except newline)
$ Match the end of the line (or before newline at the end)
| Alternation
() Grouping
[] Bracketed Character class
...
To simplify multi-line substitutions, the "." character never matches a newline unless you use the /s modifier, which in effect tells Perl to pretend the string is a single line--even if it isn't.
2013-11-20T06:55:31 Eng1958QuoteHast Du Dich eigentlich schon mal mit der Doku, die ich Dir schon mal verlinkt hatte, beschäftigt (siehe msg #171931)?
Ja habe ich nur leider steht dort das selbe wie im Post von GwenDragon. Dort wird der Errorout und Stdout in zwei verschiedene Dateien umgleitet.
1 2 3 4 5 6 7 8
my $logfile = "logfile.log"; open(my $logfh, ">", $logfile) or die "Konnte $logfile nicht öffnen ($!)"; close(STDOUT); close(STDERR); *STDOUT=$logfh; *STDERR=$logfh;