Actions
Bug #13973
closedPHP error in ``gwlb.inc`` when OpenVPN or IPsec instances referred to by assigned interface entries are missing
Start date:
Due date:
% Done:
100%
Estimated time:
Plus Target Version:
23.05
Release Notes:
Default
Affected Version:
2.7.0
Affected Architecture:
Description
I have previously configured OpenVPN interface and OpenVPN, but subsequently removed OpenVPN configuration but leaving in-place the OpenVPN interface.
In latest gwlb.inc, it is incorrectly trying to access the configuration item and causing PHP error...
[17-Feb-2023 01:44:16 Asia/Singapore] PHP Fatal error: Uncaught TypeError: Cannot access offset of type string on string in /etc/inc/gwlb.inc:804
Stack trace:
#0 /etc/inc/gwlb.inc(468): return_gateways_array()
#1 /etc/inc/interfaces.inc(1560): return_gateways_status(true)
#2 /etc/inc/interfaces.inc(1739): interfaces_ipsec_vti_configure()
#3 /etc/rc.bootup(259): interfaces_configure()
#4 {main}
thrown in /etc/inc/gwlb.inc on line 804
An example of the configuration causing such error...
Interface definition of offending section > <?xml version="1.0"?> > <pfsense> > > <version>22.8</version> > > <lastchange></lastchange> > > <interfaces> > > > <opt5> > > > > <descr><![CDATA[OPENVPN_VLAN]]></descr> > > > > <if>ovpns1</if> > > > > <spoofmac></spoofmac> > > > > <enable></enable> > > > </opt5> > > … > > <openvpn></openvpn>
Offending line is...
switch ($ifcfg['ipaddr']) {
case "dhcp":
case "pppoe":
case "l2tp":
case "pptp":
case "ppp":
$ctype = strtoupper($ifcfg['ipaddr']);
break;
default:
$tunnelif = substr($ifcfg['if'], 0, 3);
if (substr($ifcfg['if'], 0, 4) == "ovpn") {
switch (substr($ifcfg['if'], 4, 1)) {
case "c":
$ovpntype = "openvpn-client";
break;
case "s":
$ovpntype = "openvpn-server";
break;
default:
// unknown ovpn type
continue 3;
}
$ovpnid = substr($ifcfg['if'], 5);
if (is_array($config['openvpn'][$ovpntype])) {
foreach ($config['openvpn'][$ovpntype] as & $ovpnconf) {
if ($ovpnconf['vpnid'] == $ovpnid) {
// skip IPv6-only interfaces
if ($ovpnconf['create_gw'] == "v6only") {
continue 3;
}
// skip tap interfaces
if ($ovpnconf['dev_mode'] == "tap") {
continue 3;
}
}
}
Actions