Corrections to make tcp-wrappers more compliant
authorJamie Cameron <jcameron@webmin.com>
Thu, 7 Aug 2008 21:25:59 +0000 (21:25 +0000)
committerJamie Cameron <jcameron@webmin.com>
Thu, 7 Aug 2008 21:25:59 +0000 (21:25 +0000)
tcpwrappers/edit_rule.cgi
tcpwrappers/index.cgi
tcpwrappers/lang/en
tcpwrappers/save_rule.cgi

index 7be188b..805b379 100755 (executable)
@@ -3,15 +3,18 @@
 
 require './tcpwrappers-lib.pl';
 &ReadParse();
+$type = $in{'allow'} ? 'allow' : 'deny';
 
 @xservices = &list_services();
 unshift @xservices, "ALL" if (@xservices);
 
 if ($in{'new'}) {
-    &ui_print_header(undef, $text{'edit_title1'}, "", "edit_rule");
+    &ui_print_header(undef, $text{'edit_title1'.$type}, "", "edit_rule");
 } else {
-    &ui_print_header(undef, $text{'edit_title2'}, "", "edit_rule");
-    @rules = &list_rules($in{'allow'} ? $config{'hosts_allow'} : $config{'hosts_deny'});
+    &ui_print_header(undef, $text{'edit_title2'.$type}, "", "edit_rule");
+
+    # Get the rule
+    @rules = &list_rules($config{'hosts_'.$type});
     ($rule) = grep { $_->{'id'} == $in{'id'} } @rules;
     $rule || &error($text{'edit_eid'});
 
@@ -48,19 +51,23 @@ print &ui_form_start("save_rule.cgi", "post");
 print &ui_hidden("new", $in{'new'}),"\n";
 print &ui_hidden("id", $in{'id'}),"\n";
 print &ui_hidden($in{'allow'} ? 'allow' : 'deny', 1),"\n";
-#print &ui_table_start($text{'edit_header'}, "width=100%", 5);
-print &ui_table_start($text{'edit_header'}, "", 5);
-
+print &ui_table_start($text{'edit_header'}, "", 2);
 
 # Services
 if (@xservices) {
-    # listed from (x)inetd
-    print &ui_table_row("<b>$text{'edit_service'}</b> ", &ui_select("service", \@services, \@xservices, 10, 1));
-    print &ui_table_row("EXCEPT", &ui_select("service_except", \@eservices, \@xservices, 10, 1));
-} else {
-    print &ui_table_row("<b>$text{'edit_service'}</b> ", &ui_textbox("service_custom", join(",",@services), 23));
-    print &ui_table_row("EXCEPT", &ui_textbox("service_except_custom", join(",",@eservices), 23));    
-}
+       # listed from (x)inetd
+       print &ui_table_row($text{'edit_service'},
+               &ui_select("service", \@services, \@xservices, 5, 1));
+       print &ui_table_row($text{'edit_except'},
+               &ui_select("service_except", \@eservices, \@xservices, 5, 1));
+       }
+else {
+       print &ui_table_row($text{'edit_service'},
+               &ui_textbox("service_custom", join(",",@services), 40));
+       print &ui_table_row($text{'edit_except'},
+               &ui_textbox("service_except_custom", join(",",@eservices), 40));    
+       }
+
 print &ui_table_hr();
 
 # Hosts
@@ -69,25 +76,30 @@ $found = '';
 foreach my $w (@wildcards) {
     $found = $w if ($w eq $hosts);
 }
-print &ui_table_row("<b>$text{'edit_hosts'}</b> ", &ui_opt_textbox("host_text", ($found ? "" : $hosts), 41, &ui_select("host_select", $found, \@wildcards)), 3);
-print &ui_table_row("", "<b>EXCEPT</b> ".&ui_textbox("host_except", $ehosts, 50), 3);
+print &ui_table_row($text{'edit_hosts'},
+       &ui_opt_textbox("host_text", ($found ? "" : $hosts), 41,
+               &ui_select("host_select", $found, \@wildcards)), 3);
+print &ui_table_row($text{'edit_hostsexcept'},
+       &ui_textbox("host_except", $ehosts, 50), 3);
+
 print &ui_table_hr();
 
 # Shell commands
 @directives = ('none', 'spawn', 'twist');
 @cmds = split /:/, $rule->{'cmd'} if (!$in{'new'});
