diff --git a/LibreNMS/Data/Source/SnmpResponse.php b/LibreNMS/Data/Source/SnmpResponse.php index 75e61f74d8..f4f96c7d2e 100644 --- a/LibreNMS/Data/Source/SnmpResponse.php +++ b/LibreNMS/Data/Source/SnmpResponse.php @@ -132,7 +132,7 @@ class SnmpResponse if (Str::startsWith($value, '"') && Str::endsWith($value, '"')) { // unformatted string from net-snmp, remove extra escapes - $values[$oid] = stripslashes(trim($value, "\\\" \n\r")); + $values[$oid] = trim(stripslashes($value), "\" \n\r"); } else { $values[$oid] = trim($value); } diff --git a/app/Console/Commands/SnmpFetch.php b/app/Console/Commands/SnmpFetch.php index 6bb2cebf06..a836ec8937 100644 --- a/app/Console/Commands/SnmpFetch.php +++ b/app/Console/Commands/SnmpFetch.php @@ -46,7 +46,7 @@ class SnmpFetch extends LnmsCommand $spec = $this->argument('device spec'); $device_ids = Device::query()->when($spec !== 'all', function (Builder $query) use ($spec) { return $query->where('device_id', $spec) - ->orWhere('hostname', 'regexp', $spec); + ->orWhere('hostname', 'regexp', "^$spec$"); })->pluck('device_id'); if ($device_ids->isEmpty()) { diff --git a/tests/Unit/SnmpResponseTest.php b/tests/Unit/SnmpResponseTest.php index 41e51a9322..8e76848aad 100644 --- a/tests/Unit/SnmpResponseTest.php +++ b/tests/Unit/SnmpResponseTest.php @@ -47,6 +47,13 @@ class SnmpResponseTest extends TestCase $this->assertEquals(['' => 'IF-MIB::ifDescr'], $response->values()); $this->assertEquals('IF-MIB::ifDescr', $response->value()); $this->assertEquals(['IF-MIB::ifDescr'], $response->table()); + + // unescaped strings + $response = new SnmpResponse("Q-BRIDGE-MIB::dot1qVlanStaticName[1] = \"default\"\nQ-BRIDGE-MIB::dot1qVlanStaticName[9] = \"\\\\Surrounded\\\\\""); + $this->assertTrue($response->isValid()); + $this->assertEquals('default', $response->value()); + $this->assertEquals(['Q-BRIDGE-MIB::dot1qVlanStaticName[1]' => 'default', 'Q-BRIDGE-MIB::dot1qVlanStaticName[9]' => '\\Surrounded\\'], $response->values()); + $this->assertEquals(['Q-BRIDGE-MIB::dot1qVlanStaticName' => [1 => 'default', 9 => '\\Surrounded\\']], $response->table()); } public function testMultiLine(): void