// Additions to Pandora FMS 1.2 graph code and new XML reporting template management // Copyright (c) 2005-2007 Artica Soluciones Tecnologicas, info@artica.es // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; version 2 // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // Load global vars require("include/config.php"); if (give_acl($id_user, 0, "AW")!=1) { audit_db($id_usuario,$REMOTE_ADDR, "ACL Violation","Trying to access agent manager"); require ("general/noaccess.php"); exit; }; if (isset($_GET["id_agente"])) $id_agente = $_GET["id_agente"]; else { $id_agente = -1; if (isset($_POST["update_agent"])) { // if modified some agent paramenter $id_agente = entrada_limpia($_POST["id_agente"]); } } // Init vars $descripcion = ""; $comentarios = ""; $campo_1 = ""; $campo_2 = ""; $campo_3 = ""; $maximo = "0"; $minimo = "0"; $nombre_agente = ""; $direccion_agente = ""; $intervalo = "300"; $id_server = ""; $max_alerts = 0; $modo = 0; $update_module = 0; $modulo_id_agente = ""; $modulo_id_tipo_modulo = ""; $modulo_nombre = ""; $modulo_descripcion = ""; $alerta_id_aam = ""; $alerta_campo1 = ""; $alerta_campo2 = ""; $alerta_campo3 =""; $alerta_dis_max = ""; $alerta_dis_min = ""; $alerta_max_alerts = ""; $alerta_time_threshold = ""; $alerta_descripcion = ""; $disabled=""; $modulo_max=""; $modulo_min=''; $module_interval = ""; $tcp_port = ""; $tcp_send = ""; $tcp_rcv = ""; $snmp_oid= ""; $ip_target =""; $snmp_community=""; $combo_snmp_oid=""; $agent_created_ok = 0; $create_agent = 0; $alert_text = ""; // ================================ // Create AGENT // ================================ // We need to create agent BEFORE show tabs, because we need to get agent_id // This is not very clean, but... if (isset($_POST["create_agent"])) { // Create a new and shining agent $nombre_agente = entrada_limpia($_POST["agente"]); $direccion_agente = entrada_limpia($_POST["direccion"]); $grupo = entrada_limpia($_POST["grupo"]); $intervalo = entrada_limpia($_POST["intervalo"]); $comentarios = entrada_limpia($_POST["comentarios"]); $modo = entrada_limpia($_POST["modo"]); $id_server = entrada_limpia($_POST["id_server"]); $id_os = entrada_limpia($_POST["id_os"]); $disabled = entrada_limpia($_POST["disabled"]); // Check if agent exists (BUG WC-50518-2 ) $sql1='SELECT nombre FROM tagente WHERE nombre = "'.$nombre_agente.'"'; $result=mysql_query($sql1); if ($row=mysql_fetch_array($result)) echo "

".$lang_label["agent_exists"]."

"; else { if ($id_server != ""){ $sql_insert ="INSERT INTO tagente (nombre, direccion, id_grupo, intervalo, comentarios,modo, id_os, disabled, id_server) VALUES ('".$nombre_agente."', '".$direccion_agente."', '".$grupo."', '".$intervalo."', '".$comentarios."',".$modo.", ".$id_os.", '".$disabled."',$id_server)"; } else { $sql_insert ="INSERT INTO tagente (nombre, direccion, id_grupo, intervalo, comentarios,modo, id_os, disabled) VALUES ('".$nombre_agente."', '".$direccion_agente."', '".$grupo."', '".$intervalo."', '".$comentarios."',".$modo.", ".$id_os.", '".$disabled."')"; } $result=mysql_query($sql_insert); if ($result) { $agent_created_ok = 1; $id_agente = mysql_insert_id(); // Create special MODULE agent_keepalive $sql_insert ="INSERT INTO tagente_modulo (nombre, id_agente, id_tipo_modulo, descripcion) VALUES ('agent_keepalive', ".$id_agente.",-1,'Agent Keepalive monitor')"; $result=mysql_query($sql_insert); } } } // Show tabs // ----------------- echo ""; echo ""; // Make some space between tabs and title echo "
"; // Unset variable to allow operations to work $id_agente = ""; // Show agent creation results if (isset($_POST["create_agent"])){ if ($agent_created_ok == 0) echo "

