1#!/usr/local/bin/perl 2# Create, update or delete a port 3 4use strict; 5use warnings; 6require './firewalld-lib.pl'; 7our (%in, %text); 8&error_setup($text{'port_err'}); 9&ReadParse(); 10 11# Get the zone and rule 12my @zones = &list_firewalld_zones(); 13my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones; 14$zone || &error($text{'port_ezone'}); 15my ($oldport, $oldproto); 16if ($in{'id'}) { 17 ($oldport, $oldproto) = split(/\//, $in{'id'}); 18 } 19 20my $logport; 21if ($in{'delete'}) { 22 # Just remove the existing rule 23 my $err = &delete_firewalld_port($zone, $oldport, $oldproto); 24 &error($err) if ($err); 25 $logport = $oldport; 26 } 27else { 28 # Validate inputs 29 my $port = &parse_port_field(\%in, ''); 30 my $proto = $in{'proto'}; 31 32 # Create or update allowed port 33 if (!$in{'new'}) { 34 my $err = &delete_firewalld_port($zone, $oldport, $oldproto); 35 &error($err) if ($err); 36 } 37 my $err = &create_firewalld_port($zone, $port, $proto); 38 &error($err) if ($err); 39 $logport = $port; 40 } 41&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'update', 42 'port', $logport); 43&redirect("index.cgi?zone=".&urlize($zone->{'name'})); 44