[ZBX-8764] Undefined indexes and SQL errors in screen clock element for guest users Created: 2014 Sep 16  Updated: 2017 May 30  Resolved: 2014 Oct 02

Status: Closed
Project: ZABBIX BUGS AND ISSUES
Component/s: Frontend (F)
Affects Version/s: 2.4.0rc1, 2.5.0
Fix Version/s: 2.4.2rc1, 2.5.0

Type: Incident report Priority: Critical
Reporter: Ivo Kurzemnieks Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: clock, permissions, screen
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

To reproduce:

  1. Create screen with clock element.
  2. Choose host time and select an item from host that guest user will not have permissions to.
  3. Open Monitoring > Screens as guest user and choose the screen with clock. Errors appear.
reset() expects parameter 1 to be array, null given [screens.php:176 ? CView->render() ? include() ? CScreenBuilder->show() ? CScreenClock->get() ? reset() in C:\Development\zabbix\frontends\php\include\classes\screens\CScreenClock.php:42]
Undefined index: value_type [screens.php:176 ? CView->render() ? include() ? CScreenBuilder->show() ? CScreenClock->get() ? CHistoryManager->getLast() in C:\Development\zabbix\frontends\php\include\classes\api\managers\CHistoryManager.php:41]
Undefined index:  [screens.php:176 ? CView->render() ? include() ? CScreenBuilder->show() ? CScreenClock->get() ? CHistoryManager->getLast() ? CHistoryManager::getTableName() in C:\Development\zabbix\frontends\php\include\classes\api\managers\CHistoryManager.php:72]
Undefined index: itemid [screens.php:176 ? CView->render() ? include() ? CScreenBuilder->show() ? CScreenClock->get() ? CHistoryManager->getLast() in C:\Development\zabbix\frontends\php\include\classes\api\managers\CHistoryManager.php:42]
Error in query [SELECT * FROM  h WHERE h.itemid='' ORDER BY h.clock DESC LIMIT 1 OFFSET 0] [Table 'ivo_zabbix.h' doesn't exist]


 Comments   
Comment by Krists Krigers (Inactive) [ 2014 Sep 16 ]

(1) String changes
New strings:

  • 'Cannot set resource ID for screen element.'
  • 'Incorrect style provided for screen element.'

kristsk RESOLVED.

oleg.egorov Please fix "resource-less", as was been discussed

kristsk RESOLVED in r49510.

oleg.egorov CLOSED

kristsk Added new string in r49560.

oleg.egorov CLOSED

Comment by Krists Krigers (Inactive) [ 2014 Sep 16 ]

Fixed in r49066, branch svn://svn.zabbix.com/branches/dev/ZBX-8764 (copy of 2.4).

Comment by Oleg Egorov (Inactive) [ 2014 Sep 17 ]

(2)

/**
* Process screen.
*
* @return CDiv (screen inside container)
*/
public function get() {

But new code is

if (!$items) {
	return null;
}

And please fix this main issue, as was been discussed

kristsk Reverted previous commit and fixed issue by adding permission check in screen.get API. Committed in r49097. RESOLVED.

oleg.egorov CLOSED

Comment by Oleg Egorov (Inactive) [ 2014 Sep 18 ]

(3)
reset() expects parameter 1 to be array, null given [screens.php:176 → CView->render() → include() → CScreenBuilder->show() → CScreenClock->get() → reset() in C:\xampp\htdocs\ZBX-8764\frontends\php\include\classes\screens\CScreenClock.php:42]
Undefined index: value_type [screens.php:176 → CView->render() → include() → CScreenBuilder->show() → CScreenClock->get() → CHistoryManager->getLast() in C:\xampp\htdocs\ZBX-8764\frontends\php\include\classes\api\managers\CHistoryManager.php:41]
Undefined index: [screens.php:176 → CView->render() → include() → CScreenBuilder->show() → CScreenClock->get() → CHistoryManager->getLast() → CHistoryManager::getTableName() in C:\xampp\htdocs\ZBX-8764\frontends\php\include\classes\api\managers\CHistoryManager.php:72]
Undefined index: itemid [screens.php:176 → CView->render() → include() → CScreenBuilder->show() → CScreenClock->get() → CHistoryManager->getLast() in C:\xampp\htdocs\ZBX-8764\frontends\php\include\classes\api\managers\CHistoryManager.php:42]
Error in query [SELECT * FROM h WHERE h.itemid='' ORDER BY h.clock DESC LIMIT 1 OFFSET 0] [Table 'o_trunk.h' doesn't exist]

Screen element: Clock
Type: Host

1. Select item
2. Then save
3. Remove item from host

Screen element should be removed with item

kristsk RESOLVED in r49166.

oleg.egorov CLOSED

Comment by Oleg Egorov (Inactive) [ 2014 Sep 19 ]

(4) Other issue, after item removing removed screen element clock with type local

How to reproduce:
1) Create item
2) Create screen element.
Type: Clock
Time type: Host
And save it
3) Open screen and change screen element
Set
Type: Clock
Time type: Local
Save
4) Remove item

