Tom

I have an action extension script that tests the variable $family to determine 
if IPv4 or IPv6 is being used. 

The script worked with shorewall(6) 4.4.19. I believe it stopped working 
shorewall(6) 4.4.20 Beta4.

I now get the following messages:

Compiling /etc/shorewall1/action.Extns for chain %Extns...

Use of uninitialized value $Shorewall::Rules::family in numeric eq (==) at 
(eval 9) line 28, <$currentfile> line 18.

Is there anything I need to do to be able reference $family within the script.

I have attached a copy of the script.

Thanks.

Steven.
use Shorewall::Chains;
use feature 'say';
our $family;

#@params = split( /,/, $tag ), $tag='' unless @params;

fatal_error 'Extns rules must include <action>,<extension>,<prameters> as the 
log tag or params' unless @params >= 3;

my ( $module, $comp, $hl, $ttl, $len, $name, $set, @lens, $xchainref );
my $rule = '';
my $count = 1;
my $action = $params[0];

fatal_error "Invalid action $action" unless $action eq 'ACCEPT' || $action eq 
'DROP' || $action eq 'REJECT' || $action eq 'LOG';
fatal_error "LOG requires a log level" if $action eq 'LOG' && $level eq 'none';
$action = 'reject' if $action eq 'REJECT';

if  ( $action ne 'LOG' && $level ne 'none' )  {
    $xchainref = new_chain 'filter' , "$chainref->{name}%";
    log_rule_limit $level, $xchainref, $chainref->{name}, $action, '', $tag, 
'add', '';
    add_rule $xchainref, "-j $action";
}

while ( $count < @params ) {
    $module = $params[$count];

    if ( $module eq 'ttl' ) {
        fatal_error "Extns ttl is not available in shorewall6. Use hl" unless 
$family == F_IPV4;
        fatal_error "Extns ttl requires 2 parameters" unless  @params >= $count 
+ 3;
        $comp = $params[$count+1];
        fatal_error "Invalid ttl comparitor $comp" unless $comp eq 'eq' || 
$comp eq 'ne' || $comp eq 'lt' || $comp eq 'gt';
        $ttl = $params[$count+2];
        fatal_error "Invalid ttl value $ttl" unless $ttl =~ /^\d+$/;
        fatal_error "Invalid ttl value $ttl" unless $ttl <= 255;
        if ( $comp eq 'ne' ) {
            $rule = "$rule -m ttl ! --ttl-eq $ttl";
        } else {
            $rule = "$rule -m ttl --ttl-$comp $ttl";
        }
        $count = $count + 3;
        next;
    }

    if ( $module eq 'hl' ) {
        fatal_error "Extns hl is only available in shorewall6. Use ttl" unless 
$family == F_IPV6;
        fatal_error "Extns hl requires 2 parameters" unless  @params >= $count 
+ 3;
        $comp = $params[$count+1];
        fatal_error "Invalid hl comparitor $comp" unless $comp eq 'eq' || $comp 
eq 'ne' || $comp eq 'lt' || $comp eq 'gt';
        $hl = $params[$count+2];
        fatal_error "Invalid hl value $hl" unless $hl =~ /^\d+$/;
        fatal_error "Invalid hl value $hl" unless $hl <= 255;
        if ( $comp eq 'ne' ) {
            $rule = "$rule -m hl ! --hl-eq $hl";
        } else {
            $rule = "$rule -m hl --hl-$comp $hl";
        }
        $count = $count + 3;
        next;
    }

    if ( $module eq 'length' ) {
        fatal_error "Extns length requires 2 parameters" unless  @params >= 
$count + 3;
        $comp = $params[$count+1];
        fatal_error "Invalid length comparitor $comp" unless $comp eq 'eq' || 
$comp eq 'ne';
        $len = $params[$count+2];
        fatal_error "Invalid length $len" if $len =~ tr/:/:/ > 1;
        @lens = split /:/, $len;
        if ( @lens > 0 ) {
            if ( $lens[0] ne '' ) {
                fatal_error "Invalid length $len" unless $lens[0] =~ /^\d+$/;
            } else {
                $lens[0] = 0;
            }
        }
        if ( @lens == 2 ) {
            if ( $lens[1] ne '' ) {
                fatal_error "Invalid length $len" unless $lens[1] =~ /^\d+$/;
                fatal_error "Invalid length $len" unless $lens[0] < $lens[1];
            }
        }
        if ( $comp eq 'ne' ) {
            $rule = "$rule -m $module ! --$module $len";
        } else {
            $rule = "$rule -m $module --$module $len";
        }
        $count = $count + 3;
        next;
    }

    if ( $module eq 'condition' ) {
        fatal_error "Extension condition requires 2 parameters" unless  @params 
>= $count + 3;
        $name = $params[$count+1];
        $set = $params[$count+2];
        fatal_error "Invalid condition value $set" unless $set eq 0 || $set eq 
1;
        if ( $set eq 0 ) {
            $rule = "$rule -m $module ! --$module $name";
        } else {
            $rule = "$rule -m $module --$module $name";
        }
        $count = $count + 3;
        next;
    }
    
    if ( $module eq 'OR' ) {
        fatal_error "Invalid use of 'OR'" if $count == 1 || $count + 1 == 
@params;
        fatal_error "Invalid use of 'OR'" if $params[$count+1] eq 'OR';

        if ( $level ne 'none') {
            log_rule_limit $level, $chainref, $chainref->{name}, $action, '', 
$tag, 'add', $rule if $action eq 'LOG';
            add_jump $chainref, $xchainref, 0, "$rule " unless $action eq 'LOG';
        } else {
            add_rule $chainref, "$rule -j $action";
        }

        $rule = '';
        $count = $count + 1;
        next;
    }
    
    fatal_error "Unknown extension $module";
}

if ( $level ne 'none') {
    log_rule_limit $level, $chainref, $chainref->{name}, $action, '', $tag, 
'add', $rule if $action eq 'LOG';
    add_jump $chainref, $xchainref, 0, "$rule " unless $action eq 'LOG';
} else {
    add_rule $chainref, "$rule -j $action";
}

1;
------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery, 
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now. 
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Shorewall-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/shorewall-devel

Reply via email to