#!/bin/sh export DATE="16.11.2008";SCRIPT=${0#/rom} export TITLE="Admin: Port Forwarding" . ${SCRIPT%/*}/cgi-bin-pre.sh cat<Admin: Port Forwarding EOF if [ "$REQUEST_METHOD" = "POST" ]; then read QUERY_STRING fi if [ -z "$QUERY_STRING" ]; then ffg_portfw="$(nvram get ffg_portfw)" else while [ "${#QUERY_STRING}" != "0" ]; do name="${QUERY_STRING%%=*}" QUERY_STRING="${QUERY_STRING#*=}" value="${QUERY_STRING%%&*}" if echo "$QUERY_STRING" | grep -q "&" -; then QUERY_STRING="${QUERY_STRING#*&}" else QUERY_STRING="" fi case $name in ffg_portfw_iface) ffg_portfw_iface="$value" ;; delIP) if echo "${QUERY_STRING#*=}" | grep -q IP -; then while true ; do QUERY_STRING="${QUERY_STRING#*&}" if [ "${QUERY_STRING%%=*}" = "IP" ]; then break; fi done else QUERY_STRING="" fi ;; delPort) if echo "${QUERY_STRING#*&}" | grep -q Port -; then while true ; do QUERY_STRING="${QUERY_STRING#*&}" if [ "${QUERY_STRING%%=*}" = "Port" ]; then break; fi if [ "${QUERY_STRING%%=*}" = "IP" ]; then break; fi done else QUERY_STRING="" fi ;; IP) if [ "${#value}" != "0" ] ; then ffg_portfw=$ffg_portfw" $value:" ; fi ;; Port) QUERY_STRING="${QUERY_STRING#*=}" Range="${QUERY_STRING%%&*}" QUERY_STRING="${QUERY_STRING#*&}" name3="${QUERY_STRING%%=*}" if [ "$name3" = "tcp" ] || [ "$name3" = "udp" ]; then if [ "${#value}" = "0" ] && [ "${#Range}" = "0" ]; then QUERY_STRING="delPort=Entferne&Port=&Range=&$QUERY_STRING" elif [ "${#value}" != "0" ] && [ "${#Range}" != "0" ] ; then ffg_portfw=$ffg_portfw"$value-$Range/" elif [ "${#value}" != "0" ] && [ "${#Range}" = "0" ] ; then ffg_portfw=$ffg_portfw"${value}/" elif [ "${#value}" = "0" ] && [ "${#Range}" != "0" ] ; then ffg_portfw=$ffg_portfw"${Range}/" fi fi ;; tcp) if [ "${QUERY_STRING%%=*}" = "udp" ] ; then ffg_portfw="$ffg_portfw""tu," if echo "$QUERY_STRING" | grep -q "&" -; then QUERY_STRING="${QUERY_STRING#*&}" else QUERY_STRING="" fi else ffg_portfw="$ffg_portfw""t," fi ;; udp) ffg_portfw="$ffg_portfw""u," ;; post_portfw) post_portfw="1" ;; post_abort) post_abort="1" ;; esac done fi if [ -z "$post_abort" ] && [ -z "$post_portfw" ]; then cat<
Ingress Interface: WIFI    WAN    Public
EOF for FWTARGET in $ffg_portfw; do DESTIP=${FWTARGET%%:*} DPORTS=${FWTARGET#*:} cat<
Target-IP-Address: EOF while [ ${#DPORTS} != "0" ]; do PORTPROTO=${DPORTS%%,*} DPORT=${PORTPROTO%/*} if echo $DPORT | grep -q - -; then PORTRANGE=${DPORT#*-} DPORT=${DPORT%-*} else PORTRANGE="" fi PROTO=${PORTPROTO#*/} tcp="" udp="" case $PROTO in t) tcp=' CHECKED="CHECKED"' ;; u) udp=' CHECKED="CHECKED"' ;; tu) tcp=' CHECKED="CHECKED"' udp=' CHECKED="CHECKED"' ;; esac DPORTS=${DPORTS#*,} cat<
Port:  tcp   udp EOF done cat<
 tcp   udp EOF done cat<
Target-IP-address:
 
   
EOF else DIRTY= if [ -n "$post_portfw" ]; then ffg_portfw="$(echo $ffg_portfw|sed -e 's/^ //;s/ /+/g')" for V in ffg_portfw; do eval "C=\$$V" C=$(unescape $C) if [ "$C" != "$(nvram get $V)" ]; then DIRTY=1 nvram set $V="$C" fi done if [ $ffg_portfw_iface != "$(nvram get ffg_portfw_iface)" ]; then DIRTY=1 nvram set ffg_portfw_iface="$ffg_portfw_iface" fi fi if [ -n "$DIRTY" ]; then nvram commit>/dev/null 2>&1 # import netparam . /etc/functions.sh export NVRAM_wan_ifname export NVRAM_lan_ifname export NVRAM_lan_ifnames eval $(/usr/bin/netparam) if iptables -t nat -nL ffg_portfw >/dev/null 2>&1; then # kill old rules trap - INT QUIT TSTP set stop . /etc/local.fw-portfw_ffg fi # create new rules trap - INT QUIT TSTP set start . /etc/local.fw-portfw_ffg cat< The changed settings are committed. The settings are active now. EOF else cat< No settings are changed. EOF fi fi . ${SCRIPT%/*}/cgi-bin-post.sh