kristsk RESOLVED in r49177.

oleg.egorov Please try fix, as was discussed

kristsk RESOLVED in r49242.

oleg.egorov Same problem still exist in screenitem.create

kristsk RESOLVED in r49291.

oleg.egorov Problem still exist.

Via API possible add resourceid

screenitem.update

{
    "screenid": "47",
    "resourcetype": "7",
    "caption": "",
    "url": "",
    "width": "500",
    "height": "100",
    "halign": "0",
    "valign": 0,
    "colspan": "1",
    "rowspan": "1",
    "max_columns": null,
    "dynamic": 0,
    "elements": 0,
    "sort_triggers": 0,
    "application": 0,
    "screenitemid": "161",
    "resourceid": 46
}

kristsk RESOLVED in r49449.

oleg.egorov CLOSED

Comment by Oleg Egorov (Inactive) [ 2014 Sep 29 ]

(5) Coding style issue

if (isset($screenItem['style'])) {
if ($screenItem['style'] == TIME_TYPE_HOST) {
	if (!$screenItem['resourceid']) {
		self::exception(ZBX_API_ERROR_PARAMETERS, _('No item ID provided for screen element.'));
	}

	$itemIds[$screenItem['resourceid']] = $screenItem['resourceid'];
}
else if ($screenItem['resourceid']) {
	self::exception(ZBX_API_ERROR_PARAMETERS, _('Resource ID provided for resource-less screen element.'));
	}
}

Unnecessary tab in

if (isset($screenItem['style'])) {

And

...else if... 

In CScreenItem.php:268-277

$dbScreenItems = $this->get(array(
	'output' => array('screenitemid', 'screenid', 'x', 'y', 'rowspan', 'colspan', 'resourcetype', 'resourceid',
			'style'),
	'screenitemids' => $screenItemIds,
	'editable' => true,
	'preservekeys' => true
));

$screenItems = $this->extendObjects($this->tableName(), $screenItems, array('screenid', 'x', 'y', 'rowspan',
		'colspan', 'style'));

Please change to:

$dbScreenItems = $this->get(array(
	'output' => array('screenitemid', 'screenid', 'x', 'y', 'rowspan', 'colspan', 'resourcetype', 'resourceid',
		'style'
	),
	'screenitemids' => $screenItemIds,
	'editable' => true,
	'preservekeys' => true
));

$screenItems = $this->extendObjects($this->tableName(), $screenItems,
	array('screenid', 'x', 'y', 'rowspan', 'colspan', 'style')
);

kristsk RESOLVED in 49502.

oleg.egorov CLOSED

Comment by Oleg Egorov (Inactive) [ 2014 Sep 30 ]

(6) Created screen item clock, Time type: host. Save it.
Open again, and change type to server.

As result:
Resource ID provided for resource-less screen element. [screenedit.php:212 → CFrontendApiWrapper->update() → CApiWrapper->__call() → CFrontendApiWrapper->callMethod() → CApiWrapper->callMethod() → CFrontendApiWrapper->callClientMethod() → CLocalApiClient->callMethod() → call_user_func_array() → CScreenItem->update() → CScreenItem->validateUpdate() → CScreenItem->checkInput() → CApiService::exception() in C:\xampp\htdocs\ZBX-8764\frontends\php\include\classes\api\services\CScreenItem.php:540]

kristsk RESOLVED in r49508.

oleg.egorov CLOSED

Comment by Oleg Egorov (Inactive) [ 2014 Oct 02 ]

(7) Create screen item, type "Clock", with "time type" "host", select host, save it, change "time type" to "server".
... and in DB still exist resource id.

kristsk RESOLVED in r49560.

oleg.egorov CLOSED

Comment by Oleg Egorov (Inactive) [ 2014 Oct 03 ]

(8) Please document changes in API validation for resource ID

kristsk
Updated API changelog for 2.4: https://www.zabbix.com/documentation/2.4/manual/api/changes_2.2_-_2.4?&#screenitem

RESOLVED.

oleg.egorov CLOSED

Comment by Oleg Egorov (Inactive) [ 2014 Oct 03 ]

TESTED

Comment by Krists Krigers (Inactive) [ 2014 Oct 08 ]

Merged to:

  • 2.4.2rc1 in r49658,
  • 2.5.0 (trunk) in rr49662.
Generated at Fri Apr 26 16:01:42 EEST 2024 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.