2013-01-10 Sergio Martin <sergio.martin@artica.es>

* include/functions_ui.php
	include/functions_agents.php
	include/functions_tags.php
	operation/tree.php
	operation/agentes/status_monitor.php
	operation/agentes/alerts_status.php
	operation/agentes/estado_ultimopaquete.php
	operation/agentes/estado_agente.php
	operation/agentes/status_events.php
	operation/agentes/estado_monitores.php
	operation/agentes/tactical.php
	operation/agentes/group_view.php
	operation/agentes/networkmap.php
	operation/events/events_list.php
	general/logon_ok.php
	godmode/agentes/module_manager.php
	godmode/alerts/alert_list.list.php: Add tags acl checks to modules
	and alerts view. Add warn messages to zones with status counts when the
	user has acl tags assigned



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@7425 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
zarzuelo 2013-01-10 16:00:30 +00:00
parent cfdd08b549
commit 4cf2d4cba1
18 changed files with 293 additions and 231 deletions

View File

@ -1,3 +1,25 @@
2013-01-10 Sergio Martin <sergio.martin@artica.es>
* include/functions_ui.php
include/functions_agents.php
include/functions_tags.php
operation/tree.php
operation/agentes/status_monitor.php
operation/agentes/alerts_status.php
operation/agentes/estado_ultimopaquete.php
operation/agentes/estado_agente.php
operation/agentes/status_events.php
operation/agentes/estado_monitores.php
operation/agentes/tactical.php
operation/agentes/group_view.php
operation/agentes/networkmap.php
operation/events/events_list.php
general/logon_ok.php
godmode/agentes/module_manager.php
godmode/alerts/alert_list.list.php: Add tags acl checks to modules
and alerts view. Add warn messages to zones with status counts when the
user has acl tags assigned
2013-01-10 Juan Manuel Ramon <juanmanuel.ramon@artica.es> 2013-01-10 Juan Manuel Ramon <juanmanuel.ramon@artica.es>
* pandoradb_data.sql * pandoradb_data.sql

View File

@ -30,6 +30,9 @@ require_once ($config["homedir"] . '/include/functions_graph.php');
ui_print_page_header (__('Welcome to Pandora FMS Web Console')); ui_print_page_header (__('Welcome to Pandora FMS Web Console'));
if(tags_has_user_acl_tags()) {
ui_print_tags_warning();
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Site news ! // Site news !
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@ -348,9 +348,6 @@ switch ($sortField) {
break; break;
} }
// TODO: CLEAN extra_sql
$extra_sql = '';
// Build the order sql // Build the order sql
if (!empty($order)) { if (!empty($order)) {
$order_sql = ' ORDER BY '; $order_sql = ' ORDER BY ';
@ -383,6 +380,8 @@ $search_string_entities = io_safe_input($search_string);
$basic_where = sprintf("(nombre LIKE '%%%s%%' OR nombre LIKE '%%%s%%' OR descripcion LIKE '%%%s%%' OR descripcion LIKE '%%%s%%') AND", $search_string, $search_string_entities, $search_string, $search_string_entities); $basic_where = sprintf("(nombre LIKE '%%%s%%' OR nombre LIKE '%%%s%%' OR descripcion LIKE '%%%s%%' OR descripcion LIKE '%%%s%%') AND", $search_string, $search_string_entities, $search_string, $search_string_entities);
$where_tags = tags_get_acl_tags($config['id_user'], 0, 'AR', 'module_condition', 'AND', 'tagente_modulo');
switch ($config["dbtype"]) { switch ($config["dbtype"]) {
case "postgresql": case "postgresql":
$limit_sql = " LIMIT $limit OFFSET $offset "; $limit_sql = " LIMIT $limit OFFSET $offset ";
@ -392,8 +391,8 @@ switch ($config["dbtype"]) {
} }
$sql = sprintf("SELECT %s $sql = sprintf("SELECT %s
FROM tagente_modulo FROM tagente_modulo
WHERE %s (%s %s) %s %s", WHERE %s %s %s %s %s",
$params, $basic_where, $extra_sql, $where, $order_sql, $limit_sql); $params, $basic_where, $where, $where_tags, $order_sql, $limit_sql);
$modules = db_get_all_rows_sql($sql); $modules = db_get_all_rows_sql($sql);
break; break;
@ -403,15 +402,15 @@ switch ($config["dbtype"]) {
$set['offset'] = $offset; $set['offset'] = $offset;
$sql = sprintf("SELECT %s $sql = sprintf("SELECT %s
FROM tagente_modulo FROM tagente_modulo
WHERE %s (%s %s) %s", WHERE %s %s %s %s",
$params, $basic_where, $extra_sql, $where, $order_sql); $params, $basic_where, $where, $where_tags, $order_sql);
$modules = oracle_recode_query ($sql, $set, 'AND', false); $modules = oracle_recode_query ($sql, $set, 'AND', false);
break; break;
} }
$sql_total_modules = sprintf("SELECT count(*) $sql_total_modules = sprintf("SELECT count(*)
FROM tagente_modulo FROM tagente_modulo
WHERE %s (%s %s)", $basic_where, $extra_sql, $where); WHERE %s %s %s", $basic_where, $where, $where_tags);
$total_modules = db_get_value_sql($sql_total_modules); $total_modules = db_get_value_sql($sql_total_modules);

View File

