#!/usr/bin/perl # edit_rule.cgi # Show a form for editing or creating a rule require './itsecur-lib.pl'; &can_use_error("rules"); &ReadParse(); @rules = &list_rules(); if ($in{'new'}) { &header(defined($in{'insert'}) ? $text{'rule_title3'} : $text{'rule_title1'}, "", undef, undef, undef, undef, &apply_button()); $rule = { 'enabled' => 1, 'action' => &default_action(), 'service' => '', 'source' => '', 'dest' => '', 'time' => '*', 'index' => scalar(@rules) }; } else { &header($text{'rule_title2'}, "", undef, undef, undef, undef, &apply_button()); $rule = $rules[$in{'idx'}]; } print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$text{'rule_header'}
\n"; # Show comment print "\n", $rule->{'desc'} eq "*" ? "" : $rule->{'desc'}; # Show source and destination foreach $s ('source', 'dest') { $not = ($rule->{$s} =~ s/^!//g); $sm = $rule->{$s} eq '*' ? 0 : $rule->{$s} =~ /^\@/ ? 2 : $rule->{$s} =~ /^\%/ ? 3 : 1; # Any address options print "\n"; } # Show service $not = ($rule->{'service'} =~ s/^!//g); print "\n"; # Show action upon match print "\n"; # Show time that this rule applies $inp = &time_input("time", $rule->{'time'} eq "*" ? undef : $rule->{'time'}); if ($inp) { print "\n"; } else { print "\n"; } # Show enabled flag print "\n"; # Show input for position of rule print "\n"; print "
$text{'rule_desc'} \n"; printf "
",$text{'rule_'.$s}, " \n"; print "\n"; print "\n"; # Specific host option print "\n"; # Host group option local $gv; if ($rule->{$s} =~ /^\@(.*)$/) { $gv = $rule->{$s}; $gv =~ s/(^|\s)@/$1/g; } $gi = &group_input("${s}_group", $gv, 0, 1); if ($gi || $sm == 2) { print "\n"; } # Interface option $ii = &iface_input("${s}_iface", $rule->{$s} =~ /^\%(.*)$/ ? $1 : undef); if ($ii || $sm == 3) { print "\n"; } print "
"; printf " %s\n", $sm == 0 ? "checked" : "", $text{'rule_anywhere'}; print "
"; printf " %s\n", $sm == 1 ? "checked" : "", $text{'rule_host'}; print ""; printf "\n", $sm == 1 ? $rule->{$s} : ""; print "$text{'rule_named'}\n"; print "
\n"; print " ", "$text{'rule_resolv'}\n"; print "
"; printf " %s\n", $sm == 2 ? "checked" : "", $text{'rule_group'}; print ""; print $gi; print "
"; printf " %s\n", $sm == 3 ? "checked" : "", $text{'rule_iface'}; print ""; print $ii; print "
\n"; print "
\n"; #printf " %s\n", # $not ? "checked" : "", $text{'rule_not'}; print "
$text{'rule_service'} \n"; printf " %s\n", $rule->{'service'} eq '*' ? "checked" : "", $text{'rule_anyserv'}; printf " %s
\n", $rule->{'service'} eq '*' ? "" : "checked", $text{'rule_oneserv'}; print &service_input("service", $rule->{'service'} eq '*' ? undef : $rule->{'service'}, 0, 1); print "
\n"; #printf " %s\n", # $not ? "checked" : "", $text{'rule_not'}; print "
$text{'rule_action'} \n"; print &action_input("action", $rule->{'action'}); print " \n"; printf " %s\n", $rule->{'log'} ? 'checked' : '', $text{'rule_log'}; print "
$text{'rule_time'} "; printf " %s\n", $rule->{'time'} eq "*" ? "checked" : "", $text{'rule_anytime'}; printf " %s\n", $rule->{'time'} eq "*" ? "" : "checked", $text{'rule_seltime'}; print $inp; print "
$text{'rule_enabled'} \n"; printf " %s\n", $rule->{'enabled'} ? "checked" : "", $text{'yes'}; printf " %s\n", $rule->{'enabled'} ? "" : "checked", $text{'no'}; print "
$text{'rule_atpos'} \n"; print "
\n"; if ($in{'new'}) { print "\n"; } else { print "\n"; print "\n"; } print "
\n"; &can_edit_disable("rules"); print "
\n"; &footer("list_rules.cgi", $text{'rules_return'});