diff options
author | jim-p <jimp@pfsense.org> | 2013-08-12 12:33:46 -0400 |
---|---|---|
committer | jim-p <jimp@pfsense.org> | 2013-08-12 12:36:50 -0400 |
commit | f8466c3637eb87c406f0c3722eba65b843fcf56c (patch) | |
tree | f0ab7ea282102449dd62d3d6bc077d40325a329a /usr/local | |
parent | 3c249cfa71fb454f55aab3f292f01d24b4109392 (diff) | |
download | pfsense-f8466c3637eb87c406f0c3722eba65b843fcf56c.zip pfsense-f8466c3637eb87c406f0c3722eba65b843fcf56c.tar.gz |
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
Diffstat (limited to 'usr/local')
-rw-r--r-- | usr/local/pkg/miniupnpd.inc | 22 | ||||
-rw-r--r-- | usr/local/pkg/miniupnpd.xml | 19 |
2 files changed, 37 insertions, 4 deletions
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 @@ <description>This protocol is often used by Apple-compatible systems.</description> </field> <field> + <fielddescr>External Interface (generally WAN)</fielddescr> + <fieldname>ext_iface</fieldname> + <default_value>wan</default_value> + <size>3</size> + <type>select_source</type> + <source><![CDATA[get_pkg_interfaces_select_source(false)]]></source> + <source_name>name</source_name> + <source_value>value</source_value> + <description>Select only your primary WAN interface (interface with your default route). Only one interface is allowed here, not multiple.</description> + <required/> + </field> + <field> <fielddescr>Interfaces (generally LAN)</fielddescr> <fieldname>iface_array</fieldname> - <value>lan</value> + <default_value>lan</default_value> <multiple>true</multiple> <size>3</size> - <type>interfaces_selection</type> + <type>select_source</type> + <source><![CDATA[get_pkg_interfaces_select_source(true)]]></source> + <source_name>name</source_name> + <source_value>value</source_value> <description>You can use the CTRL or COMMAND key to select multiple interfaces.</description> <required/> </field> |