".$lang_label["create_agent_no"]."

"; else echo "

".$lang_label["create_agent_ok"]."

"; } // Fix module data // =============== if (isset($_GET["fix_module"])){ $id_module = $_GET["fix_module"]; $id_agent = $_GET["id_agente"]; // get info about this module $sql1 = "SELECT AVG(datos) FROM tagente_datos WHERE id_agente_modulo = $id_module AND id_agente = $id_agent"; $result=mysql_query($sql1); if ($row=mysql_fetch_array($result)){ $media = $row[0]; $media = $media * 1.3; $sql1 = "DELETE FROM tagente_datos WHERE datos > $media AND id_agente_modulo = $id_module AND id_agente = $id_agent"; $result=mysql_query($sql1); echo "

".$lang_label["delete_data_above"]." $media

"; } } // Delete Alert // ============= if (isset($_GET["delete_alert"])){ // if modified some parameter $id_borrar_modulo = $_GET["delete_alert"]; // get info about agent $sql1='DELETE FROM talerta_agente_modulo WHERE id_aam = '.$id_borrar_modulo; $result=mysql_query($sql1); if (! $result) echo "

".$lang_label["delete_alert_no"]."

"; else echo "

".$lang_label["delete_alert_ok"]."

"; } // Create alert // ============= if (isset($_POST["insert_alert"])){ // if created alert //$id_agente = $_POST["id_agente"]; $id_agente_modulo = entrada_limpia($_POST["agente_modulo"]); $descripcion= entrada_limpia($_POST["descripcion"]); $campo_1 = entrada_limpia($_POST["campo_1"]); $campo_2 = entrada_limpia($_POST["campo_2"]); $campo_3 = entrada_limpia($_POST["campo_3"]); $maximo = entrada_limpia($_POST["maximo"]); $minimo = entrada_limpia($_POST["minimo"]); $tipo_alerta = entrada_limpia($_POST["tipo_alerta"]); $alert_text = entrada_limpia($_POST["alert_text"]); $time_threshold = entrada_limpia($_POST["time_threshold"]); $max_alerts = entrada_limpia($_POST["max_alerts"]); $min_alerts = entrada_limpia($_POST["min_alerts"]); $other = entrada_limpia($_POST["other"]); if ($time_threshold == -1) { $time_threshold = $other; } $sql_insert="INSERT INTO talerta_agente_modulo (id_agente_modulo,id_alerta,al_campo1,al_campo2,al_campo3,descripcion,dis_max,dis_min,time_threshold,max_alerts, min_alerts, alert_text) VALUES ('$id_agente_modulo', '$tipo_alerta', '$campo_1', '$campo_2', '$campo_3', '$descripcion', '$maximo', '$minimo', '$time_threshold', '$max_alerts', '$min_alerts', '$alert_text')"; $result=mysql_query($sql_insert); if (! $result) echo "

".$lang_label["create_alert_no"]."

"; else $id_agente = mysql_insert_id(); echo "

".$lang_label["create_alert_ok"]."

"; } // Update ALERT // ============= if (isset($_POST["update_alert"])){ // Update an existing alert $id_aam = entrada_limpia($_POST["id_aam"]); $tipo_alerta = entrada_limpia($_POST["tipo_alerta"]); if (isset($_POST["agente_modulo"])) { $id_agente_modulo = entrada_limpia($_POST["agente_modulo"]); } $descripcion= entrada_limpia($_POST["descripcion"]); $campo_1 = entrada_limpia($_POST["campo_1"]); $campo_2 = entrada_limpia($_POST["campo_2"]); $campo_3 = entrada_limpia($_POST["campo_3"]); $maximo = entrada_limpia($_POST["maximo"]); $minimo = entrada_limpia($_POST["minimo"]); $time_threshold = entrada_limpia($_POST["time_threshold"]); $max_alerts = entrada_limpia($_POST["max_alerts"]); $min_alerts = entrada_limpia($_POST["min_alerts"]); $other = entrada_limpia($_POST["other"]); $alert_text = entrada_limpia($_POST["alert_text"]); if ($time_threshold == -1) { $time_threshold = $other; } $sql_insert="UPDATE talerta_agente_modulo SET id_alerta = $tipo_alerta, max_alerts = '$max_alerts', min_alerts = '$min_alerts' , time_threshold = '$time_threshold', dis_min = '$minimo' , dis_max = '$maximo' , al_campo3 = '$campo_3' , al_campo2 = '$campo_2' , al_campo1 = '$campo_1' , descripcion = '$descripcion', alert_text = '$alert_text' WHERE id_aam = ".$id_aam; $result=mysql_query($sql_insert); if (! $result) { echo "

