mirror of
https://github.com/webmin/webmin.git
synced 2025-08-19 01:15:14 +00:00
Button and script to delete a zone
This commit is contained in:
53
firewalld/create_zone.cgi
Normal file
53
firewalld/create_zone.cgi
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/local/bin/perl
|
||||||
|
# Create a new zone, and add some allowed ports to it
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
require 'firewalld-lib.pl';
|
||||||
|
our (%text, %in);
|
||||||
|
&ReadParse();
|
||||||
|
&error_setup($text{'zone_err'});
|
||||||
|
|
||||||
|
# Validate inputs
|
||||||
|
$in{'name'} =~ /^[a-z0-9\.\_\-]+$/i || &error($text{'zone_ename'});
|
||||||
|
my @zones = &list_firewalld_zones();
|
||||||
|
my ($clash) = grep { $_->{'name'} eq $in{'name'} } @zones;
|
||||||
|
$clash && &error($text{'zone_eclash'});
|
||||||
|
|
||||||
|
# Add the zone
|
||||||
|
my $err = &create_firewalld_zone($in{'name'});
|
||||||
|
&error($err) if ($err);
|
||||||
|
|
||||||
|
# Find the Webmin port
|
||||||
|
my @webminports;
|
||||||
|
if (&foreign_installed("webmin")) {
|
||||||
|
&foreign_require("webmin");
|
||||||
|
my @socks = &webmin::get_miniserv_sockets();
|
||||||
|
@webminports = &unique(map { $_->[1] } @webminports);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
@webminports = ( $ENV{'SERVER_PORT'} || 10000 );
|
||||||
|
}
|
||||||
|
|
||||||
|
# Work out which ports to allow
|
||||||
|
my (@addports, @addservs);
|
||||||
|
if ($in{'mode'} == 1) {
|
||||||
|
# Copy from another zone
|
||||||
|
my ($source) = grep { $_->{'name'} eq $in{'source'} } @zones;
|
||||||
|
@addports = @{$source->{'ports'}};
|
||||||
|
@addservs = @{$source->{'services'}};
|
||||||
|
}
|
||||||
|
elsif ($in{'mode'} >= 2) {
|
||||||
|
# Common allowed ports
|
||||||
|
push(@addports, "ssh/tcp", "auth/tcp");
|
||||||
|
foreach my $webminport (@webminports) {
|
||||||
|
push(@addports, $webminport."-".($webminport+10)."/tcp");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add them
|
||||||
|
# XXX
|
||||||
|
|
||||||
|
&webmin_log("create", "zone", $in{'name'});
|
||||||
|
&redirect("index.cgi?zone=".&urlize($in{'name'}));
|
||||||
|
|
39
firewalld/delete_zone.cgi
Normal file
39
firewalld/delete_zone.cgi
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/local/bin/perl
|
||||||
|
# Delete a zone, after asking for confirmation
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
require 'firewalld-lib.pl';
|
||||||
|
our (%text, %in);
|
||||||
|
&ReadParse();
|
||||||
|
&error_setup($text{'delzone_err'});
|
||||||
|
|
||||||
|
# Get the zone
|
||||||
|
my @zones = &list_firewalld_zones();
|
||||||
|
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||||
|
$zone || &error($text{'port_ezone'});
|
||||||
|
$zone->{'default'} && &error($text{'delzone_edefault'});
|
||||||
|
|
||||||
|
if ($in{'confirm'}) {
|
||||||
|
# Just do it
|
||||||
|
my $err = &delete_firewalld_zone($zone);
|
||||||
|
&error($err) if ($err);
|
||||||
|
&webmin_log("delete", "zone", $zone->{'name'});
|
||||||
|
&redirect("index.cgi");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# Ask first
|
||||||
|
&ui_print_header(undef, $text{'delzone_title'}, "");
|
||||||
|
|
||||||
|
print &ui_confirmation_form("delete_zone.cgi",
|
||||||
|
&text('delzone_rusure', "<tt>$zone->{'name'}</tt>",
|
||||||
|
scalar(@{$zone->{'ports'}}),
|
||||||
|
scalar(@{$zone->{'services'}})),
|
||||||
|
[ [ 'zone', $zone->{'name'} ] ],
|
||||||
|
[ [ 'confirm', $text{'delete'} ] ],
|
||||||
|
);
|
||||||
|
|
||||||
|
&ui_print_footer("index.cgi?zone=".&urlize($in{'zone'}),
|
||||||
|
$text{'index_return'});
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@
|
|||||||
# XXX interfaces for the zone
|
# XXX interfaces for the zone
|
||||||
# XXX add a new zone!
|
# XXX add a new zone!
|
||||||
# XXX make a zone the default?
|
# XXX make a zone the default?
|
||||||
|
# XXX delete zone
|
||||||
|
|
||||||
BEGIN { push(@INC, ".."); };
|
BEGIN { push(@INC, ".."); };
|
||||||
use strict;
|
use strict;
|
||||||
@ -190,5 +191,26 @@ foreach my $i (&list_system_interfaces()) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# create_firewalld_zone(name)
|
||||||
|
# Add a new zone with the given name
|
||||||
|
sub create_firewalld_zone
|
||||||
|
{
|
||||||
|
my ($name) = @_;
|
||||||
|
my $cmd = "$config{'firewall_cmd'} --permanent --new-zone ".quotemeta($name);
|
||||||
|
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
|
||||||
|
return $? ? $out : undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
# delete_firewalld_zone(&zone)
|
||||||
|
# Removes the specified zone
|
||||||
|
sub delete_firewalld_zone
|
||||||
|
{
|
||||||
|
my ($zone) = @_;
|
||||||
|
my $cmd = "$config{'firewall_cmd'} --permanent --delete-zone ".
|
||||||
|
quotemeta($zone->{'name'});
|
||||||
|
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
|
||||||
|
return $? ? $out : undef;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
@ -11,6 +11,11 @@ if ($in{'addzone'}) {
|
|||||||
&redirect("zone_form.cgi?zone=".&urlize($in{'zone'}));
|
&redirect("zone_form.cgi?zone=".&urlize($in{'zone'}));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ($in{'delzone'}) {
|
||||||
|
# Redirect to zone creation form
|
||||||
|
&redirect("delete_zone.cgi?zone=".&urlize($in{'zone'}));
|
||||||
|
return;
|
||||||
|
}
|
||||||
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
|
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
|
||||||
|
|
||||||
# Is firewalld working?
|
# Is firewalld working?
|
||||||
@ -42,6 +47,7 @@ print "<b>$text{'index_zone'}</b> ",
|
|||||||
"onChange='form.submit()'")," ",
|
"onChange='form.submit()'")," ",
|
||||||
&ui_submit($text{'index_zoneok'})," ",
|
&ui_submit($text{'index_zoneok'})," ",
|
||||||
&ui_submit($text{'index_zoneadd'}, "addzone")," ",
|
&ui_submit($text{'index_zoneadd'}, "addzone")," ",
|
||||||
|
&ui_submit($text{'index_zonedel'}, "delzone")," ",
|
||||||
"<p>\n";
|
"<p>\n";
|
||||||
print &ui_form_end();
|
print &ui_form_end();
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ index_cerr=The FirewallD module cannot be used : $1
|
|||||||
index_zone=Show rules in zone:
|
index_zone=Show rules in zone:
|
||||||
index_zoneok=Change
|
index_zoneok=Change
|
||||||
index_zoneadd=Add Zone..
|
index_zoneadd=Add Zone..
|
||||||
|
index_zonedel=Delete Zone
|
||||||
index_type=Rule type
|
index_type=Rule type
|
||||||
index_port=Port or service
|
index_port=Port or service
|
||||||
index_proto=Protocol
|
index_proto=Protocol
|
||||||
@ -63,6 +64,14 @@ zone_mode1=Copy from zone
|
|||||||
zone_mode2=SSH, IDENT and Webmin only
|
zone_mode2=SSH, IDENT and Webmin only
|
||||||
zone_mode3=SSH, IDENT, Webmin and high ports
|
zone_mode3=SSH, IDENT, Webmin and high ports
|
||||||
zone_mode4=Ports used for virtual hosting
|
zone_mode4=Ports used for virtual hosting
|
||||||
|
zone_err=Failed to create zone
|
||||||
|
zone_ename=Missing or invalid zone name
|
||||||
|
zone_eclash=A zone with the same name already exists
|
||||||
|
|
||||||
|
delzone_title=Delete Zone
|
||||||
|
delzone_err=Failed to delete zone
|
||||||
|
delzone_edefault=The default zone cannot be removed
|
||||||
|
delzone_rusure=Are you sure you want to delete the zone $1, which contains $2 ports and $3 services?
|
||||||
|
|
||||||
restart_err=Failed to apply configuration
|
restart_err=Failed to apply configuration
|
||||||
stop_err=Failed to stop FirewallD
|
stop_err=Failed to stop FirewallD
|
||||||
@ -81,3 +90,5 @@ log_delete_serv=Removed allowed service $1
|
|||||||
log_update_serv=Updated allowed service $1
|
log_update_serv=Updated allowed service $1
|
||||||
log_delete_rules=Removed $1 allowed ports
|
log_delete_rules=Removed $1 allowed ports
|
||||||
log_ifaces_zone=Updated interfaces for zone $1
|
log_ifaces_zone=Updated interfaces for zone $1
|
||||||
|
log_create_zone=Created zone $1
|
||||||
|
log_delete_zone=Deleted zone $1
|
||||||
|
Reference in New Issue
Block a user