my $lr_conf = new LogRotate::Conf();
- $lr_conf->verbose(2);
$lr_conf->default_compress(1);
$lr_conf->default_copytruncate(0);
$lr_conf->default_create_mode(0644);
use Data::Dumper;
#use POSIX;
+use LogRotate::Common;
our $AUTOLOAD;
our %ok_field;
-my $MainVersion = "2.0";
-
my $Revis = <<'ENDE';
$Revision$
ENDE
$Revis =~ s/^.*:\s*(\S+)\s*\$.*/$1/s;
-our $VERSION = $MainVersion . "." . $Revis;
+our $VERSION = $LogRotate::Common::LOGROTATE_VERSION . "." . $Revis;
$Data::Dumper::Indent = 1;
$Data::Dumper::Sortkeys = 1;
my $self = {
'configfiles' => {},
- 'verbose' => 0,
'included_files' => {},
'compress_cmd' => 'Compress::Zlib',
'pidfile' => '/var/run/logrotate.pid',
$res = bless $self, $class;
- my $p = $self->verbose() ? __PACKAGE__ . "::new(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::new(): " : "";
$self->reset_defaults();
$self->add_taboo( '\.rpmnew', 'ext' );
$self->add_taboo( '\.rpmorig', 'ext' );
if ( $self->{'compress_cmd'} ) {
unless ( $cmd = $self->check_compress_program( $self->{'compress_cmd'}, 1 ) ) {
- carp $p . "Kein gueltiges Kompressionsprogramm gefunden, Kompression wird deaktiviert.\n" if $self->{'verbose'};
+ carp $p . "Kein gueltiges Kompressionsprogramm gefunden, Kompression wird deaktiviert.\n" if verbose();
$self->{'compress_cmd'} = undef;
}
$self->{'compress_cmd'} = $cmd;
=head2 AUTOLOAD()
-Autoload-Methode zum Zugriff auf alle möglichen Elemente.
+Autoload-Methode zum Zugriff auf alle moeglichen Elemente.
=cut
croak "Ungueltige Attributmethode ->$attr()" unless $ok_field{$attr};
- return $self->verbose(@_) if $attr eq "verbose";
return $self->compress_cmd(@_) if $attr eq "compress_cmd";
return $self->default_compress(@_) if $attr eq "default_compress";
return $self->default_copytruncate(@_) if $attr eq "default_copytruncate";
my $self = shift;
my $pattern = shift || '';
- my $p = $self->verbose() ? __PACKAGE__ . "::add_taboo(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::add_taboo(): " : "";
my $type = lc(shift || 'file');
$self->{'taboo'} = [] unless $self->{'taboo'};
}
$pattern = sprintf( $Pat{$type}, $pattern );
- print $p . "Neues Tabu-Pattern: '$pattern'.\n" if $self->verbose() > 3;
+ print $p . "Neues Tabu-Pattern: '$pattern'.\n" if verbose() > 3;
push( @{$self->{'taboo'}}, $pattern );
}
my $self = shift;
my $cmd = shift || 0;
- my $p = $self->verbose() ? __PACKAGE__ . "::check_compress_program(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::check_compress_program(): " : "";
my $check_if_empty = shift || 0;
my @Dirs;
my ( $dir, $found, $prog );
if ( $cmd ) {
if ( $cmd =~ m#^/# ) {
if ( -f $cmd and -x $cmd ) {
- print $p . "Kopressionsprogramm in '$cmd' gefunden.\n" if $self->verbose() > 1;
+ print $p . "Kopressionsprogramm in '$cmd' gefunden.\n" if verbose() > 1;
return $cmd;
} else {
warn $p . "Ungueltiges Kopressionsprogramm '$cmd'.\n";
if ( $cmd eq "1" or $cmd =~ /^Compress::Zlib$/ ) {
eval "use Compress::Zlib;";
if ( $@ ) {
- warn "$@\n" if $self->{'verbose'};
+ warn "$@\n" if verbose();
$cmd = undef;
} else {
- print $p . "Verwende Perl-Modul 'Compress::Zlib' fuer Kompression.\n" if $self->verbose() > 1;
+ print $p . "Verwende Perl-Modul 'Compress::Zlib' fuer Kompression.\n" if verbose() > 1;
return 'Compress::Zlib';
}
} elsif ( $cmd eq "2" or $cmd =~ /^Compress::Bzip2$/ ) {
eval "use Compress::Bzip2;";
if ( $@ ) {
- warn "$@\n" if $self->verbose();
+ warn "$@\n" if verbose();
$cmd = undef;
} else {
- print $p . "Verwende Perl-Modul 'Compress::Bzip2' fuer Kompression.\n" if $self->verbose() > 1;
+ print $p . "Verwende Perl-Modul 'Compress::Bzip2' fuer Kompression.\n" if verbose() > 1;
return 'Compress::Bzip2';
}
} else {
foreach $dir ( @Dirs ) {
$prog = $dir . "/" . $cmd;
if ( -f $prog and -x $prog ) {
- print $p . "Kompressionsprogramm in '$prog' gefunden.\n" if $self->verbose() > 1;
+ print $p . "Kompressionsprogramm in '$prog' gefunden.\n" if verbose() > 1;
return $prog;
}
}
if ( $@ ) {
$cmd = undef;
} else {
- print $p . "Verwende Perl-Modul 'Compress::Zlib' fuer Kompression.\n" if $self->verbose() > 1;
+ print $p . "Verwende Perl-Modul 'Compress::Zlib' fuer Kompression.\n" if verbose() > 1;
$self->{'compressext'} = ".gz";
return 'Compress::Zlib';
}
if ( $@ ) {
$cmd = undef;
} else {
- print $p . "Verwende Perl-Modul 'Compress::Bzip2' fuer Kompression.\n" if $self->verbose() > 1;
+ print $p . "Verwende Perl-Modul 'Compress::Bzip2' fuer Kompression.\n" if verbose() > 1;
$self->{'compressext'} = ".bz2";
return 'Compress::Bzip2';
}
$prog = $dir . "/" . $cmd;
if ( -f $prog and -x $prog ) {
$self->{'compressext'} = $StandardCompressPrograms{$cmd};
- print $p . "Kompressionsprogramm in '$prog' gefunden.\n" if $self->verbose() > 1;
+ print $p . "Kompressionsprogramm in '$prog' gefunden.\n" if verbose() > 1;
return $prog;
}
}
my $f = shift || "'unknown'";
my $in_fd = shift || 0;
my $linenr = shift || "'unknown'";
- my $p = $self->verbose() ? __PACKAGE__ . "::compresscmd_statement(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::compresscmd_statement(): " : "";
my ( $cmd, $name );
my ( @Values );
if ( $in_fd ) {
warn $p . "Die Direktive 'compresscmd' ist nicht innerhalb von Logdatei-Definitionen erlaubt" .
- " (Datei '$f', Zeile '$f').\n" if $self->{'verbose'};
+ " (Datei '$f', Zeile '$f').\n" if verbose();
return;
}
$cmd = $line;
$cmd =~ s/^\S+\s*//;
- @Values = $cmd ? $self->parts( $cmd ) : ();
+ @Values = $cmd ? parts( $cmd ) : ();
unless ( $Values[0] ) {
- warn $p . "Direktive 'compresscmd' ohne dazugehoeriges Kommando gegeben (Datei '$f', Zeile '$f').\n" if $self->{'verbose'};
+ warn $p . "Direktive 'compresscmd' ohne dazugehoeriges Kommando gegeben (Datei '$f', Zeile '$f').\n" if verbose();
return;
}
$cmd = $Values[0];
}
warn $p . "Das gegebene Kompressions-Kommando ist ungueltig, verwende das alte " .
- "Kommando '" . $self->{'compress_cmd'} . "' (Datei '$f', Zeile '$f').\n" if $self->{'verbose'};
+ "Kommando '" . $self->{'compress_cmd'} . "' (Datei '$f', Zeile '$f').\n" if verbose();
}
my $nv;
if ( @_ ) {
$nv = shift;
- $self->{'default'}{'compress'} = $self->to_bool($nv);
+ $self->{'default'}{'compress'} = to_bool($nv);
}
return $self->{'default'}{'compress'};
my $nv;
if ( @_ ) {
$nv = shift;
- $self->{'default'}{'dateext'} = $self->to_bool($nv);
+ $self->{'default'}{'dateext'} = to_bool($nv);
}
return $self->{'default'}{'dateext'};
my $nv;
if ( @_ ) {
$nv = shift;
- $self->{'default'}{'delaycompress'} = $self->to_bool($nv);
+ $self->{'default'}{'delaycompress'} = to_bool($nv);
}
return $self->{'default'}{'delaycompress'};
my $nv;
if ( @_ ) {
$nv = shift;
- $self->{'default'}{'if_empty'} = $self->to_bool($nv);
+ $self->{'default'}{'if_empty'} = to_bool($nv);
}
return $self->{'default'}{'if_empty'};
my $nv;
if ( @_ ) {
$nv = shift;
- $self->{'default'}{'max_age'} = $self->to_int($nv);
+ $self->{'default'}{'max_age'} = to_int($nv);
}
return $self->{'default'}{'max_age'};
my $nv;
if ( @_ ) {
$nv = shift;
- $self->{'default'}{'missingok'} = $self->to_bool($nv);
+ $self->{'default'}{'missingok'} = to_bool($nv);
}
return $self->{'default'}{'missingok'};
if ( $ValidPeriods{$nv} ) {
$self->{'default'}{'period'} = $ValidPeriods{$nv};
} else {
- $nv = $self->period2days($nv);
+ $nv = period2days($nv);
$self->{'default'}{'period'} = $nv if defined $nv;
}
}
my $nv;
if ( @_ ) {
$nv = shift;
- $self->{'default'}{'rotate'} = $self->to_int($nv);
+ $self->{'default'}{'rotate'} = to_int($nv);
}
return $self->{'default'}{'rotate'};
if ( @_ ) {
$nv = shift;
if ( defined $nv ) {
- $val = $self->human2byte($nv);
+ $val = human2byte($nv);
$self->{'default'}{'size'} = $val if defined $val;
}
}
my $f = shift || "'unknown'";
my $in_fd = shift || 0;
my $linenr = shift || "'unknown'";
- my $p = $self->verbose() ? __PACKAGE__ . "::directive(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::directive(): " : "";
- print $p . "Untersuche '$line' (Datei '$f', Zeilennr $linenr) ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche '$line' (Datei '$f', Zeilennr $linenr) ...\n" if verbose() > 5;
my ( $directive, $val ) = $line =~ /^(\S+)\s*(.*)/;
my ( $key, $negated, $name, $pattern, $wert );
my ( @Values );
if ( $directive =~ /^(not?)?($pattern)$/i ) {
$negated = $1;
$key = lc($2);
- print $p . "Untersuche boolsche Direktive '$key' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche boolsche Direktive '$key' ...\n" if verbose() > 5;
if ( defined $val and $val ne "" ) {
warn $p . "Wert '$val' hinter logischer Direktive $directive gefunden (Datei '$f', Zeile $linenr)\n";
}
warn $p . "Kompression unmoeglich, kein Kompressions-Kommando gegeben (Datei '$f', Zeile $linenr)\n";
$val = 0;
}
- print $p . "Setze '$key' in '$wo' auf $val.\n" if $self->verbose() > 5;
+ print $p . "Setze '$key' in '$wo' auf $val.\n" if verbose() > 5;
$self->{$wo}{$key} = $val;
return 1;
}
if ( $directive =~ /^(not?)?($pattern)$/i ) {
$negated = $1;
$key = lc($2);
- print $p . "Untersuche Integer-Direktive '$key' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche Integer-Direktive '$key' ...\n" if verbose() > 5;
if ( $DirectivesWithValues{$key} ) {
- print $p . "Direktive '$key' muss einen Wert haben.\n" if $self->verbose() > 5;
+ print $p . "Direktive '$key' muss einen Wert haben.\n" if verbose() > 5;
unless ( defined $val and $val !~ /^\s*$/ ) {
warn $p . "Direktive '$key' ohne erforderlichen Wert angegeben (Datei '$f', Zeile $linenr).\n";
return 1;
if ( not defined($val) or $val =~ /^\s*$/ ) {
$wert = 1;
} else {
- $wert = $self->to_int($val);
+ $wert = to_int($val);
}
}
unless ( defined $wert ) {
if ( $directive =~ /^($pattern)$/i ) {
$negated = $1;
$key = lc($2);
- print $p . "Untersuche String-Direktive '$key' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche String-Direktive '$key' ...\n" if verbose() > 5;
if ( $DirectivesWithValues{$key} ) {
- print $p . "Direktive '$key' muss einen Wert haben.\n" if $self->verbose() > 5;
+ print $p . "Direktive '$key' muss einen Wert haben.\n" if verbose() > 5;
unless ( defined $val and $val !~ /^\s*$/ ) {
warn $p . "Direktive '$key' ohne erforderlichen Wert angegeben (Datei '$f', Zeile $linenr).\n";
return 1;
$pattern = join( "|", keys %GlobalDirectives );
if ( $directive =~ /^($pattern)$/i ) {
$key = lc($1);
- print $p . "Untersuche globale Direktive '$key' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche globale Direktive '$key' ...\n" if verbose() > 5;
if ( $in_fd ) {
warn $p . "Direktive '$key' ist nicht innerhalb von Logdatei-Definitionen erlaubt (Datei '$f', Zeile $linenr).\n";
return 1;
}
if ( $DirectivesWithValues{$key} ) {
- print $p . "Direktive '$key' muss einen Wert haben.\n" if $self->verbose() > 5;
+ print $p . "Direktive '$key' muss einen Wert haben.\n" if verbose() > 5;
unless ( defined $val and $val ne "" ) {
warn $p . "Direktive '$key' ohne erforderlichen Wert angegeben (Datei '$f', Zeile $linenr).\n";
return 1;
$val = "" if $key eq "compressoptions" and not defined $val;
if ( $key eq 'compresscmd' ) {
if ( $name = $self->check_compress_program( $val ) ) {
- print $p . "Setze 'compress_cmd' auf '$name'.\n" if $self->verbose() > 4;
+ print $p . "Setze 'compress_cmd' auf '$name'.\n" if verbose() > 4;
$self->{'compress_cmd'} = $name;
return 1;
}
return 1;
}
}
- print $p . "Setze '$key' auf '$val'.\n" if $self->verbose() > 4;
+ print $p . "Setze '$key' auf '$val'.\n" if verbose() > 4;
$self->{$key} = $val;
return 1;
}
if ( $directive =~ /^($pattern)$/i ) {
$key = lc($1);
- print $p . "Untersuche Rotations-Perioden-Direktive '$key' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche Rotations-Perioden-Direktive '$key' ...\n" if verbose() > 5;
if ( $ValidPeriods{$key} ) {
warn $p . "Direktive '$key' darf keine Argumente haben ( '$val' in Datei '$f', Zeile $linenr).\n"
if defined $val and $val !~ /^\s*$/;
$val = $ValidPeriods{$key};
} else {
- $val = $self->period2days($val);
+ $val = period2days($val);
unless ( defined $val ) {
warn $p . "Ungueltige Perioden-Definition (Datei '$f', Zeile $linenr).\n";
return 1;
}
}
- print $p . "Setze Periode in '$wo' auf '$val'.\n" if $self->verbose() > 5;
+ print $p . "Setze Periode in '$wo' auf '$val'.\n" if verbose() > 5;
$self->{$wo}{'period'} = $val;
return 1;
}
if ( $directive =~ /^(no)?dateext$/ ) {
$negated = $1;
- print $p . "Untersuche Direktive 'dateext' ...\n" if $self->verbose() > 5;
- @Values = $val ? $self->parts( $val ) : ();
+ print $p . "Untersuche Direktive 'dateext' ...\n" if verbose() > 5;
+ @Values = $val ? parts( $val ) : ();
if ( $negated ) {
$val = 0;
}
}
- print $p . "Setze dateext in '$wo' auf $val.\n" if $self->verbose() > 5;
+ print $p . "Setze dateext in '$wo' auf $val.\n" if verbose() > 5;
$self->{$wo}{'dateext'} = $val;
if ( defined $name ) {
- print $p . "Setze datepattern in '$wo' auf '$name'.\n" if $self->verbose() > 5;
+ print $p . "Setze datepattern in '$wo' auf '$name'.\n" if verbose() > 5;
$self->{$wo}{'datepattern'} = $name;
}
return 1;
# Erstellungs-Modi festlegen
if ( $directive eq 'create' ) {
- print $p . "Untersuche Direktive 'create' ...\n" if $self->verbose() > 5;
- @Values = $val ? $self->parts( $val ) : ();
+ print $p . "Untersuche Direktive 'create' ...\n" if verbose() > 5;
+ @Values = $val ? parts( $val ) : ();
$self->{$wo}{'copytruncate'} = 0;
# Mode (Permission) definition
$negated = $1;
$directive = 'olddir';
- print $p . "Untersuche Direktive 'olddir' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche Direktive 'olddir' ...\n" if verbose() > 5;
if ( $negated ) {
- print $p . "Direktive 'olddir' wird in '$wo' enfernt.\n" if $self->verbose() > 5;
+ print $p . "Direktive 'olddir' wird in '$wo' enfernt.\n" if verbose() > 5;
$self->{$wo}{'olddir'} = undef;
return 1;
}
- @Values = $val ? $self->parts( $val ) : ();
+ @Values = $val ? parts( $val ) : ();
if ( $Values[0] ) {
$self->{$wo}{'olddir'} = {} unless $self->{$wo}{'olddir'};
if ( $line =~ /^size(?:\s*(?:=|\s)\s*(.*)?)?$/i ) {
$directive = 'size';
$val = $1;
- print $p . "Untersuche Direktive 'size' mit Groesse '" . (defined $val ? $val : "<undef>") . "' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche Direktive 'size' mit Groesse '" . (defined $val ? $val : "<undef>") . "' ...\n" if verbose() > 5;
unless ( defined $val ) {
warn $p . "Ungueltige Groessen-Definition (Datei '$f', Zeile $linenr).\n";
return 1;
}
- $wert = $self->human2byte($val);
+ $wert = human2byte($val);
unless ( defined $wert ) {
warn $p . "Ungueltige Groessen-Definition ('$val' in Datei '$f', Zeile $linenr).\n";
return 1;
}
- print $p . "Setze Groesse in '$wo' auf '$wert'.\n" if $self->verbose() > 5;
+ print $p . "Setze Groesse in '$wo' auf '$wert'.\n" if verbose() > 5;
$self->{$wo}{'size'} = $wert;
return 1;
}
if ( $directive =~ /^taboo(ext|file|prefix)$/ ) {
$key = lc($1);
- print $p . "Untersuche globale Direktive '$key' ...\n" if $self->verbose() > 5;
+ print $p . "Untersuche globale Direktive '$key' ...\n" if verbose() > 5;
if ( $in_fd ) {
warn $p . "Direktive '$directive' ist nicht innerhalb von Logdatei-Definitionen erlaubt (Datei '$f', Zeile $linenr).\n";
return 1;
}
- @Values = $val ? $self->parts( $val ) : ();
+ @Values = $val ? parts( $val ) : ();
my $extend = 0;
if ( $Values[0] and $Values[0] eq "+" ) {
$extend = 1;
my $f = shift || "'unknown'";
my $in_fd = shift || 0;
my $linenr = shift || "'unknown'";
- my $p = $self->verbose() ? __PACKAGE__ . "::do_include(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::do_include(): " : "";
my ( $if, $dir, $basename, $name, $bname, $found, $pattern );
# Das Wort 'include selbst wegschmeissen
$line =~ s/^\S+\s*//;
- my @Values = $self->parts($line);
+ my @Values = parts($line);
# Fehlermeldung, wenn der Dateiname fehlt
unless ( @Values ) {
warn $p . "Rekursives Includen von '$if' in Datei '$f', Zeile $linenr.\n";
return undef;
}
- print $p . "Include Datei '$if' ...\n" if $self->{'verbose'} > 1;
+ print $p . "Include Datei '$if' ...\n" if verbose() > 1;
$self->{'included_files'}{$if} = 1;
return $self->read( $f );
}
if ( -d $if ) {
- print $p . "Include Verzeichnis '$if' ...\n" if $self->{'verbose'} > 1;
+ print $p . "Include Verzeichnis '$if' ...\n" if verbose() > 1;
foreach $name ( glob( "$if/.* $if/*") ) {
$bname = basename( $name );
next if $bname eq "." or $bname eq "..";
- print $p . "Checke Include-Datei '$if/$bname' ...\n" if $self->{'verbose'} > 1;
+ print $p . "Checke Include-Datei '$if/$bname' ...\n" if verbose() > 1;
if ( -d "$if/$bname" ) {
# Keine Verzeichnis-Rekursion !!!
- print $p . "Verzeichnis '$if/$bname' wird uebergangen.\n" if $self->{'verbose'} > 1;
+ print $p . "Verzeichnis '$if/$bname' wird uebergangen.\n" if verbose() > 1;
next;
}
foreach $pattern ( @{$self->{'taboo'}} ) {
if ( $bname =~ /$pattern/ ) {
$found = 1;
- print $p . "Datei '$if/$bname' matcht Tabu-Pattern '$pattern', wird uebergangen.\n" if $self->{'verbose'} > 1;
+ print $p . "Datei '$if/$bname' matcht Tabu-Pattern '$pattern', wird uebergangen.\n" if verbose() > 1;
last;
}
}
warn $p . "Rekursives Includen von '$name' in Datei '$f', Zeile $linenr.\n";
return undef;
}
- print $p . "Include Datei '$name' ...\n" if $self->{'verbose'} > 1;
+ print $p . "Include Datei '$name' ...\n" if verbose() > 1;
$self->{'included_files'}{$name} = 1;
return undef unless $self->read( $name );
my $f = shift || "'unknown'";
my $in_fd = shift || 0;
my $linenr = shift || "'unknown'";
- my $p = $self->verbose() ? __PACKAGE__ . "::do_logfilescript(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::do_logfilescript(): " : "";
- print $p . "Scriptdefinition '$line' (Datei '$f', Zeilennr $linenr) ...\n" if $self->verbose() > 5;
+ print $p . "Scriptdefinition '$line' (Datei '$f', Zeilennr $linenr) ...\n" if verbose() > 5;
my ( $directive, $val ) = $line =~ /^(\S+)\s*(.*)/;
$directive = lc($directive);
return undef;
}
- my @Values = $val ? $self->parts( $val ) : ();
+ my @Values = $val ? parts( $val ) : ();
my $name;
if ( $Values[0] ) {
my $f = shift || "'unknown'";
my $in_fd = shift || 0;
my $linenr = shift || "'unknown'";
- my $p = $self->verbose() ? __PACKAGE__ . "::do_script(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::do_script(): " : "";
- print $p . "Scriptdefinition '$line' (Datei '$f', Zeilennr $linenr) ...\n" if $self->verbose() > 5;
+ print $p . "Scriptdefinition '$line' (Datei '$f', Zeilennr $linenr) ...\n" if verbose() > 5;
my ( $directive, $val ) = $line =~ /^(\S+)\s*(.*)/;
$directive = lc($directive);
return undef;
}
- my @Values = $val ? $self->parts( $val ) : ();
+ my @Values = $val ? parts( $val ) : ();
unless ( $Values[0] ) {
warn $p . "Direktive '$directive' ohne gueltigen Scriptnamen (Datei '$f', Zeile $linenr).\n";
#------------------------------------------------------------------------------------------
-=head2 human2byte( $wert )
-
-Wandelt eine Bytzahl, die fuer den Menschen lesbar ist, in einen Integer-Wert von Bytes um.
-
-Z.Bsp.:
-
- '10 KByte' => 10240
-
-=cut
-
-sub human2byte($$) {
-
- my $self = shift;
- my $val = shift;
- my $p = $self->verbose() ? __PACKAGE__ . "::human2byte(): " : "";
-
- return undef unless defined $val;
- print $p . "aufgerufen mit '" . $val . "'.\n" if $self->verbose() > 5;
- return 0 if $val =~ /^\s*$/;
-
- my ( $unit, $factor );
-
- if ( $val =~ /^\s*(\d+(?:\.\d*)?)\s*(?:([kmg])(?:b|byte)?)?\s*$/i ) {
- $factor = 1;
- $val = $1 + 0;
- $unit = lc( $2 || 'b' );
- if ( $unit eq 'k' ) {
- $factor = 1024;
- } elsif ( $unit eq 'm' ) {
- $factor = 1024 * 1024;
- } elsif ( $unit eq 'g' ) {
- $factor = 1024 * 1024 * 1024;
- }
- print $p . "Faktor fuer '$unit': " . $factor . "'.\n" if $self->verbose() > 5;
- $val = int( $val * $factor );
- } else {
- warn $p . "Ungueltige Byte-Angabe: '$val'.\n";
- $val = undef;
- }
-
- return $val;
-
-}
-
-#------------------------------------------------------------------------------------------
-
=head2 log_begin( $_, $f, $in_fd, $linenr );
Verarbeitet den Beginn einer Logfile-Definition (Geschweifte Klammer auf).
my $f = shift || "'unknown'";
my $in_fd = shift || 0;
my $linenr = shift || "'unknown'";
- my $p = $self->verbose() ? __PACKAGE__ . "::log_begin(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::log_begin(): " : "";
my ( @Values, @Files, @FileGlob );
my ( $name, $file );
}
$line =~ s/\s*{$//;
- @Values = $self->parts( $line );
+ @Values = parts( $line );
unless ( @Values ) {
warn $p . "Kein Dateiname fuer eine Logdatei am Beginn der Logdatei-Definition in Konfigdatei '" .
return undef;
}
- print "\nStart Logfile-Definition:\n - " . join( "\n - ", @Values ) . "\n" if $self->{'verbose'} > 2;
+ print "\nStart Logfile-Definition:\n - " . join( "\n - ", @Values ) . "\n" if verbose() > 2;
@Files = ();
foreach $name ( @Values ) {
my $f = shift || "'unknown'";
my $in_fd = shift || 0;
my $linenr = shift || "'unknown'";
- my $p = $self->verbose() ? __PACKAGE__ . "::log_end(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::log_end(): " : "";
my ( $name );
return undef;
}
- print "Ende Logfile-Definition\n" if $self->{'verbose'} > 2;
- print $p . "\$self->{'newfile'}: " . Dumper $self->{'newfile'} if $self->{'verbose'} > 3;
+ print "Ende Logfile-Definition\n" if verbose() > 2;
+ print $p . "\$self->{'newfile'}: " . Dumper $self->{'newfile'} if verbose() > 3;
foreach $name ( @{$self->{'newfile'}{'files'}} ) {
%{$self->{'logfiles'}{$name}} = %{$self->{'newfile'}};
my $self = shift;
my $pre = shift || "script";
- my $p = $self->verbose() ? __PACKAGE__ . "::new_script_name(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::new_script_name(): " : "";
my $i = 0;
my $name = "$pre$i";
return $name;
}
-#------------------------------------------------------------------------------------
-
-=head2 parts( $string )
-
-Zerlegt einen String an Whitespaces in seine Bestandteile unter Beachtung
-von Quotierung und gibt diese als Array zurueck.
-
-=cut
-
-sub parts($$) {
-
- my $self = shift;
- my $p = $self->verbose() ? __PACKAGE__ . "::parts(): " : "";
-
- my $term = shift;
- my @Parts = ();
- my $part;
-
- while ( $term =~ /"([^"\\]*(?:\\.[^"\\]*)*)"|(\S+)/g ) {
- $part = $1 || $2;
- $part =~ s/\\"/"/g;
- push @Parts, $part;
- }
-
- return @Parts;
-
-}
-
-#------------------------------------------------------------------------------------------
-
-=head2 period2days( $period_string )
-
-Wandelt eine Perioden-Angabe der Form "5d 8h" in eine Anzahl von Tagen um.
-
-=cut
-
-sub period2days($$) {
-
- my $self = shift;
- my $period = shift;
- my $p = $self->verbose() ? __PACKAGE__ . "::period2days(): " : "";
-
- $period = "" unless defined $period;
- my $orig = $period;
- print $p . "Aufgerufen mit '" . $period . "'.\n" if $self->verbose() > 5;
- $period =~ s/^\s+//;
- $period =~ s/\s+$//;
-
- if ( $period eq "" ) {
- warn $p . "Ungültige Periodenangabe.\n";
- return undef;
- }
-
- if ( $period =~ /^now$/i ) {
- # Rotation immer sofort
- return 0;
- }
-
- if ( $period =~ /^never$/i ) {
- # Rotation in 400 Jahren (also hoffentlich nie)
- return 36525 * 4;
- }
-
- my $days = undef;
- my $t = 0;
-
- if ( $period =~ /(\d+)\s*h(?:ours?)?/i ) {
- $t = $1;
- print $p . "$t Stunden.\n" if $self->verbose() > 5;
- $t /= 24;
- $days += $t;
- $period =~ s/\d+\s*h(?:ours?)?//i;
- }
- print $p . "Noch uebrig nach Stunden: '$period'.\n" if $self->verbose() > 5;
-
- if ( $period =~ /(\d+(?:\.\d*)?)\s*w(?:eeks?)?/i ) {
- $t = $1;
- print $p . "$t Wochen.\n" if $self->verbose() > 5;
- $t *= 7;
- $days += $t;
- $period =~ s/\d+(?:\.\d*)?\s*w(?:eeks?)?//i;
- }
- print $p . "Noch uebrig nach Wochen: '$period'.\n" if $self->verbose() > 5;
-
- if ( $period =~ /(\d+(?:\.\d*)?)\s*m(?:onths?)?/i ) {
- $t = $1;
- print $p . "$t Monate.\n" if $self->verbose() > 5;
- $t *= 30.4;
- $days += $t;
- $period =~ s/\d+(?:\.\d*)?\s*m(?:onths?)?//i;
- }
- print $p . "Noch uebrig nach Monaten: '$period'.\n" if $self->verbose() > 5;
-
- if ( $period =~ /(\d+(?:\.\d*)?)\s*y(?:ears?)?/i ) {
- $t = $1;
- print $p . "$t Jahre.\n" if $self->verbose() > 5;
- $t *= 365;
- $days += $t;
- $period =~ s/\d+(?:\.\d*)?\s*y(?:ears?)?//i;
- }
- print $p . "Noch uebrig nach Jahren: '$period'.\n" if $self->verbose() > 5;
-
- if ( $period =~ /(\d+(?:\.\d*)?)\s*(?:d(?:ays?)?\s*)?$/i ) {
- $t = $1;
- print $p . "$t Tage.\n" if $self->verbose() > 5;
- $days += $t;
- $period =~ s/\d+(?:\.\d*)?\s*(?:d(?:ays?)?\s*)?$//i;
- }
- print $p . "Noch uebrig nach Tagen: '$period'.\n" if $self->verbose() > 5;
-
- warn $p . "Ungueltige Angabe einer Periode: '" . $orig . "'.\n" unless $period =~ /^\s*$/;
-
- return $days;
-
-}
-
#------------------------------------------------------------------------------------------
=head2 read( $file )
my $self = shift;
my $file = shift;
- my $p = $self->verbose() ? __PACKAGE__ . "::read(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::read(): " : "";
my ( $dir, $f, $real_dir, $linenr, $in_fd, $in_script, $newscript, $lastrow, $pattern );
my ( @Lines );
- print $p . "Aufgerufen mit '" . $file . "'.\n" if $self->verbose() > 2;
+ print $p . "Aufgerufen mit '" . $file . "'.\n" if verbose() > 2;
unless ( $file ) {
carp $p . "Keine Datei uebergeben.\n";
$f = $file;
}
$real_dir = abs_path( $dir );
- print $p . "Real-Path: '$real_dir', Basename: '$f'\n" if $self->{'verbose'} > 2;
+ print $p . "Real-Path: '$real_dir', Basename: '$f'\n" if verbose() > 2;
$f = $real_dir . "/" . $f;
if ( $self->{'configfiles'}{$f} ) {
sub reset_defaults($) {
my $self = shift;
- my $p = $self->verbose() ? __PACKAGE__ . "::reset_defaults(): " : "";
+ my $p = verbose() ? __PACKAGE__ . "::reset_defaults(): " : "";
my $uid = $>;
my ( $gid ) = $) =~ /^(\d+)/;
- print $p . "Setze \$self->{'defaults'} auf Vorgabewerte zurueck.\n" if $self->verbose > 3;
+ print $p . "Setze \$self->{'defaults'} auf Vorgabewerte zurueck.\n" if verbose() > 3;
$self->{'default'} = {
'compress' => undef,
#------------------------------------------------------------------------------------------
-=head2 to_bool( $wert )
-
-Wandelt den uebergebenen Scalar sicher in einen Wahrheitswert (0 oder 1) um.
-
-=cut
-
-sub to_bool($$) {
-
- my $self = shift;
- my $val = shift;
- my $p = $self->verbose() ? __PACKAGE__ . "::to_bool(): " : "";
-
- return 0 unless defined $val;
- print $p . "aufgerufen mit '" . $val . "'.\n" if $self->verbose() > 5;
- return 0 if $val =~ /^\s*$/;
-
- if ( $val =~ /^\s*y(?:es?)?/i or
- $val =~ /^\s*ja?/i or
- $val =~ /^\s*[wt]\s*$/i or
- $val =~ /^\s*on\s*$/i or
- $val =~ /^\s*wahr|true/i ) {
- return 1;
- }
-
- if ( $val =~ /^\s*no?/i or
- $val =~ /^\s*ne(?:in?)?/i or
- $val =~ /^\s*f\s*$/i or
- $val =~ /^\s*off\s*$/i or
- $val =~ /^\s*falsch|false/i ) {
- return 0;
- }
-
- my $intval = $self->to_int($val);
- if ( defined $intval ) {
- return $intval ? 1 : 0;
- }
-
- return $val ? 1 : 0;
-
-}
-
-#------------------------------------------------------------------------------------------
-
-=head2 to_int( $wert, $signed )
-
-Wandelt den übergebenen Wert sicher in eine Integer-Zahl um.
-
-Dabei legt der optionale logische Parameter $signed fest, ob auch
-vorzeichenbehaftete Werte zulässig sind.
-
-Wenn keine gültige Zahl übergeben wird, wird undef zurückgegeben.
-
-=cut
-
-sub to_int($$;$) {
-
- my $self = shift;
- my $val = shift;
- my $signed = shift;
- my $p = $self->verbose() ? __PACKAGE__ . "::to_int(): " : "";
-
- return undef unless defined $val;
- print $p . "aufgerufen mit '" . $val . "'.\n" if $self->verbose() > 5;
- unless ( $val =~ /\d/ ) {
- return undef;
- }
-
- if ( $signed ) {
- $val =~ s/.*((-\s*)?\d+).*/$1$2/;
- } else {
- $val =~ s/.*(\d+).*/$1/;
- }
- print $p . "Neuer Wert: '" . ( defined($val) ? $val : "<undef>" ) . "'.\n" if $self->verbose() > 5;
-
- return $val + 0;
-
-}
-
-#------------------------------------------------------------------------------------------
-
-=head2 verbose()
-
-Setzt bzw. gibt den Verbose-Level dieses Moduls zurueck.
-
-=cut
-
-sub verbose($;$) {
-
- my $self = shift;
- my $nv;
- if ( @_ ) {
- $nv = shift;
- $nv = defined $nv ? ( $nv =~ /(\d+)/ ? $1 : 0 ) : 0;
- $self->{'verbose'} = $nv;
- }
- return $self->{'verbose'};
-
-}
-
+1;
__END__
use Data::Dumper;
use LogRotate;
+use LogRotate::Common;
-my $MainVersion = "2.0";
my $Revis = <<'ENDE';
$Revision$
ENDE
$Revis =~ s/^.*:\s*(\S+)\s*\$.*/$1/s;
-our $VERSION = $MainVersion . "." . $Revis;
+our $VERSION = $LogRotate::Common::LOGROTATE_VERSION . "." . $Revis;
$Data::Dumper::Indent = 1;
$Data::Dumper::Sortkeys = 1;
$verbose = $Debug unless $verbose;
}
+verbose($verbose);
+
$test = 1 if $config_check;
unless ( $test ) {
=head2 B<check_pidfile($pidfile)>
-Inspiziert das übergebene PID-File.
+Inspiziert das uebergebene PID-File.
=cut
=head1 AUTHOR
-Frank Brehm <frank.brehm@gmx.de>
-
-=head1 ChangeLog
-
- $Log: logrotate.pl,v $
- Revision 1.22 2004/04/28 17:41:03 fbrehm
- Bug in Auflösung geglobter Logfilenamen bereinigt
-
- Revision 1.21 2003/09/03 11:51:16 fbrehm
- Korrektur in check_create() beim Ermitteln der Permissions und Besitzerangaben,
- in rotate_file() das Wegschmeißen alter rotierter Logfiles reorganisiert,
- kleine kosmetische Änderungen
-
- Revision 1.20 2003/09/02 16:35:29 fbrehm
- FORCE-Modus wird jetzt tatsächlich unterstützt,
- Rotieren einer einzelnen Datei in rotatate_file() ausgelagert,
- Unterstützung der Direktive rotate X,
- Unterstützung der Direktive sharedscripts,
- Unterstützung der Direktive extension,
- Fileglobbing als logfile Direktive möglich,
- dafür C-Kommentare in Config-Datien nicht mehr möglich
- Setzen von mtime der komprimierten Datei auf die der Original-Datei,
- Beim Komprimieren wird beste Kompression eingeschaltet.
-
- Revision 1.19 2003/09/01 18:24:38 fbrehm
- Fehelrbereinigung in test_for_rotate()
-
- Revision 1.18 2003/09/01 17:11:59 fbrehm
- Veränderungen bei der Ausführung der Pre- und Post-Rotate-Scripte.
-
- Revision 1.17 2003/09/01 17:04:22 fbrehm
- Änderungen bei der Verbosity,
- Fehlerbereinigung bei der Vergabe Rechte und Eigentümerschaft erstellte Verzeichnisse,
- POD-Informationen hinzugefügt
-
- Revision 1.16 2003/08/29 12:04:52 fbrehm
- Fehler in check_log_end() beseitigt,
- Kompatibilität zu Perl 5.005 hergestellt.
-
- Revision 1.15 2003/08/27 17:07:21 fbrehm
- Bugbereinigung in rotate_time_over (Jörn) und beim Setzen von noolddir.
-
- Revision 1.14 2003/08/27 14:39:10 fbrehm
- Korrekturen an rotate_time_over().
-
- Revision 1.13 2003/08/27 14:01:54 fbrehm
- Neuerstellen, chown und chmod nach move nachgepflegt.
-
- Revision 1.12 2003/08/27 11:01:30 fbrehm
- Bei includes Pfad davorgehängt,
- Systemaufrufe im Testmodus unterbunden,
- Chown der komprimierten Datei nur, wenn andere Besitzrechte.
-
- Revision 1.11 2003/08/27 08:56:15 fbrehm
- Funktion compress_files() fertiggestellt.
-
- Revision 1.10 2003/08/27 07:33:21 fbrehm
- Fehler in rotate_time_over() bereinigt
-
- Revision 1.9 2003/08/27 07:20:50 fbrehm
- Syntaxfehler bereinigt
-
- Revision 1.8 2003/08/27 07:15:18 fbrehm
- Scharfmachen von mkdir, copy und move und der Scripte
-
- Revision 1.7 2003/08/25 19:13:16 fbrehm
- Funktion write_status() eingefügt mit Aufruf,
- Funktion compress_files() begonnen.
-
- Revision 1.6 2003/08/25 17:10:03 fbrehm
- Funktion get_logfile_target() zur Ermittlung des rotierten Dateinamens eingefügt und in rotate() aufgerufen.
-
- Revision 1.5 2003/08/25 16:18:43 fbrehm
- Neue Funktion create_olddir eingefügt,
- neue Behandlung von olddir mit Create-Mode und Besitzrechten.
-
- Revision 1.4 2003/08/25 13:03:20 fbrehm
- Ausgabe des Script-Kommandos vor der Ausführung.
-
- Revision 1.3 2003/08/25 12:23:20 fbrehm
- logrotate.pm mit in den Quelltext von logrotate.pl aufgenommen.
-
- Revision 1.2 2003/08/23 10:35:25 fbrehm
- Kosmetische Korrekturen: gequotete Key-Literale
-
- Revision 1.1 2003/08/23 09:53:40 fbrehm
- Übernahme des Perl-Logrotate-Projekts
-
-
-=cut
-
-=head1 ChangeLog logrotate.pm
-
- Revision 1.7 2003/08/25 12:03:57 fbrehm
- Wird in die logrotate.pl mit aufgenommen, da seperat nicht benötigt.
-
- Revision 1.6 2003/08/25 11:12:52 jvalent
- Bug mit realpath() bei Perl 5.6.0 bereinigt.
-
- Revision 1.5 2003/08/23 11:54:07 fbrehm
- Ausgabe der schreienden Funktion erst ab Verbose-Level > 1
-
- Revision 1.4 2003/08/23 10:51:16 fbrehm
- Keine Verzeichnisse innerhalb include-Dirs.
-
- Revision 1.3 2003/08/23 10:35:25 fbrehm
- Kosmetische Korrekturen: gequotete Key-Literale
-
- Revision 1.2 2003/08/23 09:55:38 fbrehm
- Aktuelle Version des Moduls
-
- Revision 1.1 2003/08/23 09:53:40 fbrehm
- Übernahme des Perl-Logrotate-Projekts
-
+Frank Brehm <frank@brehm-online.com>
=cut