summaryrefslogtreecommitdiffstats
path: root/usr/local/pkg
diff options
context:
space:
mode:
authorjim-p <jimp@pfsense.org>2013-08-12 12:33:46 -0400
committerjim-p <jimp@pfsense.org>2013-08-12 12:33:46 -0400
commitafa76eff3d145d089e11b93d95a06d27f3249efa (patch)
tree62377a026d77c6381e05dd6561463396e7a0a457 /usr/local/pkg
parenta2dc7392fc3e3a2cbb6584dfcab8e02d26598000 (diff)
downloadpfsense-afa76eff3d145d089e11b93d95a06d27f3249efa.zip
pfsense-afa76eff3d145d089e11b93d95a06d27f3249efa.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
Diffstat (limited to 'usr/local/pkg')
-rw-r--r--usr/local/pkg/miniupnpd.inc22
-rw-r--r--usr/local/pkg/miniupnpd.xml19
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>
OpenPOWER on IntegriCloud