Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/serverinfo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Dederichs <kai.dederichs@protonmail.com>2022-05-05 15:45:26 +0300
committerDaniel Kesselberg <mail@danielkesselberg.de>2022-06-02 16:37:07 +0300
commit003607947fb815be1963599aa8db6adff1547df6 (patch)
tree5997fae695ef69758590b89737665baa4b94aab6
parent26dd4de8bf384014723356b8b2140a03f217f1ba (diff)
Fix FreeBsd Interface parsing in cases that the interface has no speed or macbackport/372/stable22
Signed-off-by: Kai Dederichs <kai.dederichs@protonmail.com> Make test throw when requesting a non-valid interface Signed-off-by: Kai Dederichs <kai.dederichs@protonmail.com> Backport FreeBSD.php to stable22 Signed-off-by: Kai Dederichs <k.dederichs@spicymedia.io> Fix CS Signed-off-by: Kai Dederichs <k.dederichs@spicymedia.io>
-rw-r--r--lib/OperatingSystems/FreeBSD.php17
-rw-r--r--tests/data/freebsd_interface_epair0b9
-rw-r--r--tests/data/freebsd_interface_lo07
-rw-r--r--tests/data/freebsd_interface_pflog02
-rw-r--r--tests/data/freebsd_interfaces18
-rw-r--r--tests/lib/FreeBSDTest.php51
6 files changed, 98 insertions, 6 deletions
diff --git a/lib/OperatingSystems/FreeBSD.php b/lib/OperatingSystems/FreeBSD.php
index 1651e82..bea5216 100644
--- a/lib/OperatingSystems/FreeBSD.php
+++ b/lib/OperatingSystems/FreeBSD.php
@@ -159,7 +159,7 @@ class FreeBSD implements IOperatingSystem {
preg_match_all("/^(?<=(?!\t)).*(?=:)/m", $ifconfig, $interfaces);
foreach ($interfaces[0] as $interface) {
- $iface = [];
+ $iface = [];
$iface['interface'] = $interface;
try {
@@ -170,8 +170,8 @@ class FreeBSD implements IOperatingSystem {
preg_match_all("/(?<=inet ).\S*/m", $intface, $ipv4);
preg_match_all("/(?<=inet6 )((.*(?=%))|(.\S*))/m", $intface, $ipv6);
- $iface['ipv4'] = implode(' ', $ipv4[0]);
- $iface['ipv6'] = implode(' ', $ipv6[0]);
+ $iface['ipv4'] = implode(' ', $ipv4[0]);
+ $iface['ipv6'] = implode(' ', $ipv6[0]);
if ($iface['interface'] !== 'lo0') {
preg_match_all("/(?<=ether ).*/m", $intface, $mac);
@@ -179,8 +179,13 @@ class FreeBSD implements IOperatingSystem {
preg_match("/\b[0-9].*?(?=base)/m", $intface, $speed);
preg_match("/(?<=\<).*(?=-)/m", $intface, $duplex);
- $iface['mac'] = implode(' ', $mac[0]);
- $iface['speed'] = $speed[0];
+ if (isset($mac[0])) {
+ $iface['mac'] = implode(' ', $mac[0]);
+ }
+
+ if (isset($speed[0])) {
+ $iface['speed'] = $speed[0];
+ }
if (isset($status[0])) {
$iface['status'] = $status[0];
@@ -206,7 +211,7 @@ class FreeBSD implements IOperatingSystem {
}
} else {
$iface['status'] = 'active';
- $iface['speed'] = 'unknown';
+ $iface['speed'] = 'unknown';
$iface['duplex'] = '';
}
$result[] = $iface;
diff --git a/tests/data/freebsd_interface_epair0b b/tests/data/freebsd_interface_epair0b
new file mode 100644
index 0000000..f445314
--- /dev/null
+++ b/tests/data/freebsd_interface_epair0b
@@ -0,0 +1,9 @@
+epair0b: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=8<VLAN_MTU>
+ ether 1a:c0:4d:ba:b5:82
+ hwaddr 02:60:e8:04:f6:0b
+ inet 192.168.178.150 netmask 0xffffff00 broadcast 192.168.178.255
+ groups: epair
+ media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
+ status: active
+ nd6 options=1<PERFORMNUD> \ No newline at end of file
diff --git a/tests/data/freebsd_interface_lo0 b/tests/data/freebsd_interface_lo0
new file mode 100644
index 0000000..b377291
--- /dev/null
+++ b/tests/data/freebsd_interface_lo0
@@ -0,0 +1,7 @@
+lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
+ options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
+ inet6 ::1 prefixlen 128
+ inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
+ inet 127.0.0.1 netmask 0xff000000
+ groups: lo
+ nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
diff --git a/tests/data/freebsd_interface_pflog0 b/tests/data/freebsd_interface_pflog0
new file mode 100644
index 0000000..509a049
--- /dev/null
+++ b/tests/data/freebsd_interface_pflog0
@@ -0,0 +1,2 @@
+pflog0: flags=0<> metric 0 mtu 33160
+ groups: pflog
diff --git a/tests/data/freebsd_interfaces b/tests/data/freebsd_interfaces
new file mode 100644
index 0000000..f42787b
--- /dev/null
+++ b/tests/data/freebsd_interfaces
@@ -0,0 +1,18 @@
+lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
+ options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
+ inet6 ::1 prefixlen 128
+ inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
+ inet 127.0.0.1 netmask 0xff000000
+ groups: lo
+ nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
+pflog0: flags=0<> metric 0 mtu 33160
+ groups: pflog
+epair0b: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=8<VLAN_MTU>
+ ether 1a:c0:4d:ba:b5:82
+ hwaddr 02:60:e8:04:f6:0b
+ inet 192.168.178.150 netmask 0xffffff00 broadcast 192.168.178.255
+ groups: epair
+ media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
+ status: active
+ nd6 options=1<PERFORMNUD>
diff --git a/tests/lib/FreeBSDTest.php b/tests/lib/FreeBSDTest.php
index d986972..2f5c6e0 100644
--- a/tests/lib/FreeBSDTest.php
+++ b/tests/lib/FreeBSDTest.php
@@ -96,6 +96,57 @@ class FreeBSDTest extends TestCase {
$this->assertEquals(new Memory(), $this->os->getMemory());
}
+ public function testGetNetworkInterfaces(): void {
+ $this->os->method('executeCommand')
+ ->willReturnCallback(static function ($command) {
+ if ($command === '/sbin/ifconfig -a') {
+ return file_get_contents(__DIR__ . '/../data/freebsd_interfaces');
+ }
+ if ($command === '/sbin/ifconfig lo0') {
+ return file_get_contents(__DIR__ . '/../data/freebsd_interface_lo0');
+ }
+ if ($command === '/sbin/ifconfig pflog0') {
+ return file_get_contents(__DIR__ . '/../data/freebsd_interface_pflog0');
+ }
+ if ($command === '/sbin/ifconfig epair0b') {
+ return file_get_contents(__DIR__ . '/../data/freebsd_interface_epair0b');
+ }
+
+ // Regex matches way more than the interface names, so if it doesn't match any of the defined ones, throw.
+ throw new \RuntimeException();
+ });
+
+ $interfaces = $this->os->getNetworkInterfaces();
+ $this->assertEquals([
+ [
+ "interface" => "lo0",
+ "ipv4" => "127.0.0.1",
+ "ipv6" => "::1 fe80::1",
+ "status" => "active",
+ "speed" => "unknown",
+ "duplex" => "",
+ ],
+ [
+ "interface" => "pflog0",
+ "ipv4" => "",
+ "ipv6" => "",
+ "mac" => "",
+ "status" => "active",
+ "speed" => "unknown",
+ "duplex" => "",
+ ],
+ [
+ "interface" => "epair0b",
+ "ipv4" => "192.168.178.150",
+ "ipv6" => "",
+ "mac" => "1a:c0:4d:ba:b5:82",
+ "speed" => "10 Gbps",
+ "status" => "active",
+ "duplex" => "Duplex: full",
+ ]
+ ], $interfaces);
+ }
+
public function testSupported(): void {
$this->assertFalse($this->os->supported());
}