".$lang_label["update_alert_no"]."

"; // echo "SQL DEBUG ".$sql_insert; } else echo "

".$lang_label["update_agent_ok"]."

"; $id_agente = mysql_insert_id(); } // ================ // Update AGENT // ================ if (isset($_POST["update_agent"])) { // if modified some agent paramenter $id_agente = entrada_limpia($_POST["id_agente"]); $nombre_agente = entrada_limpia($_POST["agente"]); $direccion_agente = entrada_limpia($_POST["direccion"]); $old_agent_address = give_agent_address ($id_agente); $grupo = entrada_limpia($_POST["grupo"]); $intervalo = entrada_limpia($_POST["intervalo"]); $comentarios = entrada_limpia($_POST["comentarios"]); $modo = entrada_limpia($_POST["modo"]); $id_os = entrada_limpia($_POST["id_os"]); $disabled = entrada_limpia($_POST["disabled"]); $id_server = entrada_limpia($_POST["id_server"]); if ($direccion_agente != $old_agent_address){ agent_add_address ($id_agente, $direccion_agente); } if ($id_server != ""){ $sql_update ="UPDATE tagente SET disabled = ".$disabled." , id_os = ".$id_os." , modo = ".$modo." , nombre = '".$nombre_agente."', direccion = '".$direccion_agente."', id_grupo = '".$grupo."', intervalo = '".$intervalo."', comentarios = '".$comentarios."', id_server = '".$id_server."' WHERE id_agente = '".$id_agente."'"; } else { $sql_update ="UPDATE tagente SET disabled = ".$disabled." , id_os = ".$id_os." , modo = ".$modo." , nombre = '".$nombre_agente."', direccion = '".$direccion_agente."', id_grupo = '".$grupo."', intervalo = '".$intervalo."', comentarios = '".$comentarios."' WHERE id_agente = '".$id_agente."'"; } // Delete one of associateds IP's ? if (isset($_POST["delete_ip"])) { $delete_ip = $_POST["address_list"]; agent_delete_address ($id_agente, $delete_ip); } $result=mysql_query($sql_update); if (! $result) { echo "

".$lang_label["update_agent_no"]."

"; } else { echo "

".$lang_label["update_agent_ok"]."

"; } } // Read agent data // This should be at the end of all operation checks, to read the changes if (isset($_GET["id_agente"])){ $id_agente = $_GET["id_agente"]; $id_grupo = dame_id_grupo($id_agente); if (give_acl($id_user, $id_grupo, "AW")==1){ $sql1='SELECT * FROM tagente WHERE id_agente = '.$id_agente; $result=mysql_query($sql1); if ($row=mysql_fetch_array($result)){ $intervalo = $row["intervalo"]; // Define interval in seconds $nombre_agente = $row["nombre"]; $direccion_agente =$row["direccion"]; $grupo = $row["id_grupo"]; $ultima_act = $row["ultimo_contacto"]; $comentarios = $row["comentarios"]; $id_server = $row["id_server"]; $modo = $row["modo"]; $id_os = $row["id_os"]; $disabled=$row["disabled"]; } else { echo "

".$lang_label["agent_error"]."