-print &ui_table_row($text{'edit_cmd'}, "", 3);
+$label = $text{'edit_cmd'};
 for ($i = 0; $i <= $#cmds; $i++) {
     $cmds[$i] =~ s/^\s*//;
     my $choosed = $cmds[$i] =~ /^(spawn|twist)/ ? $1 : 'none';
     $cmds[$i] =~ s/^\s*${choosed}\s*// if ($cmds[$i] =~ /^\s*(spawn)|(twist)/); 
-    print &ui_table_row("", &ui_select("cmd_directive_$i", $choosed, \@directives).' '.&ui_textbox("cmd_$i", $cmds[$i], 50), 3);
+    print &ui_table_row($label, &ui_select("cmd_directive_$i", $choosed, \@directives).' '.&ui_textbox("cmd_$i", $cmds[$i], 50), 3);
+    $label = "";
 }
+
 # Row for new command
-print &ui_table_row("", &ui_select("cmd_directive_$i", undef, \@directives).' '.&ui_textbox("cmd_$i", "", 50), 3);
+print &ui_table_row($label, &ui_select("cmd_directive_$i", undef, \@directives).' '.&ui_textbox("cmd_$i", "", 50), 3);
 print &ui_hidden("cmd_count", $i),"\n";
 
-
 # Form footer
 print &ui_table_end();
 print &ui_form_end([
@@ -95,4 +107,4 @@ print &ui_form_end([
                   : ( [ "save", $text{'save'} ],
                       [ "delete", $text{'delete'} ] ) ]);
 
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer("index.cgi?type=$type", $text{'index_return'});
index 10c7a4d..0353a2e 100755 (executable)
@@ -1,51 +1,59 @@
 #!/usr/local/bin/perl
-# index.cgi
+# Show allowed and denied lists
 
 require './tcpwrappers-lib.pl';
-
+&ReadParse();
 &ui_print_header(undef, $text{'index_title'}, "", "intro", 1, 1);
 
-# ALLOWED HOSTS & DENIED HOSTS
+# Start of tabs
+@types = ('allow', 'deny');
+print &ui_tabs_start(
+       [ map { [ $_, $text{'index_'.$_.'title'},
+                 "index.cgi?type=$_" ] } @types ],
+       "type",
+       $in{'type'} || "allow",
+       1);
+
+# Tables of rules
 foreach my $type ('allow', 'deny') {
-    my $file = $type eq 'allow' ? $config{'hosts_allow'} : $config{'hosts_deny'};
-    @rules = &list_rules($file);
-    print "<font size=+1>".($type eq 'allow' ? $text{'index_allowtitle'} : $text{'index_denytitle'})."</font><p />\n";
-    if (@rules) {
-       print &ui_form_start("delete_rules.cgi", "post");
-       print &ui_hidden($type, 1),"\n";
-       print &select_all_link("d"),"\n";
-       print &select_invert_link("d"),"\n";
-       print "<a href='edit_rule.cgi?$type=1&new=1'>$text{'index_add'}</a><br />\n";
-       
-       @tds = ( "width=5" );
-       print &ui_columns_start([
-                                "",
-                                $text{'index_service'},
-                                $text{'index_hosts'},
-                                $text{'index_cmd'},
-                                ], "width=100%", 0, \@tds);
+       print &ui_tabs_start_tab("type", $type);
+       my $file = $type eq 'allow' ? $config{'hosts_allow'}
+                                   : $config{'hosts_deny'};
+       @rules = &list_rules($file);
+
+       # Build grid of rules
+       @table = ( );
        foreach my $r (@rules) {
-           print &ui_checked_columns_row([
-                                          "<a href='edit_rule.cgi?$type=1&id=$r->{'id'}'>$r->{'service'}</a>",
-                                          $r->{'host'},
-                                          $r->{'cmd'} ? join("<br>", split /:/, $r->{'cmd'}) : $text{'index_none'},
-                                          ], \@tds, "d", $r->{'id'});
-       }
-       print &ui_columns_end();
-       
-       print &select_all_link("d"),"\n";
-       print &select_invert_link("d"),"\n";
-       print "<a href='edit_rule.cgi?$type=1&new=1'>$text{'index_add'}</a><br />\n";
-       print &ui_form_end([ [ "delete", $text{'index_delete'} ] ]);
-    } else {
-       if (-r $file) {
-           print "<b>".&text('index_norule', $file)."</b><br />\n";
-           print "<a href='edit_rule.cgi?$type=1&new=1'>$text{'index_add'}</a><p />\n";
-       } else {
-           print "<br>".&text('index_nofile', $file)."</b><p />\n";
+               push(@table, [
+                       { 'type' => 'checkbox', 'name' => 'd',
+                         'value' => $r->{'id'} },
+                       "<a href='edit_rule.cgi?$type=1&id=$r->{'id'}'>".
+                        "$r->{'service'}</a>",
+                       $r->{'host'},
+                       $r->{'cmd'} ? join("<br>", split /:/, $r->{'cmd'})
+                                   : $text{'index_none'},
+                       ]);
+               }
+
+       # Show them
+       print &ui_form_columns_table(
+               "delete_rules.cgi",
+              [ [ "delete", $text{'index_delete'} ] ],
+              1,
+              [ [ "edit_rule.cgi?$type=1&new=1", $text{'index_add'} ] ],
+              [ [ $type, 1 ] ],
+              [ "", $text{'index_service'},
+                $text{'index_hosts'}, $text{'index_cmd'}, ],
+              100,
+              \@table,
+              undef,
+              0,
+              undef,
+              &text('index_norule', $file),
+              );                       
+       print &ui_tabs_end_tab("type", $type);
        }
-    }   
-    print "<hr />\n" if ($type eq 'allow');
-}
+
+print &ui_tabs_end(1);
 
 &ui_print_footer("/", $text{'index_return'});
index 0bf36ea..244587d 100644 (file)
@@ -2,21 +2,25 @@ index_title=TCP Wrappers
 index_return=index
 index_allowtitle=Allowed hosts
 index_denytitle=Denied hosts
-index_norule=File '$1' doesn't contain any rules.
+index_norule=No rules have been defined in <tt>$1</tt> yet.
 index_nofile=File '$1' doesn't exist - check your <a href="/config.cgi?tcpwrappers">module configuration</a>
-index_add=Add rule
+index_add=Add a new rule.
 index_service=Daemon
 index_hosts=Hosts
 index_cmd=Command
 index_delete=Delete Selected
 index_none=none
 
-edit_title1=Create rule
-edit_title2=Edit rule
+edit_title1allow=Create Allow Rule
+edit_title2allow=Edit Allow Rule
+edit_title1deny=Create Deny Rule
+edit_title2deny=Edit Deny Rule
 edit_eid=This rule was not found
 edit_header=Rule options
-edit_service=Service
-edit_hosts=Hosts
+edit_service=Services
+edit_except=Except services
+edit_hosts=Remote hosts
+edit_hostsexcept=Except hosts
 edit_cmd=Shell commands
 edit_efound=Daemon '$1' was not found in xinetd configuration.
 
index 579cfb7..deb6d20 100755 (executable)
@@ -4,7 +4,8 @@
 require './tcpwrappers-lib.pl';
 &ReadParse();
 &error_setup($text{'save_errtitle'});
-$file = $in{'allow'} ? $config{'hosts_allow'} : $config{'hosts_deny'};
+$type = $in{'allow'} ? 'allow' : 'deny';
+$file = $config{'hosts_'.$type};
 @rules = &list_rules($file);
 
 if (!$in{'new'}) {
@@ -16,6 +17,7 @@ if (!$in{'new'}) {
 if ($in{'delete'}) {
     # Delete one rule
     &delete_rule($file, $rule);
+    goto ALLDONE;
 } else {
     # Check input
     &error($text{'save_eservice'}) if ($in{'service_custom'} && $in{'service_custom'} !~ /^[\w\d\s\-\/\.,]+$/);
@@ -27,12 +29,14 @@ if ($in{'delete'}) {
     for (my $i = 0; $i <= $in{'cmd_count'}; $i++) {
        &error($text{'save_ecmd'}) if ($in{'cmd_'.$i} && $in{'cmd_'.$i} !~ /^[\w\d\s\-\/\@\%\|\(\)\'\"\&\.,]+$/);
     }
-
 }
 
 # Build rule record
 if ($in{'service_custom'}) {
-    $service = $in{'service_custom'}." EXCEPT ".$in{'service_except_custom'};
+    $service = $in{'service_custom'};
+    if ($in{'service_except_custom'}) {
+       $service .= " EXCEPT ".$in{'service_except_custom'};
+    }
 } else {
     # listed from (x)inetd
     $service = join(",", split /\0/, $in{'service'});
@@ -66,6 +70,8 @@ if ($in{'new'}) {
     &modify_rule($file, $rule, \%newrule);
 }
 
+ALLDONE:
 &unlock_file($file);
 &webmin_log($in{'new'} ? "create" : $in{'delete'} ? "delete" : "modify", "rule", $rule->{'id'});
-&redirect("");
+&redirect("index.cgi?type=$type");
+