print "<table width=100%><tr>\n";
local $d = $table->{'defaults'}->{$c};
if ($d ne '-') {
+ # Built-in chain
if ($access{'policy'}) {
# Change default button
print "<td width=33% nowrap>",
print "</td>\n";
}
else {
- # Delete chain and delete selected buttons
+ # Custom chain
if ($access{'delchain'}) {
+ # Delete and rename chain buttons
print "<td width=33%>",
&ui_submit($text{'index_cdelete'}, "delete"),
+ "\n",
+ &ui_submit($text{'index_crename'}, "rename"),
"</td>\n";
}
print "<td align=center width=33%>\n";
if (@rules) {
- # Delete chain button
+ # Clear chain button
if ($access{'delchain'}) {
print &ui_submit($text{'index_cclear'},
"clear"),"\n";
index_jump=Run chain $1
index_radd=Add Rule
index_cdelete=Delete Chain
+index_crename=Rename Chain
index_cclear=Clear All Rules
index_cdeletesel=Delete Selected
index_cmovesel=Move Selected
log_delete_rule=Deleted rule in chain $1 in table $2
log_move_rule=Moved rule in chain $1 in table $2
log_delete_chain=Deleted chain $1 from table $2
+log_rename_chain=Renamed chain $1 in table $2
log_clear_chain=Cleared chain $1 in table $2
log_create_chain=Created chain $1 in table $2
log_modify_chain=Set default action for chain $1 in table $2
move_dest=Destination chain
move_ok=Move Now
move_header=Rule move options
+
+rename_title=Rename Chain
+rename_count=Rules in chain
+rename_chain=Current name
+rename_name=New name
+rename_ok=Rename Now
+rename_header=Chain rename options
+rename_adjust=Modify other rules that jump to this chain?
+rename_none=None
+rename_ecannot=You are not allowed to rename chains
print "<input type=submit name=confirm value='$text{'delete_ok'}'>\n";
print "</center></form>\n";
+ &ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'});
+ }
+elsif ($in{'rename'} && $in{'newname'}) {
+ # Rename a chain
+ &lock_file($iptables_save_file);
+ $access{'delchain'} || &error($text{'rename_ecannot'});
+ $in{'newname'} =~ /^\S+$/ || &error($text{'new_ename'});
+
+ # Change the chain on each rule
+ foreach $r (@{$table->{'rules'}}) {
+ if ($r->{'chain'} eq $in{'chain'}) {
+ $r->{'chain'} = $in{'newname'};
+ }
+ }
+
+ # Rename the default
+ $table->{'defaults'}->{$in{'newname'}} =
+ $table->{'defaults'}->{$in{'chain'}};
+ delete($table->{'defaults'}->{$in{'chain'}});
+
+ # Adjust any other rules
+ if ($in{'adjust'}) {
+ foreach $r (@{$table->{'rules'}}) {
+ if ($r->{'j'} && $r->{'j'}->[1] eq $in{'chain'}) {
+ $r->{'j'}->[1] = $in{'newname'};
+ }
+ }
+ }
+
+ &run_before_command();
+ &save_table($table);
+ &run_after_command();
+ ©_to_cluster();
+ &unlock_file($iptables_save_file);
+ &webmin_log("rename", "chain", undef, { 'chain' => $in{'chain'},
+ 'table' => $table->{'name'} });
+ &redirect("index.cgi?table=$in{'table'}");
+ }
+elsif ($in{'rename'}) {
+ # Show chain rename form
+ &ui_print_header(undef, $text{'rename_title'}, "");
+
+ print &ui_form_start("save_policy.cgi");
+ print &ui_hidden("table", $in{'table'});
+ print &ui_hidden("chain", $in{'chain'});
+ print &ui_hidden("rename", 1);
+ print &ui_table_start($text{'rename_header'}, undef, 2);
+
+ # Number of rules and old name
+ @rules = grep { $_->{'chain'} eq $in{'chain'} } @{$table->{'rules'}};
+ print &ui_table_row($text{'rename_chain'}, $in{'chain'});
+ print &ui_table_row($text{'rename_count'},
+ scalar(@rules) || $text{'rename_none'});
+
+ # Destination chain
+ print &ui_table_row($text{'rename_name'},
+ &ui_textbox("newname", undef, 20));
+
+ # Adjust other rules?
+ print &ui_table_row(" ",
+ &ui_checkbox("adjust", 1, $text{'rename_adjust'}, 1));
+
+ print &ui_table_end();
+ print &ui_form_end([ [ undef, $text{'rename_ok'} ] ]);
+
&ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'});
}
elsif ($in{'delsel'}) {