# # HPT Advanced Readonly # v 0.1 # # Copyright (c) 2002 Andrew Sagulin. Freeware. # # $Id: ro_parser.pl,v 1.2 2002/09/27 08:05:24 andrews42 Rel $ use strict; my $workdir; BEGIN { my $wd; if ($^O = 'MSWin32') { ($wd = $0) =~ s/[^\\]+$//;} else {($wd = $0) =~ s/[^\/]+$//;} $workdir = $wd ? $wd : "."; } use lib ($workdir); use Hpt_ro; my @acl = Hpt_ro::readroconf($Hpt_ro::ro_conf); my @echoes = Hpt_ro::readhptconf($Hpt_ro::hptconf); my $curtime = time; my $denyonly = (@ARGV && lc($ARGV[0]) eq 'denyonly') ? 1 : 0; # print expired rules if they exist { my @exrules; { my ($d,$m,$y) = (localtime())[3..5]; my $curtime = sprintf("%02d%02d%02d",$y % 100, $m + 1, $d); foreach(@acl) { next unless $_->{date}; if ($_->{date} lt $curtime) { push @exrules,$_->{cfgline}; $_ = undef; } } } if (@exrules) { print "== Expired rules ==\n\n"; print "$_\n" foreach(@exrules); print "\n"; } } print "== Echoes ==\n\n"; foreach(@echoes) { my $echo = $_; my $echotag = $echo->{echotag}; my $echogroup = $echo->{group} ? $echo->{group} : ""; my @links; my $header = $echotag . ($echogroup ? " -g $echogroup" : "") . "\nLinks:\n"; $echogroup = "-" . $echogroup if $echogroup; # temporary @acl (exclude rules no matched with echotag) my @tacl = @acl; FORLINKS: foreach(@{$echo->{links}}) { my $link = $_; FORACL: foreach(@tacl) { my $acl = $_; next unless $acl; my $matched = 0; foreach(@{$acl->{echogroup}}) { my $group = $_; if ($group =~ /^-/) { next unless $echogroup; if ($echogroup eq $group) {$matched = 1; last;} } else { if ($echotag =~ /$group/) {$matched = 1; last;} } } unless ($matched) { $_ = undef; # exclude by echotag next FORACL; } $matched = 0; foreach(@{$acl->{linkgroup}}) { if ($link =~ /$_/) {$matched = 1; last;} } next FORACL unless $matched; push @links,"$link, " . ($acl->{deny} ? "deny" : "allow") . " - $acl->{cfgline}" if $acl->{deny} || ! $denyonly; next FORLINKS; } # foreach(@tacl) push @links,"$link, deny - no rule matched"; } # foreach(@{$echo->{links}}) if (@links) { print $header; print " $_\n" foreach(@links); print "\n"; } }