mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-04-08 17:15:08 +02:00
IdoQuery: Accept any character in custom var names
fixes #4342 (cherry picked from commit fe51f8c96811d03e39010325cb2af6c124d0f112)
This commit is contained in:
parent
4c929c3dbb
commit
00ff11ea9f
@ -17,6 +17,7 @@ use Icinga\Exception\ProgrammingError;
|
||||
use Icinga\Exception\QueryException;
|
||||
use Icinga\Web\Session;
|
||||
use Icinga\Module\Monitoring\Data\ColumnFilterIterator;
|
||||
use Zend_Db_Select;
|
||||
|
||||
/**
|
||||
* Base class for Ido Queries
|
||||
@ -1189,7 +1190,13 @@ abstract class IdoQuery extends DbQuery
|
||||
{
|
||||
// TODO: This is not generic enough yet
|
||||
list($type, $name) = $this->customvarNameToTypeName($customvar);
|
||||
$alias = ($type === 'host' ? 'hcv_' : 'scv_') . $name;
|
||||
$alias = ($type === 'host' ? 'hcv_' : 'scv_') . preg_replace('~[^a-zA-Z0-9_]~', '_', $name);
|
||||
|
||||
// We're replacing any problematic char with an underscore, which will lead to duplicates, this avoids them
|
||||
$from = $this->select->getPart(Zend_Db_Select::FROM);
|
||||
for ($i = 2; array_key_exists($alias, $from); $i++) {
|
||||
$alias = $alias . '_' . $i;
|
||||
}
|
||||
|
||||
$this->customVars[strtolower($customvar)] = $alias;
|
||||
|
||||
@ -1228,7 +1235,7 @@ abstract class IdoQuery extends DbQuery
|
||||
protected function customvarNameToTypeName($customvar)
|
||||
{
|
||||
$customvar = strtolower($customvar);
|
||||
if (! preg_match('~^_(host|service)_([a-zA-Z0-9_]+)$~', $customvar, $m)) {
|
||||
if (! preg_match('~^_(host|service)_(.+)$~', $customvar, $m)) {
|
||||
throw new ProgrammingError(
|
||||
'Got invalid custom var: "%s"',
|
||||
$customvar
|
||||
|
Loading…
x
Reference in New Issue
Block a user