@ -18,13 +18,6 @@ global $config;
// Login check // Login check
check_login (); check_login ();
if (! check_acl ($config['id_user'], 0, "LW")) {
db_pandora_audit("ACL Violation",
"Trying to access Alert Management");
require ("general/noaccess.php");
exit;
}
/* Check if this page is included from a agent edition */ /* Check if this page is included from a agent edition */
if (! check_acl ($config['id_user'], 0, "LW")) { if (! check_acl ($config['id_user'], 0, "LW")) {

View File

@ -184,7 +184,10 @@ function agents_get_alerts_simple ($id_agent = false, $filter = '', $options = f
if (is_array ($options)) { if (is_array ($options)) {
$filter .= db_format_array_where_clause_sql ($options); $filter .= db_format_array_where_clause_sql ($options);
} }
if (($id_agent !== false) && ($idGroup !== false)) { if (($id_agent !== false) && ($idGroup !== false)) {
$where_tags = tags_get_acl_tags($config['id_user'], $idGroup, 'AR', 'module_condition', 'AND', 'tagente_modulo');
if ($idGroup != 0) { //All group if ($idGroup != 0) { //All group
$subQuery = 'SELECT id_agente_modulo $subQuery = 'SELECT id_agente_modulo
FROM tagente_modulo FROM tagente_modulo
@ -194,10 +197,15 @@ function agents_get_alerts_simple ($id_agent = false, $filter = '', $options = f
$subQuery = 'SELECT id_agente_modulo $subQuery = 'SELECT id_agente_modulo
FROM tagente_modulo WHERE delete_pending = 0'; FROM tagente_modulo WHERE delete_pending = 0';
} }
$subQuery .= $where_tags;
} }
else if ($id_agent === false) { else if ($id_agent === false) {
if ($allModules) $disabled = ''; if ($allModules)
else $disabled = 'WHERE disabled = 0'; $disabled = '';
else
$disabled = 'WHERE disabled = 0';
$subQuery = 'SELECT id_agente_modulo $subQuery = 'SELECT id_agente_modulo
FROM tagente_modulo ' . $disabled; FROM tagente_modulo ' . $disabled;
} }
@ -226,9 +234,6 @@ function agents_get_alerts_simple ($id_agent = false, $filter = '', $options = f
$selectText = 'COUNT(talert_template_modules.id) AS count'; $selectText = 'COUNT(talert_template_modules.id) AS count';
} }
// TODO: Clean extra_sql
$extra_sql = '';
$sql = sprintf ("SELECT %s $sql = sprintf ("SELECT %s
FROM talert_template_modules FROM talert_template_modules
INNER JOIN tagente_modulo t2 INNER JOIN tagente_modulo t2
@ -237,8 +242,8 @@ function agents_get_alerts_simple ($id_agent = false, $filter = '', $options = f
ON t2.id_agente = t3.id_agente ON t2.id_agente = t3.id_agente
INNER JOIN talert_templates t4 INNER JOIN talert_templates t4
ON talert_template_modules.id_alert_template = t4.id ON talert_template_modules.id_alert_template = t4.id
WHERE (%s id_agent_module in (%s)) %s %s %s", WHERE id_agent_module in (%s) %s %s %s",
$selectText, $extra_sql, $subQuery, $where, $filter, $orderbyText); $selectText, $subQuery, $where, $filter, $orderbyText);
$alerts = db_get_all_rows_sql ($sql); $alerts = db_get_all_rows_sql ($sql);
@ -1282,6 +1287,10 @@ function agents_get_modules ($id_agent = null, $details = false, $filter = false
//$where .= " AND id_policy_module = 0 "; //$where .= " AND id_policy_module = 0 ";
$where_tags = tags_get_acl_tags($config['id_user'], $id_groups, 'AR', 'module_condition', 'AND', 'tagente_modulo');
$where .= $where_tags;
switch ($config["dbtype"]) { switch ($config["dbtype"]) {
case "mysql": case "mysql":
case "postgresql": case "postgresql":

View File

@ -641,7 +641,7 @@ function tags_get_tags_formatted ($tags_array, $get_url = true) {
* @return mixed/string Tag ids * @return mixed/string Tag ids
*/ */
function tags_get_acl_tags($id_user, $id_group, $access, $return_mode = 'module_condition', $query_prefix = '', $query_table = '') { function tags_get_acl_tags($id_user, $id_group, $access = 'AR', $return_mode = 'module_condition', $query_prefix = '', $query_table = '') {
global $config; global $config;
if($id_user == false) { if($id_user == false) {
$id_user = $config['id_user']; $id_user = $config['id_user'];
@ -851,6 +851,35 @@ function tags_get_acl_tags_event_condition($acltags) {
return $condition; return $condition;
} }
/**
* Check if a user has assigned acl tags or not (if is admin, is like not acl tags)
*
* @param string ID of the user (with false the user will be taked from config)
*
* @return bool true if the user has tags and false if not
*/
function tags_has_user_acl_tags($id_user = false) {
global $config;
if($id_user === false) {
$id_user = $config['id_user'];
}
if(is_user_admin($id_user)) {
return false;
}
$query = sprintf("SELECT count(*)
FROM tusuario_perfil, tperfil
WHERE tperfil.id_perfil = tusuario_perfil.id_perfil AND
tusuario_perfil.id_usuario = '%s' AND tags != ''",
$id_user);
$user_tags = db_get_value_sql($query);
return (bool)$user_tags;
}
/** /**
* Get the tags of a user in an ACL flag * Get the tags of a user in an ACL flag
* *
@ -868,7 +897,7 @@ function tags_get_user_tags($id_user = false, $access = 'AR') {
// Get all tags to have the name of all of them // Get all tags to have the name of all of them
$all_tags = tags_get_all_tags(); $all_tags = tags_get_all_tags();
// If at least one of the profiles of this access flag hasent // If at least one of the profiles of this access flag hasent
// tags restrictions, the user can see all tags // tags restrictions, the user can see all tags
$acl_column = get_acl_column($access); $acl_column = get_acl_column($access);
@ -885,7 +914,7 @@ function tags_get_user_tags($id_user = false, $access = 'AR') {
$id_user, $acl_column); $id_user, $acl_column);
$profiles_without_tags = db_get_value_sql($query); $profiles_without_tags = db_get_value_sql($query);
if($profiles_without_tags > 0) { if($profiles_without_tags > 0) {
return $all_tags; return $all_tags;
} }

View File

@ -462,6 +462,19 @@ function ui_print_username ($username, $return = false) {
echo $string; echo $string;
} }
function ui_print_tags_warning ($return = false) {
$msg = '<div id="notify_conf" class="notify">';
$msg .= __("Is possible that this view uses part of information which your user has not access");
$msg .= '</div>';
if($return) {
return $msg;
}
else {
echo $msg;
}
}
/** /**
* Print group icon within a link * Print group icon within a link
* *

View File

@ -274,7 +274,7 @@ if ($print_agent) {
ui_toggle(printFormFilterAlert($id_group, $filter, $free_search, $url, $filter_standby, true),__('Alert control filter'), __('Toggle filter(s)')); ui_toggle(printFormFilterAlert($id_group, $filter, $free_search, $url, $filter_standby, true),__('Alert control filter'), __('Toggle filter(s)'));
} }
$table->width = '98%'; $table->width = '100%';
$table->class = "databox"; $table->class = "databox";
$table->size = array (); $table->size = array ();

View File

@ -168,6 +168,10 @@ if (check_acl ($config['id_user'], 0, "AW")) {
ui_print_page_header ( __("Agent detail"), "images/bricks.png", false, "agent_status", false, $onheader); ui_print_page_header ( __("Agent detail"), "images/bricks.png", false, "agent_status", false, $onheader);
if(tags_has_user_acl_tags()) {
ui_print_tags_warning();
}
// User is deleting agent // User is deleting agent
if (isset($result_delete)) { if (isset($result_delete)) {
if ($result_delete) if ($result_delete)

View File

@ -152,8 +152,7 @@ switch ($config["dbtype"]) {
break; break;
} }
// TODO: Clean extra_sql $tags_sql = tags_get_acl_tags($config['id_user'], $agent['id_grupo'], 'AR', 'module_condition', 'AND', 'tagente_modulo');
$extra_sql = '';
$status_filter_monitor = (int)get_parameter('status_filter_monitor', -1); $status_filter_monitor = (int)get_parameter('status_filter_monitor', -1);
$status_text_monitor = get_parameter('status_text_monitor', ''); $status_text_monitor = get_parameter('status_text_monitor', '');
@ -183,9 +182,10 @@ switch ($config["dbtype"]) {
LEFT JOIN tmodule_group LEFT JOIN tmodule_group
ON tagente_modulo.id_module_group = tmodule_group.id_mg ON tagente_modulo.id_module_group = tmodule_group.id_mg
WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND %s AND %s tagente_estado.utimestamp != 0 AND %s %s
AND tagente_estado.utimestamp != 0
ORDER BY tagente_modulo.id_module_group , %s %s", ORDER BY tagente_modulo.id_module_group , %s %s",
$id_agente, $status_text_monitor_sql, $status_filter_sql, $extra_sql, $order['field'], $order['order']); $id_agente, $status_text_monitor_sql, $status_filter_sql, $tags_sql, $order['field'], $order['order']);
break; break;
case "oracle": case "oracle":
$sql = sprintf (" $sql = sprintf ("
@ -196,12 +196,12 @@ switch ($config["dbtype"]) {
WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND tagente_modulo.id_agente = %d AND tagente_modulo.id_agente = %d
AND tagente_modulo.nombre LIKE '%s' AND tagente_modulo.nombre LIKE '%s'
AND %s AND %s %s
AND tagente_modulo.delete_pending = 0 AND tagente_modulo.delete_pending = 0
AND tagente_modulo.disabled = 0 AND tagente_modulo.disabled = 0
AND tagente_estado.utimestamp != 0 AND tagente_estado.utimestamp != 0
ORDER BY tagente_modulo.id_module_group , %s %s ORDER BY tagente_modulo.id_module_group , %s %s
", $id_agente, $status_text_monitor_sql, $status_filter_sql, $order['field'], $order['order']); ", $id_agente, $status_text_monitor_sql, $status_filter_sql, $tags_sql, $order['field'], $order['order']);
break; break;
} }
$count_modules = db_get_all_rows_sql ($sql); $count_modules = db_get_all_rows_sql ($sql);
@ -223,9 +223,10 @@ switch ($config["dbtype"]) {
LEFT JOIN tmodule_group LEFT JOIN tmodule_group
ON tagente_modulo.id_module_group = tmodule_group.id_mg ON tagente_modulo.id_module_group = tmodule_group.id_mg
WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND %s AND %s tagente_estado.utimestamp != 0 AND %s %s
AND tagente_estado.utimestamp != 0
ORDER BY tagente_modulo.id_module_group , %s %s", ORDER BY tagente_modulo.id_module_group , %s %s",
$id_agente, $status_text_monitor_sql, $status_filter_sql, $extra_sql, $order['field'], $order['order']); $id_agente, $status_text_monitor_sql, $status_filter_sql, $tags_sql, $order['field'], $order['order']);
break; break;
// If Dbms is Oracle then field_list in sql statement has to be recoded. See oracle_list_all_field_table() // If Dbms is Oracle then field_list in sql statement has to be recoded. See oracle_list_all_field_table()
case "oracle": case "oracle":
@ -241,12 +242,12 @@ switch ($config["dbtype"]) {
WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND tagente_modulo.id_agente = %d AND tagente_modulo.id_agente = %d
AND tagente_modulo.nombre LIKE '%s' AND tagente_modulo.nombre LIKE '%s'
AND %s AND %s %s
AND tagente_modulo.delete_pending = 0 AND tagente_modulo.delete_pending = 0
AND tagente_modulo.disabled = 0 AND tagente_modulo.disabled = 0
AND tagente_estado.utimestamp != 0 AND tagente_estado.utimestamp != 0
ORDER BY tagente_modulo.id_module_group , %s %s ORDER BY tagente_modulo.id_module_group , %s %s
", $id_agente, $status_text_monitor_sql, $status_filter_sql, $order['field'], $order['order']); ", $id_agente, $status_text_monitor_sql, $tags_sql, $status_filter_sql, $order['field'], $order['order']);
break; break;
} }

View File

@ -34,7 +34,7 @@ $timestamp_ref = $agent["ultimo_contacto_remoto"];
$timestamp_lof = $agent["ultimo_contacto"]; $timestamp_lof = $agent["ultimo_contacto"];
$intervalo_agente = $agent["intervalo"]; $intervalo_agente = $agent["intervalo"];
// Get last packet // Get last packet (DEPRECATED CODE???)
switch ($config["dbtype"]) { switch ($config["dbtype"]) {
case "mysql": case "mysql":
case "postgresql": case "postgresql":
@ -175,10 +175,6 @@ switch ($sortField) {
break; break;
} }
// TODO: clean extra_sql
$extra_sql = '';
// Build the order sql // Build the order sql
if (!empty($order)) { if (!empty($order)) {
$order_sql = ' ORDER BY '; $order_sql = ' ORDER BY ';
@ -220,7 +216,6 @@ $limit = (int) $config["block_size"];
$offset = (int) get_parameter ('offset'); $offset = (int) get_parameter ('offset');
$params = implode(',', array ('*')); $params = implode(',', array ('*'));
$is_extra_sql = (int)$is_extra;
$where = sprintf("(tagente_modulo.id_policy_module = 0 AND disabled = 0 AND tagente_estado.utimestamp !=0 AND tagente_modulo.id_agente = %s AND delete_pending = 0)", $id_agente); $where = sprintf("(tagente_modulo.id_policy_module = 0 AND disabled = 0 AND tagente_estado.utimestamp !=0 AND tagente_modulo.id_agente = %s AND delete_pending = 0)", $id_agente);
@ -228,6 +223,8 @@ $search_string_entities = io_safe_input($search_string);
$basic_where = sprintf(" tagente_estado.utimestamp !=0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND (nombre LIKE '%%%s%%' OR nombre LIKE '%%%s%%' OR descripcion LIKE '%%%s%%' OR descripcion LIKE '%%%s%%') AND", $search_string, $search_string_entities, $search_string, $search_string_entities); $basic_where = sprintf(" tagente_estado.utimestamp !=0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND (nombre LIKE '%%%s%%' OR nombre LIKE '%%%s%%' OR descripcion LIKE '%%%s%%' OR descripcion LIKE '%%%s%%') AND", $search_string, $search_string_entities, $search_string, $search_string_entities);
$where_tags = tags_get_acl_tags($config['id_user'], $agent['id_grupo'], 'AR', 'module_condition', 'AND', 'tagente_modulo');
switch ($config["dbtype"]) { switch ($config["dbtype"]) {
case "postgresql": case "postgresql":
$limit_sql = " LIMIT $limit OFFSET $offset "; $limit_sql = " LIMIT $limit OFFSET $offset ";
@ -238,8 +235,8 @@ switch ($config["dbtype"]) {
$order[] = array('field' => 'tagente_modulo.nombre', 'order' => 'ASC'); $order[] = array('field' => 'tagente_modulo.nombre', 'order' => 'ASC');
$sql = sprintf("SELECT %s FROM tagente_modulo, tagente_estado WHERE %s (%s %s) %s %s", $sql = sprintf("SELECT %s FROM tagente_modulo, tagente_estado WHERE %s %s %s %s %s",
$params, $basic_where, $extra_sql, $where, $order_sql, $limit_sql); $params, $basic_where, $where, $where_tags, $order_sql, $limit_sql);
$modules = db_get_all_rows_sql($sql); $modules = db_get_all_rows_sql($sql);
break; break;
@ -249,13 +246,13 @@ switch ($config["dbtype"]) {
$set = array(); $set = array();
$set['limit'] = $limit; $set['limit'] = $limit;
$set['offset'] = $offset; $set['offset'] = $offset;
$sql = sprintf("SELECT %s FROM tagente_modulo, tagente_estado WHERE %s (%s %s) %s", $sql = sprintf("SELECT %s FROM tagente_modulo, tagente_estado WHERE %s %s %s %s",
$params, $basic_where, $extra_sql, $where, $order_sql); $params, $basic_where, $where, $where_tags, $order_sql);
$modules = oracle_recode_query ($sql, $set, 'AND', false); $modules = oracle_recode_query ($sql, $set, 'AND', false);
break; break;
} }
$sql_total_modules = sprintf("SELECT count(*) FROM tagente_modulo, tagente_estado WHERE %s (%s %s)", $basic_where, $extra_sql, $where); $sql_total_modules = sprintf("SELECT count(*) FROM tagente_modulo, tagente_estado WHERE %s %s %s", $basic_where, $where, $where_tags);
$total_modules = db_get_value_sql($sql_total_modules); $total_modules = db_get_value_sql($sql_total_modules);
$total_modules = isset ($total_modules) ? $total_modules : 0; $total_modules = isset ($total_modules) ? $total_modules : 0;

View File

@ -74,6 +74,9 @@ else {
// Header // Header
ui_print_page_header (__("Group view"), "images/bricks.png", false, "", false, $updated_time ); ui_print_page_header (__("Group view"), "images/bricks.png", false, "", false, $updated_time );
if(tags_has_user_acl_tags()) {
ui_print_tags_warning();
}
// Init vars // Init vars
$groups_info = array (); $groups_info = array ();

View File

@ -269,6 +269,10 @@ if (!empty($name)) {
ui_print_page_header (__('Network map')." - ".$title, "images/bricks.png", false, "network_map", false, $buttons); ui_print_page_header (__('Network map')." - ".$title, "images/bricks.png", false, "network_map", false, $buttons);
if(tags_has_user_acl_tags()) {
ui_print_tags_warning();
}
if ($delete_networkmap || $add_networkmap || $save_networkmap) { if ($delete_networkmap || $add_networkmap || $save_networkmap) {
echo $message; echo $message;
} }

View File

@ -25,6 +25,9 @@ if (!isset($id_agente)){
require_once ("include/functions_events.php"); require_once ("include/functions_events.php");
echo "<h4 style='margin-top:0px !important;'>".__('Latest events for this agent')."</h4>"; echo "<h4 style='margin-top:0px !important;'>".__('Latest events for this agent')."</h4>";
events_print_event_table ("WHERE id_agente = $id_agente", $limit = 10, $width='98%');
$tags_condition = tags_get_acl_tags($config['id_user'], $agent['id_grupo'], 'ER', 'event_condition', 'AND');
events_print_event_table ("WHERE id_agente = $id_agente $tags_condition", $limit = 10, $width='100%');
?> ?>

View File

@ -36,9 +36,6 @@ enterprise_include_once ('include/functions_metaconsole.php');
$isFunctionPolicies = enterprise_include_once ('include/functions_policies.php'); $isFunctionPolicies = enterprise_include_once ('include/functions_policies.php');
// TODO: CLEAN extra_sql
$extra_sql = '';
if (! defined ('METACONSOLE')) { if (! defined ('METACONSOLE')) {
//Header //Header
ui_print_page_header ("Monitor detail", "images/brick.png", false); ui_print_page_header ("Monitor detail", "images/brick.png", false);
@ -54,7 +51,6 @@ $offset = (int) get_parameter ('offset', 0);
$status = (int) get_parameter ('status', 4); $status = (int) get_parameter ('status', 4);
$modulegroup = get_parameter ('modulegroup', -1); $modulegroup = get_parameter ('modulegroup', -1);
$tag_filter = get_parameter('tag_filter', 0); $tag_filter = get_parameter('tag_filter', 0);
$sql_extra = '';
$refr = get_parameter('refr', 0); $refr = get_parameter('refr', 0);
// Sort functionality // Sort functionality
@ -65,9 +61,133 @@ echo '<form method="post" action="index.php?sec=estado&amp;sec2=operation/agente
echo '<table cellspacing="4" cellpadding="4" width="98%" class="databox"> echo '<table cellspacing="4" cellpadding="4" width="98%" class="databox">
<tr>'; <tr>';
// Get Groups and profiles from user // Get Groups and profiles from user
$user_groups = implode (",", array_keys (users_get_groups ())); $user_groups = implode (",", array_keys (users_get_groups ()));
////////////////////////////////////
// Begin Build SQL sentences
$sql_from = " FROM tagente, tagente_modulo, tagente_estado ";
$sql_conditions_base = " WHERE tagente.id_agente = tagente_modulo.id_agente
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo";
$sql_conditions = " AND tagente_modulo.disabled = 0 AND tagente.disabled = 0";
// Agent group selector
if (!defined('METACONSOLE')) {
if ($ag_group > 0 && check_acl ($config["id_user"], $ag_group, "AR")) {
$sql_conditions_group = sprintf (" AND tagente.id_grupo = %d", $ag_group);
}
elseif($user_groups != '') {
// User has explicit permission on group 1 ?
$sql_conditions_group = " AND tagente.id_grupo IN (".$user_groups.")";
}
}
else {
if ($ag_group != "0" && check_acl ($config["id_user"], $ag_group, "AR")) {
$sql_conditions_group = sprintf (" AND tagente.id_grupo IN ( SELECT id_grupo FROM tgrupo where nombre = '%s') ", $ag_group);
}
elseif($user_groups != '') {
// User has explicit permission on group 1 ?
$sql_conditions_group = " AND tagente.id_grupo IN (".$user_groups.")";
}
}
// Module group
if (defined('METACONSOLE')) {
if ($modulegroup != '-1')
$sql_conditions .= sprintf (" AND tagente_modulo.id_module_group IN (SELECT id_mg
FROM tmodule_group WHERE name = '%s')", $modulegroup);
}
else if ($modulegroup > -1) {
$sql_conditions .= sprintf (" AND tagente_modulo.id_module_group = '%d'", $modulegroup);
}
// Module name selector
if ($ag_modulename != "") {
$sql_conditions .= sprintf (" AND tagente_modulo.nombre = '%s'", $ag_modulename);
}
// Freestring selector
if ($ag_freestring != "") {
$sql_conditions .= sprintf (" AND (tagente.nombre LIKE '%%%s%%'
OR tagente_modulo.nombre LIKE '%%%s%%'
OR tagente_modulo.descripcion LIKE '%%%s%%')",
$ag_freestring, $ag_freestring, $ag_freestring);
}
// Status selector
if ($status == 0) { //Normal
$sql_conditions .= " AND tagente_estado.estado = 0
AND (utimestamp > 0 OR (tagente_modulo.id_tipo_modulo IN(21,22,23,100))) ";
}
elseif ($status == 2) { //Critical
$sql_conditions .= " AND tagente_estado.estado = 1 AND utimestamp > 0";
}
elseif ($status == 1) { //Warning
$sql_conditions .= " AND tagente_estado.estado = 2 AND utimestamp > 0";
}
elseif ($status == 4) { //Not normal
$sql_conditions .= " AND tagente_estado.estado <> 0";
}
elseif ($status == 3) { //Unknown
$sql_conditions .= " AND tagente_estado.estado = 3 AND tagente_estado.utimestamp <> 0";
}
elseif ($status == 5) { //Not init
$sql_conditions .= " AND tagente_estado.utimestamp = 0
AND tagente_modulo.id_tipo_modulo NOT IN (21,22,23,100)";
}
//Filter by tag
if ($tag_filter !== 0) {
if (defined('METACONSOLE')) {
$sql_conditions .= " AND tagente_modulo.id_agente_modulo IN (
SELECT ttag_module.id_agente_modulo
FROM ttag_module
WHERE ttag_module.id_tag IN (SELECT id_tag FROM ttag where name LIKE '%" . $tag_filter . "%')
)";
}
else{
$sql_conditions .= " AND tagente_modulo.id_agente_modulo IN (
SELECT ttag_module.id_agente_modulo
FROM ttag_module
WHERE ttag_module.id_tag = " . $tag_filter . "
)";
}
}
$sql_conditions_tags = tags_get_acl_tags($config['id_user'], $ag_group, 'AR', 'module_condition', 'AND', 'tagente_modulo');
// Two modes of filter. All the filters and only ACLs filter
$sql_conditions_all = $sql_conditions_base . $sql_conditions . $sql_conditions_group . $sql_conditions_tags;
$sql_conditions_acl = $sql_conditions_base . $sql_conditions_group . $sql_conditions_tags;
// Get count to paginate
if (!defined('METACONSOLE'))
$count = db_get_sql ("SELECT COUNT(tagente_modulo.id_agente_modulo) " . $sql_from . $sql_conditions_all);
// Get limit_sql depend of the metaconsole or standard mode
if (defined('METACONSOLE')) {
// Offset will be used to get the subset of modules
$inferior_limit = $offset;
$superior_limit = $config["block_size"] + $offset;
// Offset reset to get all elements
$offset = 0;
if (!isset($config["meta_num_elements"]))
$config["meta_num_elements"] = 100;
$limit_sql = $config["meta_num_elements"];
}
else
$limit_sql = $config["block_size"];
// End Build SQL sentences
/////////////////////////////////////
// Query to get name of the modules to module name filter combo
switch ($config["dbtype"]) { switch ($config["dbtype"]) {
case "mysql": case "mysql":
case "postgresql": case "postgresql":
@ -90,29 +210,7 @@ switch ($config["dbtype"]) {
//The check of is_admin //The check of is_admin
$flag_is_admin = (bool)db_get_value('is_admin', 'tusuario', 'id_user', $config['id_user']); $flag_is_admin = (bool)db_get_value('is_admin', 'tusuario', 'id_user', $config['id_user']);
$sql = ' SELECT distinct(nombre) $sql = ' SELECT distinct(tagente_modulo.nombre) '. $sql_from . $sql_conditions_acl;
FROM tagente_modulo
WHERE nombre <> \'delete_pending\' AND id_agente IN
(
SELECT id_agente
FROM tagente
WHERE';
$sql .= $extra_sql.'(';
if ($flag_is_admin || $flag_all_group) {
$sql .= ' 1 = 1 ';
}
else {
if (empty($id_groups)) {
$sql .= ' 1 = 0 ';
}
else {
$sql .= ' id_grupo IN (' . implode(',', $id_groups) . ') ';
}
}
$sql .= '))';
break; break;
case "oracle": case "oracle":
$profiles = db_get_all_rows_sql('SELECT id_grupo $profiles = db_get_all_rows_sql('SELECT id_grupo
@ -135,33 +233,10 @@ switch ($config["dbtype"]) {
$flag_is_admin = (bool)db_get_value('is_admin', 'tusuario', $flag_is_admin = (bool)db_get_value('is_admin', 'tusuario',
'id_user', $config['id_user']); 'id_user', $config['id_user']);
$sql = ' SELECT DISTINCT dbms_lob.substr(nombre,4000,1) AS nombre $sql = ' SELECT DISTINCT dbms_lob.substr(nombre,4000,1) AS nombre'. $sql_from . $sql_conditions_acl;
FROM tagente_modulo
WHERE dbms_lob.substr(nombre,4000,1) <> \'delete_pending\'
AND id_agente IN
(
SELECT id_agente
FROM tagente
WHERE';
$sql .= $extra_sql . '(';
if ($flag_is_admin || $flag_all_group) {
$sql .= ' 1 = 1 ';
}
else {
if (empty($id_groups)) {
$sql .= ' 1 = 0 ';
}
else {
$sql .= ' id_grupo IN (' . implode(',', $id_groups) . ') ';
}
}
$sql .= '))';
break; break;
} }
$modules = array(); $modules = array();
$tags = array(); $tags = array();
$rows_select = array(); $rows_select = array();
@ -174,11 +249,11 @@ if (defined('METACONSOLE')) {
// For each server defined and not disabled: // For each server defined and not disabled:
$servers = db_get_all_rows_sql ("SELECT * FROM tmetaconsole_setup WHERE disabled = 0"); $servers = db_get_all_rows_sql ("SELECT * FROM tmetaconsole_setup WHERE disabled = 0");
if ($servers === false) if ($servers === false)
$servers = array(); $servers = array();
$result = array(); $result = array();
foreach($servers as $server) { foreach($servers as $server) {
// If connection was good then retrieve all data server // If connection was good then retrieve all data server
if (metaconsole_connect($server) == NOERR){ if (metaconsole_connect($server) == NOERR){
@ -187,10 +262,10 @@ if (defined('METACONSOLE')) {
else{ else{
$connection = false; $connection = false;
} }
// Get all info for filters of all nodes // Get all info for filters of all nodes
$modules_temp = db_get_all_rows_sql($sql); $modules_temp = db_get_all_rows_sql($sql);
$tags_temp = db_get_all_rows_sql('SELECT name, name $tags_temp = db_get_all_rows_sql('SELECT name, name
FROM ttag FROM ttag
WHERE id_tag IN (SELECT ttag_module.id_tag WHERE id_tag IN (SELECT ttag_module.id_tag
@ -219,7 +294,7 @@ if (defined('METACONSOLE')) {
if (!empty($groups_temp_processed)) { if (!empty($groups_temp_processed)) {
$groups_select = array_unique(array_merge($groups_select, $groups_temp_processed)); $groups_select = array_unique(array_merge($groups_select, $groups_temp_processed));
} }
if (!empty($modules_temp)) if (!empty($modules_temp))
$modules = array_merge($modules, $modules_temp); $modules = array_merge($modules, $modules_temp);
if (!empty($tags_temp)) if (!empty($tags_temp))
@ -228,7 +303,6 @@ if (defined('METACONSOLE')) {
metaconsole_restore_db(); metaconsole_restore_db();
} }
unset($groups_select[__('All')]); unset($groups_select[__('All')]);
} }
if (!defined('METACONSOLE')) { if (!defined('METACONSOLE')) {
@ -312,18 +386,17 @@ echo '<td valign="middle" align="right">' .
ui_print_help_tip(__('Only it is show tags in use.'), true) . ui_print_help_tip(__('Only it is show tags in use.'), true) .
'</td>'; '</td>';
echo '<td>'; echo '<td>';
if (!defined('METACONSOLE'))
$tags = db_get_all_rows_sql('SELECT id_tag, name if (!defined('METACONSOLE')) {
FROM ttag $tags = tags_get_user_tags();
WHERE id_tag IN (SELECT ttag_module.id_tag }
FROM ttag_module)');
if (empty($tags)) { if (empty($tags)) {
echo __('None tag'); echo __('No tags');
} }
else { else {
if (!defined('METACONSOLE')) if (!defined('METACONSOLE'))
html_print_select (index_array($tags, 'id_tag', 'name'), "tag_filter", html_print_select ($tags, "tag_filter",
$tag_filter, '', __('All'), '', false, false, true, '', false, 'width: 150px;'); $tag_filter, '', __('All'), '', false, false, true, '', false, 'width: 150px;');
else else
html_print_select (index_array($tags, 'name', 'name'), "tag_filter", html_print_select (index_array($tags, 'name', 'name'), "tag_filter",
@ -475,118 +548,7 @@ switch ($sortField) {
'order' => 'ASC'); 'order' => 'ASC');
break; break;
} }
// Begin Build SQL sentences
$sql = " FROM tagente, tagente_modulo, tagente_estado
WHERE $sql_extra (tagente.id_agente = tagente_modulo.id_agente
AND tagente_modulo.disabled = 0
AND tagente.disabled = 0
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo";
// Agent group selector
if (!defined('METACONSOLE')) {
if ($ag_group > 0 && check_acl ($config["id_user"], $ag_group, "AR")) {
$sql .= sprintf (" AND tagente.id_grupo = %d", $ag_group);
}
elseif($user_groups != '') {
// User has explicit permission on group 1 ?
$sql .= " AND tagente.id_grupo IN (".$user_groups.")";
}
}
else {
if ($ag_group != "0" && check_acl ($config["id_user"], $ag_group, "AR")) {
$sql .= sprintf (" AND tagente.id_grupo IN ( SELECT id_grupo FROM tgrupo where nombre = '%s') ", $ag_group);
}
elseif($user_groups != '') {
// User has explicit permission on group 1 ?
$sql .= " AND tagente.id_grupo IN (".$user_groups.")";
}
}
// Module group
if (defined('METACONSOLE')) {
if ($modulegroup != '-1')
$sql .= sprintf (" AND tagente_modulo.id_module_group IN (SELECT id_mg
FROM tmodule_group WHERE name = '%s')", $modulegroup);
}
else if ($modulegroup > -1) {
$sql .= sprintf (" AND tagente_modulo.id_module_group = '%d'", $modulegroup);
}
// Module name selector
if ($ag_modulename != "") {
$sql .= sprintf (" AND tagente_modulo.nombre = '%s'", $ag_modulename);
}
// Freestring selector
if ($ag_freestring != "") {
$sql .= sprintf (" AND (tagente.nombre LIKE '%%%s%%'
OR tagente_modulo.nombre LIKE '%%%s%%'
OR tagente_modulo.descripcion LIKE '%%%s%%')",
$ag_freestring, $ag_freestring, $ag_freestring);
}
// Status selector
if ($status == 0) { //Normal
$sql .= " AND tagente_estado.estado = 0
AND (utimestamp > 0 OR (tagente_modulo.id_tipo_modulo IN(21,22,23,100))) ";
}
elseif ($status == 2) { //Critical
$sql .= " AND tagente_estado.estado = 1 AND utimestamp > 0";
}
elseif ($status == 1) { //Warning
$sql .= " AND tagente_estado.estado = 2 AND utimestamp > 0";
}
elseif ($status == 4) { //Not normal
$sql .= " AND tagente_estado.estado <> 0";
}
elseif ($status == 3) { //Unknown
$sql .= " AND tagente_estado.estado = 3 AND tagente_estado.utimestamp <> 0";
}
elseif ($status == 5) { //Not init
$sql .= " AND tagente_estado.utimestamp = 0
AND tagente_modulo.id_tipo_modulo NOT IN (21,22,23,100)";
}
//Filter by tag
if ($tag_filter !== 0) {
if (defined('METACONSOLE')) {
$sql .= " AND tagente_modulo.id_agente_modulo IN (
SELECT ttag_module.id_agente_modulo
FROM ttag_module
WHERE ttag_module.id_tag IN (SELECT id_tag FROM ttag where name LIKE '%" . $tag_filter . "%')
)";
}
else{
$sql .= " AND tagente_modulo.id_agente_modulo IN (
SELECT ttag_module.id_agente_modulo
FROM ttag_module
WHERE ttag_module.id_tag = " . $tag_filter . "
)";
}
}
// Build final SQL sentences
if (!defined('METACONSOLE'))
$count = db_get_sql ("SELECT COUNT(tagente_modulo.id_agente_modulo) " .
$sql . ")");
if (defined('METACONSOLE')) {
// Offset will be used to get the subset of modules
$inferior_limit = $offset;
$superior_limit = $config["block_size"] + $offset;
// Offset reset to get all elements
$offset = 0;
if (!isset($config["meta_num_elements"]))
$config["meta_num_elements"] = 100;
$limit_sql = $config["meta_num_elements"];
}
else
$limit_sql = $config["block_size"];
switch ($config["dbtype"]) { switch ($config["dbtype"]) {
case "mysql": case "mysql":
$sql = "SELECT $sql = "SELECT
@ -601,7 +563,6 @@ switch ($config["dbtype"]) {
tagente.intervalo AS agent_interval, tagente.intervalo AS agent_interval,
tagente.nombre AS agent_name, tagente.nombre AS agent_name,
tagente_modulo.nombre AS module_name, tagente_modulo.nombre AS module_name,
tagente_modulo.id_agente_modulo,
tagente_modulo.history_data, tagente_modulo.history_data,
tagente_modulo.flag AS flag, tagente_modulo.flag AS flag,
tagente.id_grupo AS id_group, tagente.id_grupo AS id_group,
@ -623,7 +584,7 @@ switch ($config["dbtype"]) {
tagente_modulo.critical_instructions, tagente_modulo.critical_instructions,
tagente_modulo.warning_instructions, tagente_modulo.warning_instructions,
tagente_modulo.unknown_instructions, tagente_modulo.unknown_instructions,
tagente_estado.utimestamp AS utimestamp".$sql.") ORDER BY " . $order['field'] . " " . $order['order'] tagente_estado.utimestamp AS utimestamp".$sql_from . $sql_conditions_all." ORDER BY " . $order['field'] . " " . $order['order']
. " LIMIT ".$offset.",".$limit_sql; . " LIMIT ".$offset.",".$limit_sql;
break; break;
case "postgresql": case "postgresql":
@ -639,7 +600,6 @@ switch ($config["dbtype"]) {
tagente.intervalo AS agent_interval, tagente.intervalo AS agent_interval,
tagente.nombre AS agent_name, tagente.nombre AS agent_name,
tagente_modulo.nombre AS module_name, tagente_modulo.nombre AS module_name,
tagente_modulo.id_agente_modulo,
tagente_modulo.history_data, tagente_modulo.history_data,
tagente_modulo.flag AS flag, tagente_modulo.flag AS flag,
tagente.id_grupo AS id_group, tagente.id_grupo AS id_group,
@ -661,7 +621,7 @@ switch ($config["dbtype"]) {
tagente_modulo.critical_instructions, tagente_modulo.critical_instructions,
tagente_modulo.warning_instructions, tagente_modulo.warning_instructions,
tagente_modulo.unknown_instructions, tagente_modulo.unknown_instructions,
tagente_estado.utimestamp AS utimestamp".$sql.") LIMIT " . $limit_sql . " OFFSET " . $offset; tagente_estado.utimestamp AS utimestamp".$sql_form . $sql_conditions_all." LIMIT " . $limit_sql . " OFFSET " . $offset;
break; break;
case "oracle": case "oracle":
$set = array(); $set = array();
@ -700,7 +660,7 @@ switch ($config["dbtype"]) {
tagente_modulo.critical_instructions, tagente_modulo.critical_instructions,
tagente_modulo.warning_instructions, tagente_modulo.warning_instructions,
tagente_modulo.unknown_instructions, tagente_modulo.unknown_instructions,
tagente_estado.utimestamp AS utimestamp" . $sql; tagente_estado.utimestamp AS utimestamp" . $sql_form . $sql_conditions_all;
$sql = oracle_recode_query ($sql, $set); $sql = oracle_recode_query ($sql, $set);
break; break;
} }

View File

@ -30,7 +30,7 @@ if (! check_acl ($config['id_user'], 0, "AR")) {
require ("general/noaccess.php"); require ("general/noaccess.php");
return; return;
} }
$is_admin = check_acl ($config['id_user'], 0, "PM"); $is_admin = check_acl ($config['id_user'], 0, "PM");
$force_refresh = get_parameter ("force_refresh", ""); $force_refresh = get_parameter ("force_refresh", "");
@ -74,6 +74,10 @@ else {
ui_print_page_header (__("Tactical view"), "images/bricks.png", false, "", false, $updated_time ); ui_print_page_header (__("Tactical view"), "images/bricks.png", false, "", false, $updated_time );
$data = reporting_get_group_stats(); $data = reporting_get_group_stats();
if(tags_has_user_acl_tags()) {
ui_print_tags_warning();
}
echo '<div style="width:20%; float:left; padding-right: 5%;" id="leftcolumn">'; echo '<div style="width:20%; float:left; padding-right: 5%;" id="leftcolumn">';
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
// The status horizontal bars (Global health, Monitor sanity... // The status horizontal bars (Global health, Monitor sanity...

View File

@ -574,6 +574,20 @@ echo '</div>';
// Choose the table where search if metaconsole or not // Choose the table where search if metaconsole or not
if($meta) { if($meta) {
$event_table = 'tmetaconsole_event'; $event_table = 'tmetaconsole_event';
// Show only the events of enabled nodes
$enabled_nodes = db_get_all_rows_sql('SELECT id FROM tmetaconsole_setup WHERE disabled = 0');
if(empty($enabled_nodes)) {
$sql_post .= ' AND 1 = 0';
}
else {
$enabled_nodes_id = array();
foreach($enabled_nodes as $en) {
$enabled_nodes_id[] = $en['id'];
}
$sql_post .= ' AND server_id IN ('.implode(',',$enabled_nodes_id).')';
}
} }
else { else {
$event_table = 'tevento'; $event_table = 'tevento';

View File

@ -566,6 +566,10 @@ if (! defined ('METACONSOLE')) {
ui_meta_print_header(__("Tree view"), $subsection, $subsections); ui_meta_print_header(__("Tree view"), $subsection, $subsections);
} }
if(tags_has_user_acl_tags()) {
ui_print_tags_warning();
}
echo "<br>"; echo "<br>";
if (! defined ('METACONSOLE')) { if (! defined ('METACONSOLE')) {
echo '<form id="tree_search" method="post" action="index.php?extension_in_menu=estado&sec=estado&sec2=operation/tree&refr=0&sort_by='.$activeTab.'&pure='.$pure.'">'; echo '<form id="tree_search" method="post" action="index.php?extension_in_menu=estado&sec=estado&sec2=operation/tree&refr=0&sort_by='.$activeTab.'&pure='.$pure.'">';