"; echo ""; include ("general/footer.php"); exit; } } else { audit_db($id_user,$REMOTE_ADDR, "ACL Violation","Trying to admin an Agent out of admin groups!"); require ("general/noaccess.php"); echo ""; require ("general/footer.php"); exit; } } // Read data module if editing module // ================================== if ((isset($_GET["update_module"])) && (!isset($_POST["oid"])) && (!isset($_POST["update_module"]))) { $update_module = 1; $id_agente_modulo = $_GET["update_module"]; $sql_update = "SELECT * FROM tagente_modulo WHERE id_agente_modulo = ".$id_agente_modulo; $result=mysql_query($sql_update); while ($row=mysql_fetch_array($result)){ $modulo_id_agente = $row["id_agente"]; $modulo_id_tipo_modulo = $row["id_tipo_modulo"]; $modulo_nombre = $row["nombre"]; $modulo_descripcion = $row["descripcion"]; $tcp_send = $row["tcp_send"]; $tcp_rcv = $row["tcp_rcv"]; $tcp_port = $row["tcp_port"]; $ip_target = $row["ip_target"]; $snmp_community = $row["snmp_community"]; $snmp_oid = $row["snmp_oid"]; $id_module_group = $row["id_module_group"]; $module_interval = $row["module_interval"]; $modulo_max = $row["max"]; if (! isset($modulo_max)) $modulo_max ="N/A"; $modulo_min = $row["min"]; if (! isset($modulo_min)) $modulo_min ="N/A"; } } // Read alert data if editing alert if (isset($_GET["update_alert"])){ $id_grupo = dame_id_grupo($id_agente); if (give_acl($id_user, $id_grupo, "LW")==0){ audit_db($id_user,$REMOTE_ADDR, "ACL Violation","Trying to update an alert without admin rights"); require ("general/noaccess.php"); echo ""; require ("general/footer.php"); exit; } $update_alert = 1; $id_aam = $_GET["update_alert"]; $sql_update = "SELECT * FROM talerta_agente_modulo WHERE id_aam = ".$id_aam; $result=mysql_query($sql_update); while ($row=mysql_fetch_array($result)){ $alerta_id_aam = $id_aam; $alerta_campo1 = $row["al_campo1"]; $alerta_campo2 = $row["al_campo2"]; $alerta_campo3 = $row["al_campo3"]; $alerta_dis_max = $row["dis_max"]; $alerta_dis_min = $row["dis_min"]; $tipo_alerta = $row["id_alerta"]; $alert_text = $row["alert_text"]; $alerta_max_alerts = $row["max_alerts"]; $alerta_min_alerts = $row["min_alerts"]; $alerta_time_threshold = $row["time_threshold"]; $alerta_descripcion = $row["descripcion"]; } } // GET DATA for MODULE UPDATE OR MODULE INSERT // =========================================== if ((isset($_POST["update_module"])) || (isset($_POST["insert_module"]))) { if (isset($_POST["update_module"])){ $update_module = 1; $id_agente_modulo = $_POST["id_agente_modulo"]; } $id_grupo = dame_id_grupo($id_agente); if (give_acl($id_user, $id_grupo, "AW")==0){ audit_db($id_user,$REMOTE_ADDR, "ACL Violation","Trying to create a module without admin rights"); require ("general/noaccess.php"); echo ""; require ("general/footer.php"); exit; } if (isset($_POST["tipo"])) $id_tipo_modulo = entrada_limpia($_POST["tipo"]); if (isset($_POST["nombre"])){ $nombre = entrada_limpia($_POST["nombre"]); $modulo_nombre = $nombre; } if (isset($_POST["descripcion"])){ $descripcion = entrada_limpia($_POST["descripcion"]); $modulo_descripcion = $descripcion; } if (isset($_POST["modulo_max"])) $modulo_max = entrada_limpia($_POST["modulo_max"]); if (isset($_POST["modulo_min"])) $modulo_min = entrada_limpia($_POST["modulo_min"]); // Pandora 1.2 new module data: if (isset($_POST["tcp_send"])) $tcp_send = entrada_limpia($_POST["tcp_send"]); if (isset($_POST["tcp_rcv"])) $tcp_rcv = entrada_limpia($_POST["tcp_rcv"]); if (isset($_POST["tcp_port"])) $tcp_port = entrada_limpia($_POST["tcp_port"]); if (isset($_POST["ip_target"])) $ip_target = entrada_limpia($_POST["ip_target"]); if (isset($_POST["snmp_oid"])) $snmp_oid = entrada_limpia($_POST["snmp_oid"]); if (isset($_POST["snmp_community"])) $snmp_community = entrada_limpia($_POST["snmp_community"]); if (isset($_POST["id_module_group"])) $id_module_group = entrada_limpia($_POST["id_module_group"]); if (isset($_POST["module_interval"])) $module_interval = entrada_limpia($_POST["module_interval"]); } // MODULE UPDATE // ================= if ((isset($_POST["update_module"])) && (!isset($_POST["oid"]))){ // if modified something if (isset($_POST["combo_snmp_oid"])){ $combo_snmp_oid = entrada_limpia($_POST["combo_snmp_oid"]); if ($snmp_oid == ""){ $snmp_oid = $combo_snmp_oid; } } $sql_update = "UPDATE tagente_modulo SET max ='".$modulo_max."', min = '".$modulo_min."', nombre='".$nombre."', descripcion='".$descripcion."', tcp_send = '$tcp_send', tcp_rcv = '$tcp_rcv', tcp_port = '$tcp_port', ip_target = '$ip_target', snmp_oid = '$snmp_oid', snmp_community = '$snmp_community', id_module_group = '$id_module_group', module_interval = '$module_interval' WHERE id_agente_modulo = ".$id_agente_modulo; $result=mysql_query($sql_update); if (! $result) { echo "

