mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
fix: fping6 validation when fping6 doesn't support IPv6 (#7682)
Found a version of fping6 on repoforge that doesn't support ipv6, lol.
This commit is contained in:
committed by
Neil Lathwood
parent
76a35f2e14
commit
de6266cb88
@@ -40,7 +40,7 @@ class Programs implements ValidationGroup
|
||||
public function validate(Validator $validator)
|
||||
{
|
||||
// Check programs
|
||||
$bins = array('fping', 'fping6', 'rrdtool', 'snmpwalk', 'snmpget', 'snmpbulkwalk');
|
||||
$bins = array('fping', 'fping6', 'rrdtool', 'snmpwalk', 'snmpget', 'snmpgetnext', 'snmpbulkwalk');
|
||||
foreach ($bins as $bin) {
|
||||
if (!($cmd = $this->findExecutable($bin))) {
|
||||
$validator->fail(
|
||||
@@ -60,24 +60,31 @@ class Programs implements ValidationGroup
|
||||
$validator->execAsUser("$cmd $target 2>&1", $output, $return);
|
||||
$output = implode(" ", $output);
|
||||
|
||||
if ($return !== 0 || $output != "$target is alive") {
|
||||
$validator->fail(
|
||||
"$bin could not be executed. $bin must have CAP_NET_RAW capability (getcap) or suid. Selinux exlusions may be required.\n ($output)"
|
||||
);
|
||||
if ($return === 0 && $output == "$target is alive") {
|
||||
return; // fping is working
|
||||
}
|
||||
|
||||
if ($getcap = $this->findExecutable('getcap')) {
|
||||
$getcap_out = shell_exec("$getcap $cmd");
|
||||
preg_match("#^$cmd = (.*)$#", $getcap_out, $matches);
|
||||
if ($output == '::1 address not found') {
|
||||
$validator->warn("fping6 does not have IPv6 support?!?!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_null($matches) || !str_contains($matches[1], 'cap_net_raw+ep')) {
|
||||
$validator->fail(
|
||||
"$bin should have CAP_NET_RAW!",
|
||||
"setcap cap_net_raw+ep $cmd"
|
||||
);
|
||||
}
|
||||
} elseif (!(fileperms($cmd) & 2048)) {
|
||||
$validator->fail("$bin should be suid!", "chmod u+s $cmd");
|
||||
$validator->fail(
|
||||
"$bin could not be executed. $bin must have CAP_NET_RAW capability (getcap) or suid. Selinux exlusions may be required.\n ($output)"
|
||||
);
|
||||
|
||||
if ($getcap = $this->findExecutable('getcap')) {
|
||||
$getcap_out = shell_exec("$getcap $cmd");
|
||||
preg_match("#^$cmd = (.*)$#", $getcap_out, $matches);
|
||||
|
||||
if (is_null($matches) || !str_contains($matches[1], 'cap_net_raw+ep')) {
|
||||
$validator->fail(
|
||||
"$bin should have CAP_NET_RAW!",
|
||||
"setcap cap_net_raw+ep $cmd"
|
||||
);
|
||||
}
|
||||
} elseif (!(fileperms($cmd) & 2048)) {
|
||||
$validator->fail("$bin should be suid!", "chmod u+s $cmd");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user