From 8bcbe0ab775554ea3ef239b80fe54e1e8399f9d4 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 16 Nov 2020 19:16:25 +0100 Subject: [PATCH] Fixed agent details in MC --- pandora_console/include/functions.php | 33 ++++++++++++++----- .../include/functions_treeview.php | 29 +++++++++++++--- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php index a67379b07d..b1c537c6aa 100644 --- a/pandora_console/include/functions.php +++ b/pandora_console/include/functions.php @@ -2289,13 +2289,19 @@ function check_login($output=true) * @param integer $id_group Agents group id to check from * @param string $access Access privilege * @param boolean $onlyOneGroup Flag to check acl for specified group only (not to roots up, or check acl for 'All' group when $id_group is 0). + * @param boolean $cache Use cache. * * @return boolean 1 if the user has privileges, 0 if not. */ -function check_acl($id_user, $id_group, $access, $onlyOneGroup=false) -{ +function check_acl( + $id_user, + $id_group, + $access, + $onlyOneGroup=false, + $cache=true +) { if (empty($id_user)) { - // User ID needs to be specified + // User ID needs to be specified. trigger_error('Security error: check_acl got an empty string for user id', E_USER_WARNING); return 0; } else if (is_user_admin($id_user)) { @@ -2305,7 +2311,15 @@ function check_acl($id_user, $id_group, $access, $onlyOneGroup=false) } if ($id_group != 0 || $onlyOneGroup === true) { - $groups_list_acl = users_get_groups($id_user, $access, false, true, null); + $groups_list_acl = users_get_groups( + $id_user, + $access, + false, + true, + null, + 'id_grupo', + $cache + ); } else { $groups_list_acl = get_users_acl($id_user); } @@ -2330,16 +2344,17 @@ function check_acl($id_user, $id_group, $access, $onlyOneGroup=false) /** * Check the ACL of a list of groups. * - * @param string $id_user to check the ACL - * @param array $groups. All groups to check - * @param string $access. Profile to check + * @param string $id_user to check the ACL + * @param array $groups. All groups to check + * @param string $access. Profile to check + * @param boolean $cache Use cached group information. * * @return boolean True if at least one of this groups check the ACL */ -function check_acl_one_of_groups($id_user, $groups, $access) +function check_acl_one_of_groups($id_user, $groups, $access, $cache=true) { foreach ($groups as $group) { - if (check_acl($id_user, $group, $access)) { + if (check_acl($id_user, $group, $access, false, $cache)) { return true; } } diff --git a/pandora_console/include/functions_treeview.php b/pandora_console/include/functions_treeview.php index 67bed22be3..6663623e8b 100755 --- a/pandora_console/include/functions_treeview.php +++ b/pandora_console/include/functions_treeview.php @@ -537,15 +537,30 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) // Check all groups $groups = agents_get_all_groups_agent($id_agente, $agent['id_grupo']); - if (! check_acl_one_of_groups($config['id_user'], $groups, 'AR') && ! check_acl_one_of_groups($config['id_user'], $groups, 'AW') && !$is_extra) { + + if (is_metaconsole()) { + if (! check_acl_one_of_groups($config['id_user'], $groups, 'AR', false) + && ! check_acl_one_of_groups($config['id_user'], $groups, 'AW', false) + ) { + $grants_on_node = false; + } else { + $grants_on_node = true; + } + } + + if (is_metaconsole()) { + metaconsole_restore_db(); + } + + if (! check_acl_one_of_groups($config['id_user'], $groups, 'AR', false) + && ! check_acl_one_of_groups($config['id_user'], $groups, 'AW', false) + && !$is_extra + ) { db_pandora_audit( 'ACL Violation', 'Trying to access Agent General Information' ); include_once 'general/noaccess.php'; - if (!empty($server_data) && is_metaconsole()) { - metaconsole_restore_db(); - } return; } @@ -586,7 +601,11 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) $hashdata = md5($hashdata); $url = $server_data['server_url'].'/index.php?'.'sec=estado&'.'sec2=operation/agentes/ver_agente&'.'id_agente='.$agent['id_agente'].'&'.'loginhash=auto&'."loginhash_data=$hashdata&".'loginhash_user='.str_rot13($user); - $cellName .= ''.''.$agent['alias'].''; + if ($grants_on_node) { + $cellName .= ''.''.$agent['alias'].''; + } else { + $cellName .= ''.$agent['alias'].''; + } } else { $url = ui_get_full_url( 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente']