home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / sbin / syslogd-listfiles < prev    next >
Text File  |  1999-01-20  |  3KB  |  102 lines

  1. #! /usr/bin/perl
  2.  
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; either version 2 of the License, or
  6. # (at your option) any later version.
  7. # This program is distributed in the hope that it will be useful,
  8. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10. # GNU General Public License for more details.
  11. # You should have received a copy of the GNU General Public License
  12. # along with this program; if not, write to the Free Software
  13. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
  14.  
  15. # Tue Jan 13 01:47:57 MET 1998: Martin Schulze <joey@infodrom.north.de>
  16. #    Fixed typo.
  17. #
  18. #    Modified logfile detection routine to take care of double
  19. #    listed logfiles.  It does this by using a hash instead of
  20. #    immediate printout.  Thanks to Roman Hodek <roman@debian.org>
  21. #    for providing an appropriate patch.
  22.  
  23. $conf = "/etc/syslog.conf";
  24. $opt_daily = 1;
  25. $opt_all = 0;
  26. $opt_auth = 0;
  27. $opt_news = 0;
  28.  
  29. sub usage
  30. {
  31.     print STDERR
  32. "
  33. Debian GNU/Linux syslogd-listfiles =VER=.  Copyright (C) 1997
  34. Martin Schulze.  This is free software; see the GNU General Public Licence
  35. version 2 or later for copying conditions.  There is NO warranty.
  36.  
  37. Usage: syslogd-listfiles <options>
  38. Options: -f file    specifies another syslog.conf file
  39.          -a | --all    list all files (including news)
  40.          --auth        list all files containing auth.<some prio>
  41.          --news        include news logfiles, too
  42.          -w | --weekly    use weekly pattern instead of daily
  43. ";
  44. }
  45.  
  46. while (@ARGV) {
  47.     $_=shift(@ARGV);
  48.     if (m/^-f$/) {
  49.     $conf = shift(@ARGV);
  50.     } elsif (m/^--weekly|-w$/) {
  51.     $opt_daily = 0;
  52.     } elsif (m/^(-a|--all)$/) {
  53.     $opt_all = 1;
  54.     } elsif (m/^--auth$/) {
  55.     $opt_auth = 1;
  56.     } elsif (m/^--news$/) {
  57.     $opt_news = 1;
  58.     } else {
  59.     &usage();exit (0);
  60.     }
  61. }
  62.  
  63. open (C, $conf) || die "Can't open $conf, $!";
  64. while (<C>) {
  65.     next if (/^(\#|$)/);
  66.     chop;
  67.  
  68.     s/\s*(\S.*)$/$1/ if ($line);
  69.  
  70.     $line .= $_;
  71.     chop ($line) if (/\\$/);
  72.     if (!/\\$/) {
  73.     $line =~ s/\s+/\t/;
  74.     $line =~ s/\t-/\t/;
  75.     push (@lines, $line) if ($line =~ /\t\/(?!dev\/)/);
  76.     $line = "";
  77.     }
  78. }
  79. close (C);
  80.  
  81. foreach $line (@lines) {
  82.     ($pat,$file) = split (/\t/,$line);
  83.  
  84.     # handled by news.daily from INN
  85.     next if (!$opt_news && ($pat =~ /news\.(crit|err|notice)/));
  86.  
  87.     if ($opt_all) {
  88.     $output{$file} = 1;
  89.     } elsif ($opt_auth) {
  90.     $output{$file} = 1 if ($pat =~ /auth[^\.]*\.(?!none).*/);
  91.     } else {
  92.     $i = ($pat =~ /\*\.\*/);
  93.     $output{$file} = 1 if (($i && $opt_daily) || (!$i && !$opt_daily));
  94.     }
  95. }
  96.  
  97. foreach $file (keys (%output)) {
  98.     print $file . "\n";
  99. }
  100.