#!/bin/sh
#------------------------------------------------------------------------------
# __FLI4LVER__
# /srv/www/include/firewall6_functions.inc
# Last Update: $Id$
#------------------------------------------------------------------------------
[ "$cgi_helper" ] || exit 1 # must not be called standalone
case $FORM_fwdebug in
yes)
FWRULES6_DO_DEBUG=yes # set firewall debugging
reload () # don't reload site
{
return
}
;;
esac
# Initialize main functions
. /srv/www/include/firewall_functions.inc
. /etc/rc.d/fwrules-helper.ipv6
SCRIPT=portfw6.cgi
# helper functions for portforwarding
get_active_matches6 ()
{
matches=prot
match_nr=1
for i in tmpl `set | sed -n -e "s/^\([a-z]\+\)_p='yes'.*/\1/p"`; do
case $i in
prot) ;;
*)
if grep -q "\(^\|[[:space:]]\)$i:" $ip6tables_rules/nat/PORTFW 2>/dev/null
then
matches="$matches $i"
match_nr=`expr $match_nr + 1`
fi
;;
esac
done
}
get_all_matches6 ()
{
matches="tmpl `set | sed -n -e "s/^\([a-z]\+\)_p='yes'.*/\1/p"`"
match_nr=`set | grep -c "_p='yes'"`
match_nr=`expr $match_nr + 1`
}
pfw6_fixup_ip ()
{
name=$1
eval ip=\$$name
case $ip in
any | ::/0)
eval $name=
;;
esac
}
matches=
match_nr=0
default_prot='tcp'
#------- Firewall GUI Functions -------------------------------------------------------
init_vars6 ()
{ #clear some variables
prot=
if_in=
if_out=
sport=
dport=
action=
orig_tmpl_name=
rule_error=yes
}
reset_rule_error6 ()
{
rule_error=
}
check_rule6 ()
{
init_vars6
do_rule6 nat PREROUTING A "$pf_rule" '' reset_rule_error6 > /dev/null 2>&1
get_params6
}
create_rule6 ()
{
src=$1
sport=$2
dst=$3
dport=$4
rip=$5
rport=$6
[ "$src" ] || src=any
[ "$sport" ] && sport=":$sport"
[ "$dport" ] && dport=":$dport"
[ "$rport" ] && rport=":$rport"
pf_rule="$pf_rule [$src]$sport [$dst]$dport DNAT:[$rip]$rport"
}
get_params6 ()
{
# restrictions:
prot=$proto
if_in=`echo $if_in_negopt$if_in | sed "s/ //g"`
if_out=`echo $if_out_negopt$if_out | sed "s/ //g"`
# still missing match-opts: state, mac, limit, length, ...
src=$(echo "$src_unmapped" | sed 's/]:.*/]/;s/^\[//;s/]//')
sport=$(echo "$src_unmapped" | sed -n 's/^.*]:\(.*\)/\1/p')
dst=$(echo "$dst_unmapped" | sed 's/]:.*/]/;s/^\[//;s/]//')
dport=$(echo "$dst_unmapped" | sed -n 's/^.*]:\(.*\)/\1/p')
mangle_ip_params6 `echo $action | sed -e 's/DNAT://'` keepslash nomap
rip=$ip
rport=$(echo $port | sed 's/:/-/')
}
show_rule_error6 ()
{
show_html_header "$_PF6_portforwarding"
show_backlink
echo "
"
show_error "$_MN_err" "
`cat /tmp/pf6cgi.$$ | htmlspecialchars`" show_html_footer }