You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-admin/sysklogd/files/syslogd-listfiles

102 lines
2.7 KiB

#! /usr/bin/perl
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
# Tue Jan 13 01:47:57 MET 1998: Martin Schulze <joey@infodrom.north.de>
# Fixed typo.
#
# Modified logfile detection routine to take care of double
# listed logfiles. It does this by using a hash instead of
# immediate printout. Thanks to Roman Hodek <roman@debian.org>
# for providing an appropriate patch.
$conf = "/etc/syslog.conf";
$opt_daily = 1;
$opt_all = 0;
$opt_auth = 0;
$opt_news = 0;
sub usage
{
print STDERR
"
Debian GNU/Linux syslogd-listfiles =VER=. Copyright (C) 1997
Martin Schulze. This is free software; see the GNU General Public Licence
version 2 or later for copying conditions. There is NO warranty.
Usage: syslogd-listfiles <options>
Options: -f file specifies another syslog.conf file
-a | --all list all files (including news)
--auth list all files containing auth.<some prio>
--news include news logfiles, too
-w | --weekly use weekly pattern instead of daily
";
}
while (@ARGV) {
$_=shift(@ARGV);
if (m/^-f$/) {
$conf = shift(@ARGV);
} elsif (m/^--weekly|-w$/) {
$opt_daily = 0;
} elsif (m/^(-a|--all)$/) {
$opt_all = 1;
} elsif (m/^--auth$/) {
$opt_auth = 1;
} elsif (m/^--news$/) {
$opt_news = 1;
} else {
&usage();exit (0);
}
}
open (C, $conf) || die "Can't open $conf, $!";
while (<C>) {
next if (/^(\#|$)/);
chop;
s/\s*(\S.*)$/$1/ if ($line);
$line .= $_;
chop ($line) if (/\\$/);
if (!/\\$/) {
$line =~ s/\s+/\t/;
$line =~ s/\t-/\t/;
push (@lines, $line) if ($line =~ /\t\/(?!dev\/)/);
$line = "";
}
}
close (C);
foreach $line (@lines) {
($pat,$file) = split (/\t/,$line);
# handled by news.daily from INN
next if (!$opt_news && ($pat =~ /news\.(crit|err|notice)/));
if ($opt_all) {
$output{$file} = 1;
} elsif ($opt_auth) {
$output{$file} = 1 if ($pat =~ /auth[^\.]*\.(?!none).*/);
} else {
$i = ($pat =~ /\*\.\*/);
$output{$file} = 1 if (($i && $opt_daily) || (!$i && !$opt_daily));
}
}
foreach $file (keys (%output)) {
print $file . "\n";
}