summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAn-Cheng Huang <ancheng@vyatta.com>2008-02-08 16:12:39 -0800
committerAn-Cheng Huang <ancheng@vyatta.com>2008-02-08 16:12:39 -0800
commit5fefd9826bd75dee9f7bd253b69cf5c0259bc269 (patch)
tree0cae8970ab21877fcc65b025bbafb312a8f1f777 /scripts
parent4658f6263d756066712e5c0be11a21e5dcc9d774 (diff)
downloadvyatta-cfg-firewall-5fefd9826bd75dee9f7bd253b69cf5c0259bc269.tar.gz
vyatta-cfg-firewall-5fefd9826bd75dee9f7bd253b69cf5c0259bc269.zip
fix for bug 2789: merge port configuration options.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/firewall/VyattaIpTablesAddressFilter.pm110
1 files changed, 8 insertions, 102 deletions
diff --git a/scripts/firewall/VyattaIpTablesAddressFilter.pm b/scripts/firewall/VyattaIpTablesAddressFilter.pm
index aa65854..e3f5d22 100644
--- a/scripts/firewall/VyattaIpTablesAddressFilter.pm
+++ b/scripts/firewall/VyattaIpTablesAddressFilter.pm
@@ -1,6 +1,7 @@
package VyattaIpTablesAddressFilter;
use VyattaConfig;
+use VyattaMisc;
my %_protocolswithports = (
tcp => 1,
@@ -15,10 +16,7 @@ my %fields = (
_range_stop => undef,
_network => undef,
_address => undef,
- _portname => undef,
- _portrange_start => undef,
- _portrange_stop => undef,
- _portnumber => undef,
+ _port => undef,
_protocol => undef,
_src_mac => undef,
);
@@ -53,13 +51,7 @@ sub setup {
$self->{_network} = $self->{_address};
$self->{_address} = undef;
}
- my @tmp = $config->returnValues("port-number");
- $self->{_portnumber} = [ @tmp ];
- @tmp = $config->returnValues("port-name");
- $self->{_portname} = [ @tmp ];
- $self->{_portrange_start} = $config->returnValue("port-range start");
- $self->{_portrange_stop} = $config->returnValue("port-range stop");
-
+ $self->{_port} = $config->returnValue("port");
$self->{_src_mac} = $config->returnValue("mac-address");
return 0;
@@ -84,13 +76,7 @@ sub setupOrig {
$self->{_network} = $self->{_address};
$self->{_address} = undef;
}
- my @tmp = $config->returnOrigValues("port-number");
- $self->{_portnumber} = [ @tmp ];
- @tmp = $config->returnOrigValues("port-name");
- $self->{_portname} = [ @tmp ];
- $self->{_portrange_start} = $config->returnOrigValue("port-range start");
- $self->{_portrange_stop} = $config->returnOrigValue("port-range stop");
-
+ $self->{_port} = $config->returnOrigValue("port");
$self->{_src_mac} = $config->returnValue("mac-address");
return 0;
@@ -104,89 +90,13 @@ sub print {
print "range stop: $self->{_range_stop}\n" if defined $self->{_range_stop};
print "network: $self->{_network}\n" if defined $self->{_network};
print "address: $self->{_address}\n" if defined $self->{_address};
- print "port-name: " . (join ',', $self->{_portname}) . "\n"
- if defined $self->{_portname};
- print "port-range start: $self->{_portrange_start}\n" if defined $self->{_portrange_start};
- print "port-range stop: $self->{_portrange_stop}\n" if defined $self->{_portrange_stop};
- print "port-number: " . (join ',', $self->{_portnumber}) . "\n"
- if defined $self->{_portnumber};
+ print "port: $self->{_port}\n" if defined $self->{_port};
print "protocol: $self->{_protocol}\n" if defined $self->{_protocol};
print "src-mac: $self->{_src_mac}\n" if defined $self->{_src_mac};
return 0;
}
-sub handle_ports {
- my $num_ref = shift;
- my $name_ref = shift;
- my $pstart = shift;
- my $pstop = shift;
- my $can_use_port = shift;
- my $prefix = shift;
- my $proto = shift;
-
- my $rule_str = "";
- my ($ports, $prange) = (0, 0);
- my @pnums = @{$num_ref};
- my @pnames = @{$name_ref};
- $ports = ($#pnums + 1) + ($#pnames + 1);
-
- if (defined($pstart) && defined($pstop)) {
- if ($pstop < $pstart) {
- return (undef, "invalid port range $pstart-$pstop");
- }
- $ports += ($pstop - $pstart + 1);
- $prange = ($pstop - $pstart - 1);
- }
- if (($ports > 0) && (!$can_use_port)) {
- return (undef, "ports can only be specified when protocol is \"tcp\" "
- . "or \"udp\" (currently \"$proto\")");
- }
- if (($ports - $prange) > 15) {
- return (undef, "source/destination port specification only supports "
- . "up to 15 ports (port range counts as 2)");
- }
- if ($ports > 1) {
- $rule_str .= " -m multiport --${prefix}ports ";
- my $first = 1;
- if ($#pnums >= 0) {
- my $pstr = join(',', @pnums);
- $rule_str .= "$pstr";
- $first = 0;
- }
- if ($#pnames >= 0) {
- if ($first == 0) {
- $rule_str .= ",";
- }
- my $pstr = join(',', @pnames);
- $rule_str .= "$pstr";
- $first = 0;
- }
- if (defined($pstart) && defined($pstop)) {
- if ($first == 0) {
- $rule_str .= ",";
- }
- if ($pstart == $pstop) {
- $rule_str .= "$pstart";
- } else {
- $rule_str .= "$pstart:$pstop";
- }
- $first = 0;
- }
- } elsif ($ports > 0) {
- $rule_str .= " --${prefix}port ";
- if ($#pnums >= 0) {
- $rule_str .= "$pnums[0]";
- } elsif ($#pnames >= 0) {
- $rule_str .= "$pnames[0]";
- } else {
- # no number, no name, range of 1
- $rule_str .= "$pstart";
- }
- }
- return ($rule_str, undef);
-}
-
sub rule {
my ($self) = @_;
my $rule = "";
@@ -225,13 +135,9 @@ sub rule {
}
my ($port_str, $port_err)
- = handle_ports($self->{_portnumber},
- $self->{_portname},
- $self->{_portrange_start},
- $self->{_portrange_stop},
- $can_use_port,
- ($self->{_srcdst} eq "source") ? "s" : "d",
- $self->{_protocol});
+ = VyattaMisc::getPortRuleString($self->{_port}, $can_use_port,
+ ($self->{_srcdst} eq "source") ? "s" : "d",
+ $self->{_protocol});
return (undef, $port_err) if (!defined($port_str));
$rule .= $port_str;
return ($rule, undef);