diff --git a/src/etc/inc/interfaces.lib.inc b/src/etc/inc/interfaces.lib.inc index 1ad59b7fb..915656e73 100644 --- a/src/etc/inc/interfaces.lib.inc +++ b/src/etc/inc/interfaces.lib.inc @@ -390,6 +390,15 @@ function legacy_get_interface_addresses($ifs) $addrs['ipaddr6'] = $intf_details['ipv6'][0]['ipaddr']; $addrs['subnetbits6'] = $intf_details['ipv6'][0]['subnetbits']; } + foreach ($intf_details['ipv6'] as $ipv6) { + if (empty($addrs['ipaddr6']) && empty($ipv6['link-local'])) { + $addrs['ipaddr6'] = $ipv6['ipaddr']; + $addrs['subnetbits6'] = $ipv6['subnetbits']; + } elseif (empty($addrs['lladdr6']) && !empty($ipv6['link-local'])) { + $addrs['ipaddr6_ll'] = $ipv6['ipaddr']; + $addrs['subnetbits6_ll'] = $ipv6['subnetbits']; + } + } return $addrs; } diff --git a/src/etc/inc/plugins.inc.d/openssh.inc b/src/etc/inc/plugins.inc.d/openssh.inc index 1c5f29c39..fff60f173 100644 --- a/src/etc/inc/plugins.inc.d/openssh.inc +++ b/src/etc/inc/plugins.inc.d/openssh.inc @@ -178,28 +178,29 @@ function openssh_configure_do($verbose = false, $interface = '') $sshconf .= "HostKey {$file}\n"; } - $any = count($interfaces) ? false : true; + $listeners = array(); foreach ($interfaces as $interface) { $realif = get_real_interface($interface); $addrs = legacy_get_interface_addresses($realif); - if (!empty($addrs['ipaddr'])) { - $sshconf .= "ListenAddress {$addrs['ipaddr']}\n"; - $any = true; - } - if (!empty($addrs['ipaddr6'])) { - $sshconf .= "ListenAddress {$addrs['ipaddr6']}\n"; - $any = true; + foreach (array('ipaddr', 'ipaddr6', 'ipaddr6_ll') as $type) { + if (!empty($addrs[$type])) { + $listeners[] = $addrs[$type]; + } } + $viparr = &config_read_array('virtualip', 'vip'); foreach ($viparr as $vip) { if ($vip['interface'] == $interface && is_ipaddr($vip['subnet'])) { - $sshconf .= "ListenAddress {$vip['subnet']}\n"; - $any = true; + $listeners[] = $vip['subnet']; } } } + foreach ($listeners as $listener) { + $sshconf .= "ListenAddress {$listener}\n"; + } + file_put_contents("/usr/local/etc/ssh/sshd_config", $sshconf); if ($verbose) { @@ -207,7 +208,7 @@ function openssh_configure_do($verbose = false, $interface = '') flush(); } - if (!$any || mwexecf('/usr/bin/protect -i /usr/local/sbin/sshd')) { + if ((count($interfaces) && !count($listeners)) || mwexecf('/usr/bin/protect -i /usr/local/sbin/sshd')) { if ($verbose) { echo "failed.\n"; } diff --git a/src/www/system_advanced_admin.php b/src/www/system_advanced_admin.php index a6fea8ef2..a0dd240be 100644 --- a/src/www/system_advanced_admin.php +++ b/src/www/system_advanced_admin.php @@ -397,7 +397,7 @@ include("head.inc");