Ignore:
Timestamp:
2010-09-15T04:57:50+02:00 (6 years ago)
Author:
jow
Message:

[packages] miniupnpd: rework firewall integration, should be much more robust now

File:
1 edited

Legend:

Unmodified
Added
Removed
  • packages/net/miniupnpd/files/miniupnpd.hotplug

    r17680 r23065  
    11#!/bin/sh 
    22 
    3 /etc/init.d/miniupnpd enabled && { 
     3miniupnpd_add_rules() { 
     4        local zone="$1" 
     5        local network="$2" 
     6        local iface="$3" 
    47 
    5         local state="${ZONE}_${INTERFACE}" 
    6         local extif initifs 
     8        miniupnpd_remove_rules 
    79 
    8         config_load upnpd 
    9         config_get extif config external_iface 
     10        logger -t miniupnpd "adding firewall rules for $iface to zone $zone" 
     11 
     12        iptables -t nat -N MINIUPNPD 2>/dev/null 
     13        iptables -t nat -A zone_${zone}_prerouting -i $iface -j MINIUPNPD 
     14        iptables -t filter -N MINIUPNPD 2>/dev/null 
     15        iptables -t filter -A zone_${zone}_forward -i $iface ! -o $iface -j MINIUPNPD 
     16 
     17        uci_set_state upnpd state "" state 
     18        uci_set_state upnpd state zone "$zone" 
     19        uci_set_state upnpd state ifname "$iface" 
     20        uci_set_state upnpd state network "$network" 
     21} 
     22 
     23miniupnpd_remove_rules() { 
     24        local zone="$(uci_get_state upnpd state zone)" 
     25        local iface="$(uci_get_state upnpd state ifname)" 
     26 
     27        [ -n "$zone" ] && [ -n "$iface" ] && { 
     28                logger -t miniupnpd "removing firewall rules for $iface from zone $zone" 
     29 
     30                while iptables -t nat -D zone_${zone}_prerouting \ 
     31                        -i $iface -j MINIUPNPD 2>/dev/null; do :; done 
     32 
     33                while iptables -t filter -D zone_${zone}_forward \ 
     34                        -i $iface ! -o $iface -j MINIUPNPD 2>/dev/null; do :; done 
     35        } 
     36 
     37        uci_revert_state upnpd 
     38} 
     39 
     40/etc/init.d/miniupnpd enabled && [ -n "`pidof miniupnpd`" ] && { 
     41 
     42        local extif="$(uci_get upnpd config external_iface)" 
     43        local curif="$(uci_get_state upnpd state network)" 
    1044 
    1145        if [ "$ACTION" = "add" ] && [ "$INTERFACE" = "$extif" ]; then 
    12  
    13                 local active 
    14                 config_get active "$state" ifname 
    15  
    16                 [ -z "$active" ] && { 
    17                         local ipaddr 
    18                         config_get ipaddr "$extif" ipaddr 
    19  
    20                         logger -t "upnp" "adding $INTERFACE ($DEVICE - $ipaddr) to firewall" 
    21  
    22                         iptables -t nat -N MINIUPNPD 2>/dev/null 
    23                         iptables -t nat -A prerouting_rule -i $DEVICE -d $ipaddr -j MINIUPNPD 
    24                         iptables -t filter -N MINIUPNPD 2>/dev/null 
    25                         iptables -t filter -A forwarding_rule -i $DEVICE ! -o $DEVICE -j MINIUPNPD 
    26  
    27                         uci_set_state upnpd "$state" "" "firewall" 
    28                         uci_set_state upnpd "$state" ifname "$DEVICE" 
    29                         uci_set_state upnpd "$state" ipaddr "$ipaddr" 
    30                 } 
    31          
    32         elif [ "$ACTION" = "remove" ] && [ "$INTERFACE" = "$extif" ]; then 
    33  
    34                 local ifname ipaddr 
    35                 config_get ifname "$state" ifname 
    36                 config_get ipaddr "$state" ipaddr 
    37  
    38                 [ -n "$ifname" ] && [ -n "$ipaddr" ] && { 
    39                         logger -t "upnp" "removing $INTERFACE ($ifname - $ipaddr) from firewall" 
    40                         iptables -t nat -D prerouting_rule -i $ifname -d $ipaddr -j MINIUPNPD 
    41                         iptables -t filter -D forwarding_rule -i $DEVICE ! -o $DEVICE -j MINIUPNPD 
    42                         uci_revert_state upnpd "$state" 
    43                 } 
     46                miniupnpd_add_rules "$ZONE" "$INTERFACE" "$DEVICE" 
     47        elif [ "$ACTION" = "remove" ] && [ "$INTERFACE" = "$curif" ]; then 
     48                miniupnpd_remove_rules 
    4449        fi 
    4550} 
    46  
Note: See TracChangeset for help on using the changeset viewer.