From f8466c3637eb87c406f0c3722eba65b843fcf56c 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 Conflicts: etc/inc/pkg-utils.inc --- etc/inc/pkg-utils.inc | 16 ++++++++++++++++ usr/local/pkg/miniupnpd.inc | 22 ++++++++++++++++++++-- usr/local/pkg/miniupnpd.xml | 19 +++++++++++++++++-- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/etc/inc/pkg-utils.inc b/etc/inc/pkg-utils.inc index 67facdb..c71479c 100644 --- a/etc/inc/pkg-utils.inc +++ b/etc/inc/pkg-utils.inc @@ -1381,4 +1381,20 @@ function package_skip_tests($index,$requested_version){ /* Do not skip package list */ return false; } + +function get_pkg_interfaces_select_source($include_localhost=false) { + $interfaces = get_configured_interface_with_descr(); + $ssifs = array(); + foreach ($interfaces as $iface => $ifacename) { + $tmp["name"] = $ifacename; + $tmp["value"] = $iface; + $ssifs[] = $tmp; + } + if ($include_localhost) { + $tmp["name"] = "Localhost"; + $tmp["value"] = "lo0"; + $ssifs[] = $tmp; + } + return $ssifs; +} ?> \ No newline at end of file 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