".$lang_label["update_module_no"]."

"; } else { echo "

".$lang_label["update_module_ok"]."

"; } // Init vars to null to avoid trash in forms $id_tipo_modulo = "";$nombre = "";$descripcion = "";$modulo_max = ""; $modulo_min = "";// Pandora 1.2 new module data: $tcp_send = "";$tcp_rcv = "";$tcp_port = "";$ip_target = ""; $snmp_oid = "";$snmp_community = "";$id_module_group = ""; $module_interval = ""; $modulo_nombre = ""; $modulo_descripcion = ""; $update_module = 0; } // ========================================================= // OID Refresh button to get SNMPWALK from data in form // This code is also applied when submitting a new module (insert_module = 1) // ========================================================= if (isset($_POST["oid"])){ snmp_set_quick_print(1); if (! ($snmpwalk = snmprealwalk($ip_target, $snmp_community, ""))) { echo "

".$lang_label["cannot_read_snmp"]."

"; } else { echo "

".$lang_label["ok_read_snmp"]."

"; } } // ========================================================= // Network Component UPDATE button to fill module data with NC data // This code is only applied when creating a new module (not active in update mode) // ========================================================= if ( (isset($_POST["nc"]) && ($_POST["nc"]!=-1))){ echo "

".$lang_label["using_network_component"]."

