From afa76eff3d145d089e11b93d95a06d27f3249efa Mon Sep 17 00:00:00 2001 From: jim-p Date: Mon, 12 Aug 2013 12:33:46 -0400 Subject: Fix interface selections on UPnP to show the customized descriptions entered by the user. While here, add an external interface selection knob. Fixes #3141 --- usr/local/pkg/miniupnpd.inc | 22 ++++++++++++++++++++-- usr/local/pkg/miniupnpd.xml | 19 +++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) (limited to 'usr/local/pkg') diff --git a/usr/local/pkg/miniupnpd.inc b/usr/local/pkg/miniupnpd.inc index 92c0ab0..a7ebfb6 100644 --- a/usr/local/pkg/miniupnpd.inc +++ b/usr/local/pkg/miniupnpd.inc @@ -80,9 +80,12 @@ if($post['enable'] && (!$post['enable_upnp'] && !$post['enable_natpmp'])) $input_errors[] = 'At least one of \'UPnP\' or \'NAT-PMP\' must be allowed'; if($post['iface_array']) - foreach($post['iface_array'] as $iface) + foreach($post['iface_array'] as $iface) { if($iface == 'wan') $input_errors[] = 'It is a security risk to specify WAN in the \'Interface\' field'; + elseif ($iface == $post['ext_iface']) + $input_errors[] = 'You cannot select the external interface as an internal interface.'; + } if($post['overridewanip'] && !upnp_validate_ip($post['overridewanip'],false)) $input_errors[] = 'You must specify a valid ip address in the \'Override WAN address\' field'; if(($post['download'] && !$post['upload']) || ($post['upload'] && !$post['download'])) @@ -124,7 +127,19 @@ $upnp_config = $config['installedpackages']['miniupnpd']['config'][0]; $config_file = '/var/etc/miniupnpd.conf'; - $config_text = "ext_ifname=".get_real_interface()."\n"; + if (!isset($upnp_config['ext_iface']) || empty($upnp_config['ext_iface'])) + $ext_ifname = get_real_interface(); + else { + $if = convert_friendly_interface_to_real_interface_name($upnp_config['ext_iface']); + if ($if != $upnp_config['ext_iface']) + $ext_ifname = $if; + else { + $ext_ifname = get_real_interface(); + upnp_warn("Could not resolve real interface for {$upnp_config['ext_iface']}, defaulting to WAN"); + } + } + + $config_text = "ext_ifname={$ext_ifname}\n"; $config_text .= "port=2189\n"; $ifaces_active = ''; @@ -134,6 +149,9 @@ $iface_array = explode(',', $upnp_config['iface_array']); foreach($iface_array as $iface) { + /* Setting the same internal and external interface is not allowed. */ + if ($iface == $upnp_config['ext_iface']) + continue; $if = convert_friendly_interface_to_real_interface_name($iface); /* above function returns iface if fail */ if($if!=$iface) { diff --git a/usr/local/pkg/miniupnpd.xml b/usr/local/pkg/miniupnpd.xml index 03bdddf..a5d9fa4 100644 --- a/usr/local/pkg/miniupnpd.xml +++ b/usr/local/pkg/miniupnpd.xml @@ -56,12 +56,27 @@ This protocol is often used by Apple-compatible systems. + External Interface (generally WAN) + ext_iface + wan + 3 + select_source + + name + value + Select only your primary WAN interface (interface with your default route). Only one interface is allowed here, not multiple. + + + Interfaces (generally LAN) iface_array - lan + lan true 3 - interfaces_selection + select_source + + name + value You can use the CTRL or COMMAND key to select multiple interfaces. -- cgit v1.1