"; $id_nc = entrada_limpia($_POST["nc"]); $sql1="SELECT * FROM tnetwork_component WHERE id_nc = '$id_nc'"; $result=mysql_query($sql1); $row=mysql_fetch_array($result); $modulo_id_tipo_modulo = $row["type"]; $id_module_group = $row["id_module_group"]; $modulo_nombre = $row["name"]; $modulo_descripcion = $row["description"]; $tcp_send = $row["tcp_send"]; $tcp_rcv = $row["tcp_rcv"]; $tcp_port = $row["tcp_port"]; $snmp_community = $row["snmp_community"]; $snmp_oid = $row["snmp_oid"]; $id_module_group = $row["id_module_group"]; $module_interval = $row["module_interval"]; $modulo_max = $row["max"]; $modulo_min = $row["min"]; } // ========================================================= // MODULE INSERT // ========================================================= if (((!isset($_POST["nc"]) OR ($_POST["nc"]==-1)) ) && (!isset($_POST["oid"])) && (isset($_POST["insert_module"]))){ if (isset($_POST["combo_snmp_oid"])) { $combo_snmp_oid = entrada_limpia($_POST["combo_snmp_oid"]); } if ($snmp_oid == ""){ $snmp_oid = $combo_snmp_oid; } if (!isset($tcp_port) || $tcp_port== "") { $tcp_port= "0"; } if (!isset($modulo_max) || $modulo_max=="") { $modulo_max= "0"; } if (!isset($modulo_min) || $modulo_min=="") { $modulo_min= "0"; } $sql_insert = "INSERT INTO tagente_modulo (id_agente,id_tipo_modulo,nombre,descripcion,max,min,snmp_oid,snmp_community,id_module_group,module_interval,ip_target,tcp_port,tcp_rcv,tcp_send) VALUES (".$id_agente.",".$id_tipo_modulo.",'".$nombre."','".$descripcion."','".$modulo_max."','".$modulo_min."', '$snmp_oid', '$snmp_community', '$id_module_group', '$module_interval', '$ip_target', '$tcp_port', '$tcp_rcv', '$tcp_send')"; $result=mysql_query($sql_insert); $id_agente_modulo = mysql_insert_id(); // Create with different estado if proc type or data type if ( ($id_tipo_modulo == 2) || ($id_tipo_modulo == 6) || ($id_tipo_modulo == 9) || ($id_tipo_modulo == 12) || ($id_tipo_modulo == 18) ){ $sql_insert = "INSERT INTO tagente_estado (id_agente_modulo,datos,timestamp,cambio,estado,id_agente, utimestamp) VALUES ( $id_agente_modulo, 0,'0000-00-00 00:00:00',0,0,'".$id_agente."',0 )"; } else { $sql_insert = "INSERT INTO tagente_estado (id_agente_modulo,datos,timestamp,cambio,estado,id_agente, utimestamp) VALUES ( $id_agente_modulo, 0,'0000-00-00 00:00:00',0,100,'".$id_agente."',0 )"; } $result2=mysql_query($sql_insert); if ((! $result) || (! $result2)) { echo "

".$lang_label["add_module_no"]."

"; } else { echo "

".$lang_label["add_module_ok"]."

"; } // Init vars to null to avoid trash in forms $id_tipo_modulo = ""; $nombre = ""; $modulo_nombre = ""; $descripcion = ""; $modulo_descripcion= ""; $modulo_max = ""; $modulo_min = ""; // Pandora 1.2 new module data: $tcp_send = ""; $tcp_rcv = ""; $tcp_port = ""; $ip_target = ""; $snmp_oid = ""; $snmp_community = ""; $id_module_group = ""; $module_interval = ""; } // MODULE DELETION // ================= if (isset($_GET["delete_module"])){ // DELETE agent module ! $id_borrar_modulo = $_GET["delete_module"]; $id_grupo = dame_id_grupo($id_agente); if (give_acl($id_user, $id_grupo, "AW")==0){ audit_db($id_user,$REMOTE_ADDR, "ACL Violation", "Trying to delete a module without admin rights"); require ("general/noaccess.php"); exit; } // First detele from tagente_modulo $sql_delete= "DELETE FROM tagente_modulo WHERE id_agente_modulo = ".$id_borrar_modulo; $result=mysql_query($sql_delete); if (! $result) { echo "

".$lang_label["delete_module_no"]."

"; } else { echo "

".$lang_label["delete_module_ok"]."

"; } // Then delete all staus $sql_delete = "DELETE FROM tagente_estado WHERE id_agente_modulo = ".$id_borrar_modulo; $result=mysql_query($sql_delete); $sql_delete = "DELETE FROM tagente_datos WHERE id_agente_modulo = ".$id_borrar_modulo; $result=mysql_query($sql_delete); $sql_delete = "DELETE FROM tagente_datos_string WHERE id_agente_modulo = ".$id_borrar_modulo; $result=mysql_query($sql_delete); $sql_delete = "DELETE FROM tagente_datos_inc WHERE id_agente_modulo = ".$id_borrar_modulo; $result=mysql_query($sql_delete); } // ----------------------------------- // Load page depending on tab selected // ----------------------------------- if (isset($_GET["tab"])) $tab = $_GET["tab"]; else $tab = "main"; switch ($tab) { case "main": require "agent_manager.php"; break; case "module": require "module_manager.php"; break; case "alert": require "alert_manager.php"; break; case "template":require "agent_template.php"; break; } ?>