'string', 'data' => urldecode($other)); break; default: if (strpos($otherType, 'url_encode_separator_') !== false) { $separator = str_replace('url_encode_separator_', '', $otherType); $returnVar = array('type' => 'array', 'data' => explode($separator, $other)); foreach ($returnVar['data'] as $index => $element) $returnVar['data'][$index] = urldecode($element); } else { $returnVar = array('type' => 'string', 'data' => urldecode($other)); } break; } return $returnVar; } /** * * @param $typeError * @param $returnType * @return unknown_type */ function returnError($typeError, $returnType = 'string') { switch ($typeError) { case 'no_set_no_get_no_help': returnData($returnType, array('type' => 'string', 'data' => __('No set or get or help operation.'))); break; case 'no_exist_operation': returnData($returnType, array('type' => 'string', 'data' => __('This operation does not exist.'))); break; case 'id_not_found': returnData($returnType, array('type' => 'string', 'data' => __('Id does not exist in BD.'))); break; default: returnData($returnType, array('type' => 'string', 'data' => __($typeError))); break; } } /** * * @param $returnType * @param $data * @param $separator * * @return */ function returnData($returnType, $data, $separator = ';') { switch ($returnType) { case 'string': if ($data['type'] == 'string') { echo $data['data']; } else ;//TODO break; case 'csv': case 'csv_head': switch ($data['type']) { case 'array': if (array_key_exists('list_index', $data)) { if ($returnType == 'csv_head') { foreach($data['list_index'] as $index) { echo $index; if (end($data['list_index']) == $index) echo "\n"; else echo $separator; } } foreach($data['data'] as $dataContent) { foreach($data['list_index'] as $index) { if (array_key_exists($index, $dataContent)) echo $dataContent[$index]; if (end($data['list_index']) == $index) echo "\n"; else echo $separator; } } } else { if (!empty($data['data'])) { foreach($data['data'] as $dataContent) { $clean = array_map("array_apply_io_safe_output", $dataContent); echo implode($separator, $clean) . "\n"; } } } break; case 'string': echo $data['data']; break; } break; case 'json': echo json_encode ($data); break; } } function array_apply_io_safe_output($item) { return io_safe_output($item); } /** * * @param $ip * @return unknown_type */ function isInACL($ip) { global $config; if (in_array($ip, $config['list_ACL_IPs_for_API'])) return true; // If the IP is not in the list, we check one by one, all the wildcard registers foreach($config['list_ACL_IPs_for_API'] as $acl_ip) { if(preg_match('/\*/', $acl_ip)) { // Scape for protection $acl_ip = str_replace('.','\.',$acl_ip); // Replace wilcard by .* to do efective in regular expression $acl_ip = str_replace('*','.*',$acl_ip); // If the string match with the beginning of the IP give it access if(preg_match('/'.$acl_ip.'/', $ip)) { return true; } } } return false; } // Return string OK,[version],[build] function api_get_test() { global $pandora_version; global $build_version; echo "OK,$pandora_version,$build_version"; } //-------------------------DEFINED OPERATIONS FUNCTIONS----------------- function api_get_groups($thrash1, $thrash2, $other, $returnType, $user_in_db) { if ($other['type'] == 'string') { if ($other['data'] != '') { returnError('error_parameter', 'Error in the parameters.'); return; } else {//Default values $separator = ';'; } } else if ($other['type'] == 'array') { $separator = $other['data'][0]; } $groups = users_get_groups ($user_in_db, "IR"); $data_groups = array(); foreach ($groups as $id => $group) { $data_groups[] = array($id, $group); } $data['type'] = 'array'; $data['data'] = $data_groups; returnData($returnType, $data, $separator); } function api_get_agent_module_name_last_value($agentName, $moduleName, $other = ';', $returnType) { $idAgent = agents_get_agent_id($agentName); switch ($config["dbtype"]) { case "mysql": $sql = sprintf('SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente = %d AND nombre LIKE "%s"', $idAgent, $moduleName); break; case "postgresql": case "oracle": $sql = sprintf('SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente = %d AND nombre LIKE \'%s\'', $idAgent, $moduleName); break; } $idModuleAgent = db_get_value_sql($sql); if ($idModuleAgent === false) { switch ($other['type']) { case 'string': switch ($other['data']) { case 'error_message': default: returnError('id_not_found', $returnType); break; } break; case 'array': switch ($other['data'][0]) { case 'error_value': returnData($returnType, array('type' => 'string', 'data' => $other['data'][1])); break; } break; } } else { get_module_last_value($idModuleAgent, null, $other, $returnType); } } function api_get_module_last_value($idAgentModule, $trash1, $other = ';', $returnType) { $sql = sprintf('SELECT datos FROM tagente_estado WHERE id_agente_modulo = %d', $idAgentModule); $value = db_get_value_sql($sql); if ($value === false) { switch ($other['type']) { case 'string': switch ($other['data']) { case 'error_message': default: returnError('id_not_found', $returnType); break; } break; case 'array': switch ($other['data'][0]) { case 'error_value': returnData($returnType, array('type' => 'string', 'data' => $other['data'][1])); break; } break; } } else { $data = array('type' => 'string', 'data' => $value); returnData($returnType, $data); } } /** * * @param $trash1 * @param $trahs2 * @param mixed $other If $other is string is only the separator, * but if it's array, $other as param is ;;(,...) in this order * and separator char (after text ; ) must be diferent that separator (and other) url (pass in param othermode as othermode=url_encode_separator_) * example: * * return csv with fields type_row,group_id and agent_name, separate with ";" and the return of the text replace for " " * api.php?op=get&op2=tree_agents&return_type=csv&other=;| |type_row,group_id,agent_name&other_mode=url_encode_separator_| * * * @param $returnType * @return unknown_type */ function api_get_tree_agents($trash1, $trahs2, $other, $returnType) { if ($other['type'] == 'array') { $separator = $other['data'][0]; $returnReplace = $other['data'][1]; if (trim($other['data'][2]) == '') $fields = false; else { $fields = explode(',', $other['data'][2]); foreach($fields as $index => $field) $fields[$index] = trim($field); } } else { if (strlen($other['data']) == 0) $separator = ';'; //by default else $separator = $other['data']; $returnReplace = ' '; $fields = false; } $returnVar = array(); $groups = db_get_all_rows_sql('SELECT * FROM tgrupo'); if ($groups === false) $groups = array(); $groups = str_replace('\n', $returnReplace, $groups); $agents = db_get_all_rows_sql('SELECT * FROM tagente'); if ($agents === false) $agents = array(); $agents = str_replace('\n', $returnReplace, $agents); foreach ($groups as $group) { $returnVar[] = array( 'type_row' => 'group', 'group_id' => $group['id_grupo'], 'group_name' => $group['nombre'], 'group_parent' => $group['parent'], 'disabled' => $group['disabled'], 'custom_id' => $group['custom_id'] ); foreach ($agents as $index => $agent) { if ($agent['id_grupo'] == $group['id_grupo']) { $returnVar[] = array( 'type_row' => 'agent', 'agent_id' => $agent['id_agente'], 'agent_name' => $agent['nombre'], 'agent_direction' => $agent['direccion'], 'agent_comentary' => $agent['comentarios'], 'agent_id_group' => $agent['id_grupo'], 'agent_last_contant' => $agent['ultimo_contacto'], 'agent_mode' => $agent['modo'], 'agent_interval' => $agent['intervalo'], 'agent_id_os' => $agent['id_os'], 'agent_os_version' => $agent['os_version'], 'agent_version' => $agent['agent_version'], 'agent_last_remote_contact' => $agent['ultimo_contacto_remoto'], 'agent_disabled' => $agent['disabled'], 'agent_id_parent' => $agent['id_parent'], 'agent_custom_id' => $agent['custom_id'], 'agent_server_name' => $agent['server_name'], 'agent_cascade_protection' => $agent['cascade_protection'] ); $modules = db_get_all_rows_sql('SELECT * FROM (SELECT * FROM tagente_modulo WHERE id_agente = ' . $agent['id_agente'] . ') AS t1 INNER JOIN (SELECT * FROM tagente_estado WHERE id_agente = ' . $agent['id_agente'] . ') AS t2 ON t1.id_agente_modulo = t2.id_agente_modulo'); if ($modules === false) $modules = array(); $modules = str_replace('\n', $returnReplace, $modules); foreach ($modules as $module) { $returnVar[] = array( 'type_row' => 'module', 'module_id_agent_modulo' => $module['id_agente_modulo'], 'module_id_agent' => $module['id_agente'], 'module_id_module_type' => $module['id_tipo_modulo'], 'module_description' => $module['descripcion'], 'module_name' => $module['nombre'], 'module_max' => $module['max'], 'module_min' => $module['min'], 'module_interval' => $module['module_interval'], 'module_tcp_port' => $module['tcp_port'], 'module_tcp_send' => $module['tcp_send'], 'module_tcp_rcv' => $module['tcp_rcv'], 'module_snmp_community' => $module['snmp_community'], 'module_snmp_oid' => $module['snmp_oid'], 'module_ip_target' => $module['ip_target'], 'module_id_module_group' => $module['id_module_group'], 'module_flag' => $module['flag'], 'module_id_module' => $module['id_modulo'], 'module_disabled' => $module['disabled'], 'module_id_export' => $module['id_export'], 'module_plugin_user' => $module['plugin_user'], 'module_plugin_pass' => $module['plugin_pass'], 'module_plugin_parameter' => $module['plugin_parameter'], 'module_id_plugin' => $module['id_plugin'], 'module_post_process' => $module['post_process'], 'module_prediction_module' => $module['prediction_module'], 'module_max_timeout' => $module['max_timeout'], 'module_max_retries' => $module['max_retries'], 'module_custom_id' => $module['custom_id'], 'module_history_data' => $module['history_data'], 'module_min_warning' => $module['min_warning'], 'module_max_warning' => $module['max_warning'], 'module_str_warning' => $module['str_warning'], 'module_min_critical' => $module['min_critical'], 'module_max_critical' => $module['max_critical'], 'module_str_critical' => $module['str_critical'], 'module_min_ff_event' => $module['min_ff_event'], 'module_delete_pending' => $module['delete_pending'], 'module_id_agent_state' => $module['id_agente_estado'], 'module_data' => $module['datos'], 'module_timestamp' => $module['timestamp'], 'module_state' => $module['estado'], 'module_last_try' => $module['last_try'], 'module_utimestamp' => $module['utimestamp'], 'module_current_interval' => $module['current_interval'], 'module_running_by' => $module['running_by'], 'module_last_execution_try' => $module['last_execution_try'], 'module_status_changes' => $module['status_changes'], 'module_last_status' => $module['last_status'] ); $alerts = db_get_all_rows_sql('SELECT *, t1.id AS alert_template_modules_id, t2.id AS alert_templates_id, t3.id AS alert_template_module_actions_id, t4.id AS alert_actions_id, t5.id AS alert_commands_id, t2.name AS alert_templates_name, t4.name AS alert_actions_name, t5.name AS alert_commands_name, t2.description AS alert_templates_description, t5.description AS alert_commands_description, t1.priority AS alert_template_modules_priority, t2.priority AS alert_templates_priority, t2.field1 AS alert_templates_field1, t4.field1 AS alert_actions_field1, t2.field2 AS alert_templates_field2, t4.field2 AS alert_actions_field2, t2.field3 AS alert_templates_field3, t4.field3 AS alert_actions_field3, t2.id_group AS alert_templates_id_group, t4.id_group AS alert_actions_id_group FROM (SELECT * FROM talert_template_modules WHERE id_agent_module = ' . $module['id_agente_modulo'] . ') AS t1 INNER JOIN talert_templates AS t2 ON t1.id_alert_template = t2.id LEFT JOIN talert_template_module_actions AS t3 ON t1.id = t3.id_alert_template_module LEFT JOIN talert_actions AS t4 ON t3.id_alert_action = t4.id LEFT JOIN talert_commands AS t5 ON t4.id_alert_command = t5.id'); if ($alerts === false) $alerts = array(); $alerts = str_replace('\n', $returnReplace, $alerts); foreach ($alerts as $alert) { $returnVar[] = array( 'type_row' => 'alert', 'alert_id_agent_module' => $alert['id_agent_module'], 'alert_id_alert_template' => $alert['id_alert_template'], 'alert_internal_counter' => $alert['internal_counter'], 'alert_last_fired' => $alert['last_fired'], 'alert_last_reference' => $alert['last_reference'], 'alert_times_fired' => $alert['times_fired'], 'alert_disabled' => $alert['disabled'], 'alert_force_execution' => $alert['force_execution'], 'alert_id_alert_action' => $alert['id_alert_action'], 'alert_type' => $alert['type'], 'alert_value' => $alert['value'], 'alert_matches_value' => $alert['matches_value'], 'alert_max_value' => $alert['max_value'], 'alert_min_value' => $alert['min_value'], 'alert_time_threshold' => $alert['time_threshold'], 'alert_max_alerts' => $alert['max_alerts'], 'alert_min_alerts' => $alert['min_alerts'], 'alert_time_from' => $alert['time_from'], 'alert_time_to' => $alert['time_to'], 'alert_monday' => $alert['monday'], 'alert_tuesday' => $alert['tuesday'], 'alert_wednesday' => $alert['wednesday'], 'alert_thursday' => $alert['thursday'], 'alert_friday' => $alert['friday'], 'alert_saturday' => $alert['saturday'], 'alert_sunday' => $alert['sunday'], 'alert_recovery_notify' => $alert['recovery_notify'], 'alert_field2_recovery' => $alert['field2_recovery'], 'alert_field3_recovery' => $alert['field3_recovery'], 'alert_id_alert_template_module' => $alert['id_alert_template_module'], 'alert_fires_min' => $alert['fires_min'], 'alert_fires_max' => $alert['fires_max'], 'alert_id_alert_command' => $alert['id_alert_command'], 'alert_command' => $alert['command'], 'alert_internal' => $alert['internal'], 'alert_template_modules_id' => $alert['alert_template_modules_id'], 'alert_templates_id' => $alert['alert_templates_id'], 'alert_template_module_actions_id' => $alert['alert_template_module_actions_id'], 'alert_actions_id' => $alert['alert_actions_id'], 'alert_commands_id' => $alert['alert_commands_id'], 'alert_templates_name' => $alert['alert_templates_name'], 'alert_actions_name' => $alert['alert_actions_name'], 'alert_commands_name' => $alert['alert_commands_name'], 'alert_templates_description' => $alert['alert_templates_description'], 'alert_commands_description' => $alert['alert_commands_description'], 'alert_template_modules_priority' => $alert['alert_template_modules_priority'], 'alert_templates_priority' => $alert['alert_templates_priority'], 'alert_templates_field1' => $alert['alert_templates_field1'], 'alert_actions_field1' => $alert['alert_actions_field1'], 'alert_templates_field2' => $alert['alert_templates_field2'], 'alert_actions_field2' => $alert['alert_actions_field2'], 'alert_templates_field3' => $alert['alert_templates_field3'], 'alert_actions_field3' => $alert['alert_actions_field3'], 'alert_templates_id_group' => $alert['alert_templates_id_group'], 'alert_actions_id_group' => $alert['alert_actions_id_group'], ); } } unset($agents[$index]); } } } $data = array('type' => 'array', 'data' => $returnVar); if ($fields !== false) $data['list_index'] = $fields; else $data['list_index'] = array( 'type_row', 'group_id', 'group_name', 'group_parent', 'disabled', 'custom_id', 'agent_id', 'agent_name', 'agent_direction', 'agent_comentary', 'agent_id_group', 'agent_last_contant', 'agent_mode', 'agent_interval', 'agent_id_os', 'agent_os_version', 'agent_version', 'agent_last_remote_contact', 'agent_disabled', 'agent_id_parent', 'agent_custom_id', 'agent_server_name', 'agent_cascade_protection', 'module_id_agent_modulo', 'module_id_agent', 'module_id_module_type', 'module_description', 'module_name', 'module_max', 'module_min', 'module_interval', 'module_tcp_port', 'module_tcp_send', 'module_tcp_rcv', 'module_snmp_community', 'module_snmp_oid', 'module_ip_target', 'module_id_module_group', 'module_flag', 'module_id_module', 'module_disabled', 'module_id_export', 'module_plugin_user', 'module_plugin_pass', 'module_plugin_parameter', 'module_id_plugin', 'module_post_process', 'module_prediction_module', 'module_max_timeout', 'module_max_retries', 'module_custom_id', 'module_history_data', 'module_min_warning', 'module_max_warning', 'module_str_warning', 'module_min_critical', 'module_max_critical', 'module_str_critical', 'module_min_ff_event', 'module_delete_pending', 'module_id_agent_state', 'module_data', 'module_timestamp', 'module_state', 'module_last_try', 'module_utimestamp', 'module_current_interval', 'module_running_by', 'module_last_execution_try', 'module_status_changes', 'module_last_status', 'alert_id_agent_module', 'alert_id_alert_template', 'alert_internal_counter', 'alert_last_fired', 'alert_last_reference', 'alert_times_fired', 'alert_disabled', 'alert_force_execution', 'alert_id_alert_action', 'alert_type', 'alert_value', 'alert_matches_value', 'alert_max_value', 'alert_min_value', 'alert_time_threshold', 'alert_max_alerts', 'alert_min_alerts', 'alert_time_from', 'alert_time_to', 'alert_monday', 'alert_tuesday', 'alert_wednesday', 'alert_thursday', 'alert_friday', 'alert_saturday', 'alert_sunday', 'alert_recovery_notify', 'alert_field2_recovery', 'alert_field3_recovery', 'alert_id_alert_template_module', 'alert_fires_min', 'alert_fires_max', 'alert_id_alert_command', 'alert_command', 'alert_internal', 'alert_template_modules_id', 'alert_templates_id', 'alert_template_module_actions_id', 'alert_actions_id', 'alert_commands_id', 'alert_templates_name', 'alert_actions_name', 'alert_commands_name', 'alert_templates_description', 'alert_commands_description', 'alert_template_modules_priority', 'alert_templates_priority', 'alert_templates_field1', 'alert_actions_field1', 'alert_templates_field2', 'alert_actions_field2', 'alert_templates_field3', 'alert_actions_field3', 'alert_templates_id_group', 'alert_actions_id_group' ); returnData($returnType, $data, $separator); } /** * Create a new agent, and print the id for new agent. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, $other as param is ;;;; * ;;;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=new_agent&other=pepito|1.1.1.1|0|4|0|30|8|10||0|0|nose%20nose&other_mode=url_encode_separator_| * * @param $thrash3 Don't use. */ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3) { global $config; $name = $other['data'][0]; $ip = $other['data'][1]; $idParent = $other['data'][2]; $idGroup = $other['data'][3]; $cascadeProtection = $other['data'][4]; $intervalSeconds = $other['data'][5]; $idOS = $other['data'][6]; $idServer = $other['data'][7]; $customId = $other['data'][8]; $learningMode = $other['data'][9]; $disabled = $other['data'][10]; $description = $other['data'][11]; switch ($config["dbtype"]) { case "mysql": $sql1 = 'SELECT name FROM tserver WHERE id_server ='. $idServer; break; case "postgresql": case "oracle": $sql1 = 'SELECT name FROM tserver WHERE id_server ='. $idServer; break; } $nameServer = db_get_value_sql($sql1); if (agents_get_agent_id ($name)) { returnError('agent_name_exist', 'The name of agent yet exist in DB.'); } else if (($idParent != 0) && (db_get_value_sql('SELECT id_agente FROM tagente WHERE id_agente = ' . $idParent) === false)) { returnError('parent_agent_not_exist', 'The agent parent don`t exist.'); } else if (db_get_value_sql('SELECT id_grupo FROM tgrupo WHERE id_grupo = ' . $idGroup) === false) { returnError('id_grupo_not_exist', 'The group don`t exist.'); } else if (db_get_value_sql('SELECT id_os FROM tconfig_os WHERE id_os = ' . $idOS) === false) { returnError('id_os_not_exist', 'The OS don`t exist.'); } else if (db_get_value_sql($sql1) === false) { returnError('server_not_exist', 'The Pandora Server don`t exist.'); } else { $idAgente = db_process_sql_insert ('tagente', array ('nombre' => $name, 'direccion' => $ip, 'id_grupo' => $idGroup, 'intervalo' => $intervalSeconds, 'comentarios' => $description, 'modo' => $learningMode, 'id_os' => $idOS, 'disabled' => $disabled, 'cascade_protection' => $cascadeProtection, 'server_name' => $nameServer, 'id_parent' => $idParent, 'custom_id' => $customId)); returnData('string', array('type' => 'string', 'data' => $idAgente)); } } /** * Delete a agent with the name pass as parameter. * * @param string $id Name of agent to delete. * @param $thrash1 Don't use. * @param $thrast2 Don't use. * @param $thrash3 Don't use. */ function api_set_delete_agent($id, $thrash1, $thrast2, $thrash3) { $agentName = $id; $idAgent[0] = agents_get_agent_id($agentName); if (!agents_delete_agent ($idAgent, true)) returnError('error_delete', 'Error in delete operation.'); else returnData('string', array('type' => 'string', 'data' => __('Correct Delete'))); } /** * Get all agents, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, $other as param are the filters available ;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=get&op2=all_agents&return_type=csv&other=1|2|warning|j|2|~&other_mode=url_encode_separator_| * * @param $thrash3 Don't use. */ function api_get_all_agents($thrash1, $thrash2, $other, $thrash3) { $where = ''; if (isset($other['data'][0])){ // Filter by SO if ($other['data'][0] != ""){ $where .= " AND tconfig_os.id_os = " . $other['data'][0]; } } if (isset($other['data'][1])) { // Filter by group if ($other['data'][1] != "") { $where .= " AND id_grupo = " . $other['data'][1]; } } if (isset($other['data'][3])) { // Filter by name if ($other['data'][3] != "") { $where .= " AND nombre LIKE ('%" . $other['data'][3] . "%')"; } } if (isset($other['data'][4])) { // Filter by policy if ($other['data'][4] != "") { $filter_by_policy = enterprise_hook('policies_get_filter_by_agent', array($other['data'][4])); if ($filter_by_policy !== ENTERPRISE_NOT_HOOK){ $where .= $filter_by_policy; } } } if (!isset($other['data'][5])) $separator = ';'; //by default else $separator = $other['data'][5]; // Initialization of array $result_agents = array(); // Filter by state $sql = "SELECT id_agente, nombre, direccion, comentarios, tconfig_os.name, url_address FROM tagente, tconfig_os WHERE tagente.id_os = tconfig_os.id_os AND disabled = 0 " . $where; $all_agents = db_get_all_rows_sql($sql); // Filter by status: unknown, warning, critical, without modules if (isset($other['data'][2])){ if ($other['data'][2] != "") { foreach($all_agents as $agent){ $filter_modules['id_agente'] = $agent['id_agente']; $filter_modules['disabled'] = 0; $filter_modules['delete_pending'] = 0; $modules = db_get_all_rows_filter('tagente_modulo', $filter_modules, 'id_agente_modulo'); $result_modules = array(); // Skip non init modules foreach ($modules as $module) { if (modules_get_agentmodule_is_init($module['id_agente_modulo'])){ $result_modules[] = $module; } } // Without modules NO_MODULES if ($other['data'][2] == 'no_modules'){ if (empty($result_modules) and $other['data'][2] == 'no_modules'){ $result_agents[] = $agent; } } // filter by NORMAL, WARNING, CRITICAL, UNKNOWN, ALERT_FIRED else { $status = agents_get_status($agent['id_agente'], true); // Filter by status switch ($other['data'][2]) { case 'warning': if ($status == 2) { $result_agents[] = $agent; } break; case 'critical': if ($status == 1) { $result_agents[] = $agent; } break; case 'unknown': if ($status == 3) { $result_agents[] = $agent; } break; case 'normal': if ($status == 0) { $result_agents[] = $agent; } break; case 'alert_fired': if ($status == 4) { $result_agents[] = $agent; } break; } } } } else { $result_agents = $all_agents; } } else { $result_agents = $all_agents; } if (count($result_agents) > 0 and $result_agents !== false) { $data = array('type' => 'array', 'data' => $result_agents); returnData('csv', $data, $separator); } else { returnError('error_all_agents', 'No agents retrieved.'); } } /** * Get modules for an agent, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, $other as param are the filters available in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=get&op2=agents_modules&return_type=csv&other=14&other_mode=url_encode_separator_| * * @param $thrash3 Don't use. */ function api_get_agent_modules($thrash1, $thrash2, $other, $thrash3) { $sql = sprintf("SELECT id_agente, id_agente_modulo, nombre FROM tagente_modulo WHERE id_agente = %d AND disabled = 0 AND delete_pending = 0", $other['data'][0]); $all_modules = db_get_all_rows_sql($sql); if (count($all_modules) > 0 and $all_modules !== false) { $data = array('type' => 'array', 'data' => $all_modules); returnData('csv', $data, ';'); } else { returnError('error_agent_modules', 'No modules retrieved.'); } } /** * Get modules for an agent, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, $other as param are the filters available in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=get&op2=group_agent&return_type=csv&other=14&other_mode=url_encode_separator_| * * @param $thrash3 Don't use. */ function api_get_group_agent($thrash1, $thrash2, $other, $thrash3) { $sql = sprintf("SELECT groups.nombre nombre FROM tagente agents, tgrupo groups WHERE id_agente = %d AND agents.disabled = 0 AND groups.disabled = 0 AND agents.id_grupo = groups.id_grupo", $other['data'][0]); $group_names = db_get_all_rows_sql($sql); if (count($group_names) > 0 and $group_names !== false) { $data = array('type' => 'array', 'data' => $group_names); returnData('csv', $data, ';'); } else { returnError('error_group_agent', 'No groups retrieved.'); } } /** * Get all policies, possible filtered by agent, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, $other as param are the filters available in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=get&op2=policies&return_type=csv&other=&other_mode=url_encode_separator_| * * @param $thrash3 Don't use. */ function api_get_policies($thrash1, $thrash2, $other, $thrash3) { $where = ''; if ($other['data'][0] != "") { $where .= ' AND id_agent = ' . $other['data'][0]; $sql = sprintf("SELECT policy.id, name, id_agent FROM tpolicies policy, tpolicy_agents pol_agents WHERE policy.id = pol_agents.id %s", $where); } else { $sql = "SELECT id, name FROM tpolicies policy"; } $policies = db_get_all_rows_sql($sql); if (count($policies) > 0 and $policies !== false) { $data = array('type' => 'array', 'data' => $policies); returnData('csv', $data, ';'); } else { returnError('error_get_policies', 'No policies retrieved.'); } } /** * Get policy modules, possible filtered by agent, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, $other as param are the filters available in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=get&op2=policy_modules&return_type=csv&other=2&other_mode=url_encode_separator_| * * @param $thrash3 Don't use. */ function api_get_policy_modules($thrash1, $thrash2, $other, $thrash3) { $where = ''; if ($other['data'][0] == "") { returnError('error_policy_modules', 'Error retrieving policy modules. Id_policy cannot be left blank.'); return; } $policies = enterprise_hook('policies_get_modules_api', array($other['data'][0], $other['data'][1])); if ($policies === ENTERPRISE_NOT_HOOK) { returnError('error_policy_modules', 'Error retrieving policy modules.'); return; } if (count($policies) > 0 and $policies !== false){ $data = array('type' => 'array', 'data' => $policies); returnData('csv', $data, ';'); } else { returnError('error_policy_modules', 'No policy modules retrieved.'); } } /** * Create a network module in agent. And return the id_agent_module of new module. * * @param string $id Name of agent to add the module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;;; * ;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=create_network_module&id=pepito&other=prueba|0|7|1|10|15|0|16|18|0|15|0|www.google.es|0||0|180|0|0|0|0|latency%20ping&other_mode=url_encode_separator_| * * * @param $thrash3 Don't use */ function api_set_create_network_module($id, $thrash1, $other, $thrash3) { $agentName = $id; $idAgent = agents_get_agent_id($agentName); if (!$idAgent){ returnError('error_create_network_module', __('Error in creation network module. Agent name doesn\'t exists.')); return; } if ($other['data'][2] < 6 or $other['data'][2] > 18){ returnError('error_create_network_module', __('Error in creation network module. Id_module_type is not correct for network modules.')); return; } $name = $other['data'][0]; $values = array( 'id_agente' => $idAgent, 'disabled' => $other['data'][1], 'id_tipo_modulo' => $other['data'][2], 'id_module_group' => $other['data'][3], 'min_warning' => $other['data'][4], 'max_warning' => $other['data'][5], 'str_warning' => $other['data'][6], 'min_critical' => $other['data'][7], 'max_critical' => $other['data'][8], 'str_critical' => $other['data'][9], 'min_ff_event' => $other['data'][10], 'history_data' => $other['data'][11], 'ip_target' => $other['data'][12], 'tcp_port' => $other['data'][13], 'snmp_community' => $other['data'][14], 'snmp_oid' => $other['data'][15], 'module_interval' => $other['data'][16], 'post_process' => $other['data'][17], 'min' => $other['data'][18], 'max' => $other['data'][19], 'custom_id' => $other['data'][20], 'descripcion' => $other['data'][21], 'id_modulo' => 2 ); $idModule = modules_create_agent_module($idAgent, $name, $values, true); if (is_error($idModule)) { // TODO: Improve the error returning more info returnError('error_create_network_module', __('Error in creation network module.')); } else { returnData('string', array('type' => 'string', 'data' => $idModule)); } } /** * Update a network module in agent. And return a message with the result of the operation. * * @param string $id Id of the network module to update. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ; * ;;;;;;;; * ;;;;;;; * ;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=update_network_module&id=271&other=156|0|2|10|15||16|18||7|0|127.0.0.1|0||0|300|30.00|0|0|0|latency%20ping%20modified%20by%20the%20Api&other_mode=url_encode_separator_| * * * @param $thrash3 Don't use */ function api_set_update_network_module($id_module, $thrash1, $other, $thrash3){ if ($id_module == "") { returnError('error_update_network_module', __('Error updating network module. Module name cannot be left blank.')); return; } $check_id_module = db_get_value ('id_agente_modulo', 'tagente_modulo', 'id_agente_modulo', $id_module); if (!$check_id_module) { returnError('error_update_network_module', __('Error updating network module. Id_module doesn\'t exists.')); return; } // If we want to change the module to a new agent if ($other['data'][0] != "") { $id_agent_old = db_get_value ('id_agente', 'tagente_modulo', 'id_agente_modulo', $id_module); if ($id_agent_old != $other['data'][0]){ $id_module_exists = db_get_value_filter ('id_agente_modulo', 'tagente_modulo', array('nombre' => $module_name, 'id_agente' => $other['data'][0])); if ($id_module_exists){ returnError('error_update_network_module', __('Error updating network module. Id_module exists in the new agent.')); return; } } } $network_module_fields = array('id_agente', 'disabled', 'id_module_group', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'min_ff_event', 'history_data', 'ip_target', 'tcp_port', 'snmp_community', 'snmp_oid', 'module_interval', 'post_process', 'min', 'max', 'custom_id', 'descripcion'); $values = array(); $cont = 0; foreach ($network_module_fields as $field) { if ($other['data'][$cont] != "") { $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = modules_update_agent_module($id_module, $values); if ($result_update < 0) returnError('error_update_network_module', 'Error updating network module.'); else returnData('string', array('type' => 'string', 'data' => __('Network module updated.'))); } /** * Create a plugin module in agent. And return the id_agent_module of new module. * * @param string $id Name of agent to add the module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;;; * ;;;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=create_plugin_module&id=pepito&other=prueba|0|1|2|0|0||0|0||0|0|127.0.0.1|0||0|300|0|0|0|0|plugin%20module%20from%20api|2|admin|pass|-p%20max&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_create_plugin_module($id, $thrash1, $other, $thrash3) { $agentName = $id; if ($other['data'][22] == "") { returnError('error_create_plugin_module', __('Error in creation plugin module. Id_plugin cannot be left blank.')); return; } $idAgent = agents_get_agent_id($agentName); if (!$idAgent) { returnError('error_create_plugin_module', __('Error in creation plugin module. Agent name doesn\'t exists.')); return; } $name = $other['data'][0]; $values = array( 'id_agente' => $idAgent, 'disabled' => $other['data'][1], 'id_tipo_modulo' => $other['data'][2], 'id_module_group' => $other['data'][3], 'min_warning' => $other['data'][4], 'max_warning' => $other['data'][5], 'str_warning' => $other['data'][6], 'min_critical' => $other['data'][7], 'max_critical' => $other['data'][8], 'str_critical' => $other['data'][9], 'min_ff_event' => $other['data'][10], 'history_data' => $other['data'][11], 'ip_target' => $other['data'][12], 'tcp_port' => $other['data'][13], 'snmp_community' => $other['data'][14], 'snmp_oid' => $other['data'][15], 'module_interval' => $other['data'][16], 'post_process' => $other['data'][17], 'min' => $other['data'][18], 'max' => $other['data'][19], 'custom_id' => $other['data'][20], 'descripcion' => $other['data'][21], 'id_modulo' => 4, 'id_plugin' => $other['data'][22], 'plugin_user' => $other['data'][23], 'plugin_pass' => $other['data'][24], 'plugin_parameter' => $other['data'][25] ); $idModule = modules_create_agent_module($idAgent, $name, $values, true); if (is_error($idModule)) { // TODO: Improve the error returning more info returnError('error_create_plugin_module', __('Error in creation plugin module.')); } else { returnData('string', array('type' => 'string', 'data' => $idModule)); } } /** * Update a plugin module in agent. And return the id_agent_module of new module. * @param string $id Id of the plugin module to update. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;;;; * ;;;;;;; * ;;;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=update_plugin_module&id=293&other=156|0|2|0|0||0|0||0|0|127.0.0.1|0||0|300|0|0|0|0|plugin%20module%20from%20api|2|admin|pass|-p%20max&other_mode=url_encode_separator_| * * * @param $thrash3 Don't use */ function api_set_update_plugin_module($id_module, $thrash1, $other, $thrash3){ if ($id_module == "") { returnError('error_update_plugin_module', __('Error updating plugin module. Id_module cannot be left blank.')); return; } $check_id_module = db_get_value ('id_agente_modulo', 'tagente_modulo', 'id_agente_modulo', $id_module); if (!$check_id_module) { returnError('error_update_plugin_module', __('Error updating plugin module. Id_module doesn\'t exists.')); return; } // If we want to change the module to a new agent if ($other['data'][0] != "") { $id_agent_old = db_get_value ('id_agente', 'tagente_modulo', 'id_agente_modulo', $id_module); if ($id_agent_old != $other['data'][0]) { $id_module_exists = db_get_value_filter ('id_agente_modulo', 'tagente_modulo', array('nombre' => $module_name, 'id_agente' => $other['data'][0])); if ($id_module_exists) { returnError('error_update_plugin_module', __('Error updating plugin module. Id_module exists in the new agent.')); return; } } } $plugin_module_fields = array('id_agente', 'disabled', 'id_module_group', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'min_ff_event', 'history_data', 'ip_target', 'tcp_port', 'snmp_community', 'snmp_oid', 'module_interval', 'post_process', 'min', 'max', 'custom_id', 'descripcion', 'id_plugin', 'plugin_user', 'plugin_pass', 'plugin_parameter'); $values = array(); $cont = 0; foreach ($plugin_module_fields as $field) { if ($other['data'][$cont] != "") { $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = modules_update_agent_module($id_module, $values); if ($result_update < 0) returnError('error_update_plugin_module', 'Error updating plugin module.'); else returnData('string', array('type' => 'string', 'data' => __('Plugin module updated.'))); } /** * Create a data module in agent. And return the id_agent_module of new module. * Note: Only adds database information, this function doesn't alter config file information. * * @param string $id Name of agent to add the module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;; * ;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=create_data_module&id=pepito&other=prueba|0|1|data%20module%20from%20api|1|10|20|10.50|180|10|15||16|20||0&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_create_data_module($id, $thrash1, $other, $thrash3) { $agentName = $id; if ($other['data'][0] == "") { returnError('error_create_data_module', __('Error in creation data module. Module_name cannot be left blank.')); return; } $idAgent = agents_get_agent_id($agentName); if (!$idAgent) { returnError('error_create_data_module', __('Error in creation data module. Agent name doesn\'t exists.')); return; } $name = $other['data'][0]; $values = array( 'id_agente' => $idAgent, 'disabled' => $other['data'][1], 'id_tipo_modulo' => $other['data'][2], 'descripcion' => $other['data'][3], 'id_module_group' => $other['data'][4], 'min' => $other['data'][5], 'max' => $other['data'][6], 'post_process' => $other['data'][7], 'module_interval' => $other['data'][8], 'min_warning' => $other['data'][9], 'max_warning' => $other['data'][10], 'str_warning' => $other['data'][11], 'min_critical' => $other['data'][12], 'max_critical' => $other['data'][13], 'str_critical' => $other['data'][14], 'history_data' => $other['data'][15], 'id_modulo' => 1 ); $idModule = modules_create_agent_module($idAgent, $name, $values, true); if (is_error($idModule)) { // TODO: Improve the error returning more info returnError('error_create_data_module', __('Error in creation data module.')); } else { returnData('string', array('type' => 'string', 'data' => $idModule)); } } /** * Update a data module in agent. And return a message with the result of the operation. * * @param string $id Id of the data module to update. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;;; * ;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=update_data_module&id=170&other=44|0|data%20module%20modified%20from%20API|6|0|0|50.00|300|10|15||16|18||0&other_mode=url_encode_separator_| * * * @param $thrash3 Don't use */ function api_set_update_data_module($id_module, $thrash1, $other, $thrash3){ if ($id_module == "") { returnError('error_update_data_module', __('Error updating data module. Id_module cannot be left blank.')); return; } $check_id_module = db_get_value ('id_agente_modulo', 'tagente_modulo', 'id_agente_modulo', $id_module); if (!$check_id_module) { returnError('error_update_data_module', __('Error updating data module. Id_module doesn\'t exists.')); return; } // If we want to change the module to a new agent if ($other['data'][0] != "") { $id_agent_old = db_get_value ('id_agente', 'tagente_modulo', 'id_agente_modulo', $id_module); if ($id_agent_old != $other['data'][0]) { $id_module_exists = db_get_value_filter ('id_agente_modulo', 'tagente_modulo', array('nombre' => $module_name, 'id_agente' => $other['data'][0])); if ($id_module_exists) { returnError('error_update_data_module', __('Error updating data module. Id_module exists in the new agent.')); return; } } } $data_module_fields = array('id_agente', 'disabled', 'descripcion', 'id_module_group', 'min', 'max', 'post_process', 'module_interval', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'history_data'); $values = array(); $cont = 0; foreach ($data_module_fields as $field) { if ($other['data'][$cont] != ""){ $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = modules_update_agent_module($id_module, $values); if ($result_update < 0) returnError('error_update_data_module', 'Error updating data module.'); else returnData('string', array('type' => 'string', 'data' => __('Data module updated.'))); } /** * Create a SNMP module in agent. And return the id_agent_module of new module. * * @param string $id Name of agent to add the module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;;;; * ;;;;;;;; * ; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example 1 (snmp v: 3, snmp3_priv_method: AES, passw|authNoPriv|MD5|pepito_user|example_priv_passw) * * api.php?op=set&op2=create_snmp_module&id=pepito&other=prueba|0|15|1|10|15||16|18||15|0|127.0.0.1|60|3|public|.1.3.6.1.2.1.1.1.0|180|0|0|0|0|SNMP%20module%20from%20API|AES|example_priv_passw|authNoPriv|MD5|pepito_user|example_auth_passw&other_mode=url_encode_separator_| * * example 2 (snmp v: 1) * * api.php?op=set&op2=create_snmp_module&id=pepito1&other=prueba2|0|15|1|10|15||16|18||15|0|127.0.0.1|60|1|public|.1.3.6.1.2.1.1.1.0|180|0|0|0|0|SNMP module from API&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_create_snmp_module($id, $thrash1, $other, $thrash3) { $agentName = $id; if ($other['data'][0] == "") { returnError('error_create_snmp_module', __('Error in creation SNMP module. Module_name cannot be left blank.')); return; } if ($other['data'][2] < 15 or $other['data'][3] > 17) { returnError('error_create_snmp_module', __('Error in creation SNMP module. Invalid id_module_type for a SNMP module.')); return; } $idAgent = agents_get_agent_id($agentName); if (!$idAgent) { returnError('error_create_snmp_module', __('Error in creation SNMP module. Agent name doesn\'t exists.')); return; } $name = $other['data'][0]; # SNMP version 3 if ($other['data'][14] == "3") { if ($other['data'][23] != "AES" and $other['data'][23] != "DES"){ returnError('error_create_snmp_module', __('Error in creation SNMP module. snmp3_priv_method doesn\'t exists. Set it to \'AES\' or \'DES\'. ')); return; } if ($other['data'][25] != "authNoPriv" and $other['data'][25] != "authPriv" and $other['data'][25] != "noAuthNoPriv"){ returnError('error_create_snmp_module', __('Error in creation SNMP module. snmp3_sec_level doesn\'t exists. Set it to \'authNoPriv\' or \'authPriv\' or \'noAuthNoPriv\'. ')); return; } if ($other['data'][26] != "MD5" and $other['data'][26] != "SHA"){ returnError('error_create_snmp_module', __('Error in creation SNMP module. snmp3_auth_method doesn\'t exists. Set it to \'MD5\' or \'SHA\'. ')); return; } $values = array( 'id_agente' => $idAgent, 'disabled' => $other['data'][1], 'id_tipo_modulo' => $other['data'][2], 'id_module_group' => $other['data'][3], 'min_warning' => $other['data'][4], 'max_warning' => $other['data'][5], 'str_warning' => $other['data'][6], 'min_critical' => $other['data'][7], 'max_critical' => $other['data'][8], 'str_critical' => $other['data'][9], 'min_ff_event' => $other['data'][10], 'history_data' => $other['data'][11], 'ip_target' => $other['data'][12], 'tcp_port' => $other['data'][13], 'tcp_send' => $other['data'][14], 'snmp_community' => $other['data'][15], 'snmp_oid' => $other['data'][16], 'module_interval' => $other['data'][17], 'post_process' => $other['data'][18], 'min' => $other['data'][19], 'max' => $other['data'][20], 'custom_id' => $other['data'][21], 'descripcion' => $other['data'][22], 'id_modulo' => 2, 'custom_string_1' => $other['data'][23], 'custom_string_2' => $other['data'][24], 'custom_string_3' => $other['data'][25], 'plugin_parameter' => $other['data'][26], 'plugin_user' => $other['data'][27], 'plugin_pass' => $other['data'][28] ); } else { $values = array( 'id_agente' => $idAgent, 'disabled' => $other['data'][1], 'id_tipo_modulo' => $other['data'][2], 'id_module_group' => $other['data'][3], 'min_warning' => $other['data'][4], 'max_warning' => $other['data'][5], 'str_warning' => $other['data'][6], 'min_critical' => $other['data'][7], 'max_critical' => $other['data'][8], 'str_critical' => $other['data'][9], 'min_ff_event' => $other['data'][10], 'history_data' => $other['data'][11], 'ip_target' => $other['data'][12], 'tcp_port' => $other['data'][13], 'tcp_send' => $other['data'][14], 'snmp_community' => $other['data'][15], 'snmp_oid' => $other['data'][16], 'module_interval' => $other['data'][17], 'post_process' => $other['data'][18], 'min' => $other['data'][19], 'max' => $other['data'][20], 'custom_id' => $other['data'][21], 'descripcion' => $other['data'][22], 'id_modulo' => 2 ); } $idModule = modules_create_agent_module($idAgent, $name, $values, true); if (is_error($idModule)) { // TODO: Improve the error returning more info returnError('error_create_snmp_module', __('Error in creation SNMP module.')); } else { returnData('string', array('type' => 'string', 'data' => $idModule)); } } /** * Update a SNMP module in agent. And return a message with the result of the operation. * * @param string $id Id of module to update. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;;;; * ;;;;;;;; * ;;;;;;;; * ; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example (update snmp v: 3, snmp3_priv_method: AES, passw|authNoPriv|MD5|pepito_user|example_priv_passw) * * api.php?op=set&op2=update_snmp_module&id=example_snmp_module_name&other=44|0|6|20|25||26|30||15|1|127.0.0.1|60|3|public|.1.3.6.1.2.1.1.1.0|180|50.00|10|60|0|SNMP%20module%20modified%20by%20API|AES|example_priv_passw|authNoPriv|MD5|pepito_user|example_auth_passw&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3) { if ($id_module == "") { returnError('error_update_snmp_module', __('Error updating SNMP module. Id_module cannot be left blank.')); return; } $check_id_module = db_get_value ('id_agente_modulo', 'tagente_modulo', 'id_agente_modulo', $id_module); if (!$check_id_module) { returnError('error_update_snmp_module', __('Error updating SNMP module. Id_module doesn\'t exists.')); return; } // If we want to change the module to a new agent if ($other['data'][0] != "") { $id_agent_old = db_get_value ('id_agente', 'tagente_modulo', 'id_agente_modulo', $id_module); if ($id_agent_old != $other['data'][0]) { $id_module_exists = db_get_value_filter ('id_agente_modulo', 'tagente_modulo', array('nombre' => $module_name, 'id_agente' => $other['data'][0])); if ($id_module_exists) { returnError('error_update_snmp_module', __('Error updating SNMP module. Id_module exists in the new agent.')); return; } } } # SNMP version 3 if ($other['data'][13] == "3") { if ($other['data'][22] != "AES" and $other['data'][22] != "DES") { returnError('error_create_snmp_module', __('Error in creation SNMP module. snmp3_priv_method doesn\'t exists. Set it to \'AES\' or \'DES\'. ')); return; } if ($other['data'][24] != "authNoPriv" and $other['data'][24] != "authPriv" and $other['data'][24] != "noAuthNoPriv"){ returnError('error_create_snmp_module', __('Error in creation SNMP module. snmp3_sec_level doesn\'t exists. Set it to \'authNoPriv\' or \'authPriv\' or \'noAuthNoPriv\'. ')); return; } if ($other['data'][25] != "MD5" and $other['data'][25] != "SHA") { returnError('error_create_snmp_module', __('Error in creation SNMP module. snmp3_auth_method doesn\'t exists. Set it to \'MD5\' or \'SHA\'. ')); return; } $snmp_module_fields = array('id_agente', 'disabled', 'id_module_group', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'min_ff_event', 'history_data', 'ip_target', 'tcp_port', 'tcp_send', 'snmp_community', 'snmp_oid', 'module_interval', 'post_process', 'min', 'max', 'custom_id', 'descripcion', 'custom_string_1', 'custom_string_2', 'custom_string_3', 'plugin_parameter', 'plugin_user', 'plugin_pass'); } else { $snmp_module_fields = array('id_agente', 'disabled', 'id_module_group', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'min_ff_event', 'history_data', 'ip_target', 'tcp_port', 'tcp_send', 'snmp_community', 'snmp_oid', 'module_interval', 'post_process', 'min', 'max', 'custom_id', 'descripcion'); } $values = array(); $cont = 0; foreach ($snmp_module_fields as $field){ if ($other['data'][$cont] != ""){ $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = modules_update_agent_module($id_module, $values); if ($result_update < 0) returnError('error_update_snmp_module', 'Error updating SNMP module.'); else returnData('string', array('type' => 'string', 'data' => __('SNMP module updated.'))); } /** * Create new network component. * * @param $id string Name of the network component. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;; * ;;;;;;; * ;;; in this * order and separator char (after text ; ) and separator (pass in param * othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=new_network_component&id=example_network_component_name&other=7|network%20component%20created%20by%20Api|300|30|10|public|3||1|10|20|str|21|30|str1|10|50.00|12&other_mode=url_encode_separator_| * * @param $thrash2 Don't use. */ function api_set_new_network_component($id, $thrash1, $other, $thrash2) { if ($id == "") { returnError('error_set_new_network_component', __('Error creating network component. Network component name cannot be left blank.')); return; } if ($other['data'][0] < 6 or $other['data'][0] > 18) { returnError('error_set_new_network_component', __('Error creating network component. Incorrect value for Network component type field.')); return; } if ($other['data'][17] == "") { returnError('error_set_new_network_component', __('Error creating network component. Network component group cannot be left blank.')); return; } $values = array ( 'description' => $other['data'][1], 'module_interval' => $other['data'][2], 'max' => $other['data'][3], 'min' => $other['data'][4], 'snmp_community' => $other['data'][5], 'id_module_group' => $other['data'][6], 'id_modulo' => 2, 'max_timeout' => $other['data'][7], 'history_data' => $other['data'][8], 'min_warning' => $other['data'][9], 'max_warning' => $other['data'][10], 'str_warning' => $other['data'][11], 'min_critical' => $other['data'][12], 'max_critical' => $other['data'][13], 'str_critical' => $other['data'][14], 'min_ff_event' => $other['data'][15], 'post_process' => $other['data'][16], 'max_retries' => $other['data'][17], ); $name_check = db_get_value ('name', 'tnetwork_component', 'name', $id); if ($name_check !== false) { returnError('error_set_new_network_component', __('Error creating network component. This network component already exists.')); return; } $id = network_components_create_network_component ($id, $other['data'][0], $other['data'][17], $values); if (!$id) returnError('error_set_new_network_component', 'Error creating network component.'); else returnData('string', array('type' => 'string', 'data' => $id)); } /** * Create new plugin component. * * @param $id string Name of the plugin component. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;;; * ;;;;;;; * ;;; in this * order and separator char (after text ; ) and separator (pass in param * othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=new_plugin_component&id=example_plugin_component_name&other=2|plugin%20component%20created%20by%20Api|300|30|10|66|3|2|example_user|example_pass|-p%20max||1|10|20|str|21|30|str1|10|50.00|12&other_mode=url_encode_separator_| * * @param $thrash2 Don't use. */ function api_set_new_plugin_component($id, $thrash1, $other, $thrash2) { if ($id == "") { returnError('error_set_new_plugin_component', __('Error creating plugin component. Plugin component name cannot be left blank.')); return; } if ($other['data'][7] == "") { returnError('error_set_new_plugin_component', __('Error creating plugin component. Incorrect value for Id plugin.')); return; } if ($other['data'][21] == "") { returnError('error_set_new_plugin_component', __('Error creating plugin component. Plugin component group cannot be left blank.')); return; } $values = array ( 'description' => $other['data'][1], 'module_interval' => $other['data'][2], 'max' => $other['data'][3], 'min' => $other['data'][4], 'tcp_port' => $other['data'][5], 'id_module_group' => $other['data'][6], 'id_modulo' => 4, 'id_plugin' => $other['data'][7], 'plugin_user' => $other['data'][8], 'plugin_pass' => $other['data'][9], 'plugin_parameter' => $other['data'][10], 'max_timeout' => $other['data'][11], 'history_data' => $other['data'][12], 'min_warning' => $other['data'][13], 'max_warning' => $other['data'][14], 'str_warning' => $other['data'][15], 'min_critical' => $other['data'][16], 'max_critical' => $other['data'][17], 'str_critical' => $other['data'][18], 'min_ff_event' => $other['data'][19], 'post_process' => $other['data'][20], 'max_retries' => $other['data'][11]); $name_check = db_get_value ('name', 'tnetwork_component', 'name', $id); if ($name_check !== false) { returnError('error_set_new_plugin_component', __('Error creating plugin component. This plugin component already exists.')); return; } $id = network_components_create_network_component ($id, $other['data'][0], $other['data'][21], $values); if (!$id) returnError('error_set_new_plugin_component', 'Error creating plugin component.'); else returnData('string', array('type' => 'string', 'data' => $id)); } /** * Create new SNMP component. * * @param $id string Name of the SNMP component. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;; * ;;;;;;; * ;;;;; * ;;;;;;;; in this * order and separator char (after text ; ) and separator (pass in param * othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=new_snmp_component&id=example_snmp_component_name&other=16|SNMP%20component%20created%20by%20Api|300|30|10|3||1|10|20|str|21|30|str1|15|50.00|3|.1.3.6.1.2.1.2.2.1.8.2|public|example_auth_user|example_auth_pass|66|AES|example_priv_pass|MD5|authNoPriv|12&other_mode=url_encode_separator_| * * @param $thrash2 Don't use. */ function api_set_new_snmp_component($id, $thrash1, $other, $thrash2) { if ($id == "") { returnError('error_set_new_snmp_component', __('Error creating SNMP component. SNMP component name cannot be left blank.')); return; } if ($other['data'][0] < 15 or $other['data'][0] > 17) { returnError('error_set_new_snmp_component', __('Error creating SNMP component. Incorrect value for Snmp component type field.')); return; } if ($other['data'][25] == "") { returnError('error_set_new_snmp_component', __('Error creating SNMP component. Snmp component group cannot be left blank.')); return; } # SNMP version 3 if ($other['data'][16] == "3") { if ($other['data'][22] != "AES" and $other['data'][22] != "DES") { returnError('error_set_new_snmp_component', __('Error creating SNMP component. snmp3_priv_method doesn\'t exists. Set it to \'AES\' or \'DES\'. ')); return; } if ($other['data'][25] != "authNoPriv" and $other['data'][25] != "authPriv" and $other['data'][25] != "noAuthNoPriv"){ returnError('error_set_new_snmp_component', __('Error creating SNMP component. snmp3_sec_level doesn\'t exists. Set it to \'authNoPriv\' or \'authPriv\' or \'noAuthNoPriv\'. ')); return; } if ($other['data'][24] != "MD5" and $other['data'][24] != "SHA") { returnError('error_set_new_snmp_component', __('Error creating SNMP component. snmp3_auth_method doesn\'t exists. Set it to \'MD5\' or \'SHA\'. ')); return; } $values = array ( 'description' => $other['data'][1], 'module_interval' => $other['data'][2], 'max' => $other['data'][3], 'min' => $other['data'][4], 'id_module_group' => $other['data'][5], 'max_timeout' => $other['data'][6], 'history_data' => $other['data'][7], 'min_warning' => $other['data'][8], 'max_warning' => $other['data'][9], 'str_warning' => $other['data'][10], 'min_critical' => $other['data'][11], 'max_critical' => $other['data'][12], 'str_critical' => $other['data'][13], 'min_ff_event' => $other['data'][14], 'post_process' => $other['data'][15], 'tcp_send' => $other['data'][16], 'snmp_oid' => $other['data'][17], 'snmp_community' => $other['data'][18], 'plugin_user' => $other['data'][19], // snmp3_auth_user 'plugin_pass' => $other['data'][20], // snmp3_auth_pass 'tcp_port' => $other['data'][21], 'id_modulo' => 2, 'custom_string_1' => $other['data'][22], // snmp3_privacy_method 'custom_string_2' => $other['data'][23], // snmp3_privacy_pass 'plugin_parameter' => $other['data'][24], // snmp3_auth_method 'custom_string_3' => $other['data'][25], // snmp3_security_level 'max_retries' => $other['data'][26], ); } else { $values = array ( 'description' => $other['data'][1], 'module_interval' => $other['data'][2], 'max' => $other['data'][3], 'min' => $other['data'][4], 'id_module_group' => $other['data'][5], 'max_timeout' => $other['data'][6], 'history_data' => $other['data'][7], 'min_warning' => $other['data'][8], 'max_warning' => $other['data'][9], 'str_warning' => $other['data'][10], 'min_critical' => $other['data'][11], 'max_critical' => $other['data'][12], 'str_critical' => $other['data'][13], 'min_ff_event' => $other['data'][14], 'post_process' => $other['data'][15], 'tcp_send' => $other['data'][16], 'snmp_oid' => $other['data'][17], 'snmp_community' => $other['data'][18], 'plugin_user' => '', 'plugin_pass' => '', 'tcp_port' => $other['data'][21], 'id_modulo' => 2, 'max_retries' => $other['data'][22], ); } $name_check = db_get_value ('name', 'tnetwork_component', 'name', $id); if ($name_check !== false){ returnError('error_set_new_snmp_component', __('Error creating SNMP component. This SNMP component already exists.')); return; } $id = network_components_create_network_component ($id, $other['data'][0], $other['data'][25], $values); if (!$id) returnError('error_set_new_snmp_component', 'Error creating SNMP component.'); else returnData('string', array('type' => 'string', 'data' => $id)); } /** * Create new local (data) component. * * @param $id string Name of the local component. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ; in this * order and separator char (after text ; ) and separator (pass in param * othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=new_local_component&id=example_local_component_name&other=local%20component%20created%20by%20Api~5~12~module_begin%0dmodule_name%20example_local_component_name%0dmodule_type%20generic_data%0dmodule_exec%20ps%20|%20grep%20pid%20|%20wc%20-l%0dmodule_interval%202%0dmodule_end&other_mode=url_encode_separator_~ * * @param $thrash2 Don't use. */ function api_set_new_local_component($id, $thrash1, $other, $thrash2) { if ($id == ""){ returnError('error_set_new_local_component', __('Error creating local component. Local component name cannot be left blank.')); return; } if ($other['data'][1] == ""){ returnError('error_set_new_local_component', __('Error creating local component. Local component group cannot be left blank.')); return; } $values = array ( 'description' => $other['data'][0], 'id_network_component_group' => $other['data'][1] ); $name_check = enterprise_hook('local_components_get_local_components', array(array('name' => $id), 'name')); if ($name_check === ENTERPRISE_NOT_HOOK) { returnError('error_set_new_local_component', __('Error creating local component.')); return; } if ($name_check !== false){ returnError('error_set_new_local_component', __('Error creating local component. This local component already exists.')); return; } $id = enterprise_hook('local_components_create_local_component', array($id, $other['data'][3], $other['data'][1], $values)); if (!$id) returnError('error_set_new_local_component', 'Error creating local component.'); else returnData('string', array('type' => 'string', 'data' => $id)); } /** * Get module data value from all agents filter by module name. And return id_agents, agent_name and module value. * * @param $id string Name of the module. * @param $thrash1 Don't use. * @param array $other Don't use. * example: * * api.php?op=get&op2=module_value_all_agents&id=example_module_name * * @param $thrash2 Don't use. */ function api_get_module_value_all_agents($id, $thrash1, $other, $thrash2) { if ($id == ""){ returnError('error_get_module_value_all_agents', __('Error getting module value from all agents. Module name cannot be left blank.')); return; } $id_module = db_get_value ('id_agente_modulo', 'tagente_modulo', 'nombre', $id); if ($id_module === false){ returnError('error_get_module_value_all_agents', __('Error getting module value from all agents. Module name doesn\'t exists.')); return; } $sql = sprintf("SELECT agent.id_agente, agent.nombre, module_state.datos FROM tagente agent, tagente_modulo module, tagente_estado module_state WHERE agent.id_agente = module.id_agente AND module.id_agente_modulo=module_state.id_agente_modulo AND module.nombre = '%s'", $id); $module_values = db_get_all_rows_sql($sql); if (!$module_values){ returnError('error_get_module_value_all_agents', 'Error getting module values from all agents.'); } else{ $data = array('type' => 'array', 'data' => $module_values); returnData('csv', $data, ';'); } } /** * Create an alert template. And return the id of new template. * * @param string $id Name of alert template to add. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;;; * ;;;;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example 1 (condition: regexp =~ /pp/, action: Mail to XXX, max_alert: 10, min_alert: 0, priority: WARNING, group: databases): * api.php?op=set&op2=create_alert_template&id=pepito&other=regex|template%20based%20in%20regexp|1||||pp|1||||10|0|||||||||||||3&other_mode=url_encode_separator_| * * example 2 (condition: value is not between 5 and 10, max_value: 10.00, min_value: 5.00, time_from: 00:00:00, time_to: 15:00:00, priority: CRITICAL, group: Servers): * api.php?op=set&op2=create_alert_template&id=template_min_max&other=max_min|template%20based%20in%20range|NULL||||||10|5||||00:00:00|15:00:00|||||||||||4|2&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_create_alert_template($name, $thrash1, $other, $thrash3) { if ($name == "") { returnError('error_create_alert_template', __('Error creating alert template. Template name cannot be left blank.')); return; } $template_name = $name; $type = $other['data'][0]; if ($other['data'][2] != ""){ $values = array( 'description' => $other['data'][1], 'id_alert_action' => $other['data'][2], 'field1' => $other['data'][3], 'field2' => $other['data'][4], 'field3' => $other['data'][5], 'value' => $other['data'][6], 'matches_value' => $other['data'][7], 'max_value' => $other['data'][8], 'min_value' => $other['data'][9], 'time_threshold' => $other['data'][10], 'max_alerts' => $other['data'][11], 'min_alerts' => $other['data'][12], 'time_from' => $other['data'][13], 'time_to' => $other['data'][14], 'monday' => $other['data'][15], 'tuesday' => $other['data'][16], 'wednesday' => $other['data'][17], 'thursday' => $other['data'][18], 'friday' => $other['data'][19], 'saturday' => $other['data'][20], 'sunday' => $other['data'][21], 'recovery_notify' => $other['data'][22], 'field2_recovery' => $other['data'][23], 'field3_recovery' => $other['data'][24], 'priority' => $other['data'][25], 'id_group' => $other['data'][26] ); } else { $values = array( 'description' => $other['data'][1], 'field1' => $other['data'][3], 'field2' => $other['data'][4], 'field3' => $other['data'][5], 'value' => $other['data'][6], 'matches_value' => $other['data'][7], 'max_value' => $other['data'][8], 'min_value' => $other['data'][9], 'time_threshold' => $other['data'][10], 'max_alerts' => $other['data'][11], 'min_alerts' => $other['data'][12], 'time_from' => $other['data'][13], 'time_to' => $other['data'][14], 'monday' => $other['data'][15], 'tuesday' => $other['data'][16], 'wednesday' => $other['data'][17], 'thursday' => $other['data'][18], 'friday' => $other['data'][19], 'saturday' => $other['data'][20], 'sunday' => $other['data'][21], 'recovery_notify' => $other['data'][22], 'field2_recovery' => $other['data'][23], 'field3_recovery' => $other['data'][24], 'priority' => $other['data'][25], 'id_group' => $other['data'][26] ); } $id_template = alerts_create_alert_template($template_name, $type, $values); if (is_error($id_template)) { // TODO: Improve the error returning more info returnError('error_create_alert_template', __('Error creating alert template.')); } else { returnData('string', array('type' => 'string', 'data' => $id_template)); } } /** * Update an alert template. And return a message with the result of the operation. * * @param string $id_template Id of the template to update. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;;; * ;;;;;;;; * ;;;;;;; * ;;;;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * * example: * * api.php?op=set&op2=update_alert_template&id=38&other=example_template_with_changed_name|onchange|changing%20from%20min_max%20to%20onchange||||||1||||5|1|||1|1|0|1|1|0|0|1|field%20recovery%20example%201|field%20recovery%20example%202|1|8&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_update_alert_template($id_template, $thrash1, $other, $thrash3) { if ($id_template == "") { returnError('error_update_alert_template', __('Error updating alert template. Id_template cannot be left blank.')); return; } $result_template = alerts_get_alert_template_name($id_template); if (!$result_template){ returnError('error_update_alert_template', __('Error updating alert template. Id_template doesn\'t exists.')); return; } $fields_template = array('name', 'type', 'description', 'id_alert_action', 'field1', 'field2', 'field3', 'value', 'matches_value', 'max_value', 'min_value', 'time_threshold', 'max_alerts', 'min_alerts', 'time_from', 'time_to', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'recovery_notify', 'field2_recovery', 'field3_recovery', 'priority', 'id_group'); $cont = 0; foreach ($fields_template as $field){ if ($other['data'][$cont] != ""){ $values[$field] = $other['data'][$cont]; } $cont++; } $id_template = alerts_update_alert_template($id_template, $values); if (is_error($id_template)) { // TODO: Improve the error returning more info returnError('error_create_alert_template', __('Error updating alert template.')); } else { returnData('string', array('type' => 'string', 'data' => __('Correct updating of alert template'))); } } /** * Delete an alert template. And return a message with the result of the operation. * * @param string $id_template Id of the template to delete. * @param $thrash1 Don't use. * @param array $other Don't use * * example: * * api.php?op=set&op2=delete_alert_template&id=38 * * @param $thrash3 Don't use */ function api_set_delete_alert_template($id_template, $thrash1, $other, $thrash3) { if ($id_template == "") { returnError('error_delete_alert_template', __('Error deleting alert template. Id_template cannot be left blank.')); return; } $result = alerts_delete_alert_template($id_template); if ($result == 0) { // TODO: Improve the error returning more info returnError('error_create_alert_template', __('Error deleting alert template.')); } else { returnData('string', array('type' => 'string', 'data' => __('Correct deleting of alert template.'))); } } /** * Get all alert tamplates, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, but only is available. * example: * * api.php?op=get&op2=all_alert_templates&return_type=csv&other=; * * @param $thrash3 Don't use. */ function api_get_all_alert_templates($thrash1, $thrash2, $other, $thrash3) { if (!isset($other['data'][0])) $separator = ';'; // by default else $separator = $other['data'][0]; $filter_templates = false; $template = alerts_get_alert_templates(); if ($template !== false) { $data['type'] = 'array'; $data['data'] = $template; } if (!$template) { returnError('error_get_all_alert_templates', __('Error getting all alert templates.')); } else { returnData('csv', $data, $separator); } } /** * Get an alert tamplate, and print the result like a csv. * * @param string $id_template Id of the template to get. * @param $thrash1 Don't use. * @param array $other Don't use * * example: * * api.php?op=get&op2=alert_template&id=25 * * @param $thrash3 Don't use */ function api_get_alert_template($id_template, $thrash1, $other, $thrash3) { $filter_templates = false; if ($id_template != "") { $result_template = alerts_get_alert_template_name($id_template); if (!$result_template){ returnError('error_get_alert_template', __('Error getting alert template. Id_template doesn\'t exists.')); return; } $filter_templates = array('id' => $id_template); } $template = alerts_get_alert_templates($filter_templates, array('id', 'name', 'description', 'id_alert_action', 'type', 'id_group')); if ($template !== false) { $data['type'] = 'array'; $data['data'] = $template; } if (!$template) { returnError('error_get_alert_template', __('Error getting alert template.')); } else { returnData('csv', $data, ';'); } } /** * Get module groups, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, but only is available. * example: * * api.php?op=get&op2=module_groups&return_type=csv&other=; * * @param $thrash3 Don't use. */ function api_get_module_groups($thrash1, $thrash2, $other, $thrash3) { if (!isset($other['data'][0])) $separator = ';'; // by default else $separator = $other['data'][0]; $filter = false; $module_groups = @db_get_all_rows_filter ('tmodule_group', $filter); if ($module_groups !== false) { $data['type'] = 'array'; $data['data'] = $module_groups; } if (!$module_groups) { returnError('error_get_module_groups', __('Error getting module groups.')); } else { returnData('csv', $data, $separator); } } /** * Get plugins, and print all the result like a csv. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, but only is available. * example: * * api.php?op=get&op2=plugins&return_type=csv&other=; * * @param $thrash3 Don't use. */ function api_get_plugins($thrash1, $thrash2, $other, $thrash3) { if (!isset($other['data'][0])) $separator = ';'; // by default else $separator = $other['data'][0]; $filter = false; $plugins = @db_get_all_rows_filter ('tplugin', $filter); if ($plugins !== false) { $data['type'] = 'array'; $data['data'] = $plugins; } if (!$plugins) { returnError('error_get_plugins', __('Error getting plugins.')); } else { returnData('csv', $data, $separator); } } /** * Create a network module from a network component. And return the id of new module. * * @param string $agent_name The name of the agent where the module will be created * @param string $component_name The name of the network component * @param $thrash1 Don't use * @param $thrash2 Don't use */ function api_set_create_network_module_from_component($agent_name, $component_name, $thrash1, $thrash2) { $agent_id = agents_get_agent_id($agent_name); if (!$agent_id) { returnError('error_network_module_from_component', __('Error creating module from network component. Agent doesn\'t exists.')); return; } $component= db_get_row ('tnetwork_component', 'name', $component_name); if (!$component) { returnError('error_network_module_from_component', __('Error creating module from network component. Network component doesn\'t exists.')); return; } // Adapt fields to module structure unset($component['id_nc']); unset($component['id_group']); $component['id_tipo_modulo'] = $component['type']; unset($component['type']); $component['descripcion'] = $component['description']; unset($component['description']); unset($component['name']); $component['ip_target'] = agents_get_address($agent_id); // Create module $module_id = modules_create_agent_module ($agent_id, $component_name, $component, true); if (!$module_id) { returnError('error_network_module_from_component', __('Error creating module from network component. Error creating module.')); return; } return $module_id; } /** * Assign a module to an alert template. And return the id of new relationship. * * @param string $id_template Name of alert template to add. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=create_module_template&id=1&other=1|10&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_create_module_template($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_module_to_template', __('Error assigning module to template. Id_template cannot be left blank.')); return; } if ($other['data'][0] == ""){ returnError('error_module_to_template', __('Error assigning module to template. Id_module cannot be left blank.')); return; } if ($other['data'][1] == ""){ returnError('error_module_to_template', __('Error assigning module to template. Id_agent cannot be left blank.')); return; } $result_template = alerts_get_alert_template($id); if (!$result_template){ returnError('error_module_to_template', __('Error assigning module to template. Id_template doensn\'t exists.')); return; } $id_module = $other['data'][0]; $id_agent = $other['data'][1]; $result_agent = agents_get_name($id_agent); if (!$result_agent){ returnError('error_module_to_template', __('Error assigning module to template. Id_agent doesn\'t exists.')); return; } $result_module = db_get_value ('nombre', 'tagente_modulo', 'id_agente_modulo', (int) $id_module); if (!$result_module){ returnError('error_module_to_template', __('Error assigning module to template. Id_module doesn\'t exists.')); return; } $id_template_module = alerts_create_alert_agent_module($id_module, $id); if (is_error($id_template_module)) { // TODO: Improve the error returning more info returnError('error_module_to_template', __('Error assigning module to template.')); } else { returnData('string', array('type' => 'string', 'data' => $id_template_module)); } } /** * Delete an module assigned to a template. And return a message with the result of the operation. * * @param string $id Id of the relationship between module and template (talert_template_modules) to delete. * @param $thrash1 Don't use. * @param array $other Don't use * * example: * * api.php?op=set&op2=delete_module_template&id=38 * * @param $thrash3 Don't use */ function api_set_delete_module_template($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_delete_module_template', __('Error deleting module template. Id_module_template cannot be left blank.')); return; } $result_module_template = alerts_get_alert_agent_module($id); if (!$result_module_template){ returnError('error_delete_module_template', __('Error deleting module template. Id_module_template doesn\'t exists.')); return; } $result = alerts_delete_alert_agent_module($id); if ($result == 0) { // TODO: Improve the error returning more info returnError('error_delete_module_template', __('Error deleting module template.')); } else { returnData('string', array('type' => 'string', 'data' => __('Correct deleting of module template.'))); } } /** * Validate all alerts. And return a message with the result of the operation. * * @param string Don't use. * @param $thrash1 Don't use. * @param array $other Don't use * * example: * * api.php?op=set&op2=validate_all_alerts * * @param $thrash3 Don't use */ function api_set_validate_all_alerts($id, $thrash1, $other, $thrash3) { // Return all groups $allGroups = db_get_all_rows_filter('tgrupo', array(), 'id_grupo'); $groups = array(); foreach ($allGroups as $row) { $groups[] = $row['id_grupo']; } // Added group All $groups[] = 0; $id_groups = implode(',', $groups); $sql = sprintf ("SELECT id_agente FROM tagente WHERE id_grupo IN (%s) AND disabled = 0", $id_groups); $id_agents = array(); $result_agents = array(); $id_agents = db_get_all_rows_sql($sql); foreach ($id_agents as $id_agent){ $result_agents[] = $id_agent['id_agente']; } $agents_string = implode(',', $result_agents); $sql = sprintf ("SELECT talert_template_modules.id FROM talert_template_modules INNER JOIN tagente_modulo t2 ON talert_template_modules.id_agent_module = t2.id_agente_modulo INNER JOIN tagente t3 ON t2.id_agente = t3.id_agente INNER JOIN talert_templates t4 ON talert_template_modules.id_alert_template = t4.id WHERE id_agent_module in (%s)", $agents_string); $alerts = db_get_all_rows_sql($sql); $total_alerts = count($alerts); $count_results = 0; foreach ($alerts as $alert) { $result = alerts_validate_alert_agent_module($alert['id'], true); if ($result) { $count_results++; } } if ($total_alerts > $count_results){ $errors = $total_alerts - $count_results; returnError('error_validate_all_alerts', __('Error validate all alerts. Failed ' . $errors . '.')); } else{ returnData('string', array('type' => 'string', 'data' => __('Correct validating of all alerts.'))); } } /** * Validate all policy alerts. And return a message with the result of the operation. * * @param string Don't use. * @param $thrash1 Don't use. * @param array $other Don't use * * example: * * api.php?op=set&op2=validate_all_policy_alerts * * @param $thrash3 Don't use */ function api_set_validate_all_policy_alerts($id, $thrash1, $other, $thrash3) { # Get all policies $policies = enterprise_hook('policies_get_policies', array(false, false, false, true)); if ($duplicated === ENTERPRISE_NOT_HOOK) { returnError('error_validate_all_policy_alerts', __('Error validating all alert policies.')); return; } // Count of valid results $total_alerts = 0; $count_results = 0; // Check all policies foreach ($policies as $policy){ $policy_alerts = array(); $policy_alerts = enterprise_hook('policies_get_alerts', array($policy['id'], false, false)); // Number of alerts in this policy if ($policy_alerts != false){ $partial_alerts = count($policy_alerts); // Added alerts of this policy to the total $total_alerts = $total_alerts + $partial_alerts; } $result_pol_alerts = array(); foreach ($policy_alerts as $policy_alert){ $result_pol_alerts[] = $policy_alert['id']; } $id_pol_alerts = implode(',', $result_pol_alerts); // If the policy has alerts if (count($result_pol_alerts) != 0){ $sql = sprintf ("SELECT id FROM talert_template_modules WHERE id_policy_alerts IN (%s)", $id_pol_alerts); $id_alerts = db_get_all_rows_sql($sql); $result_alerts = array(); foreach ($id_alerts as $id_alert){ $result_alerts[] = $id_alert['id']; } // Validate alerts of these modules foreach ($result_alerts as $result_alert) { $result = alerts_validate_alert_agent_module($result_alert, true); if ($result) { $count_results++; } } } } // Check results if ($total_alerts > $count_results){ $errors = $total_alerts - $count_results; returnError('error_validate_all_alerts', __('Error validate all policy alerts. Failed ' . $errors . '.')); } else { returnData('string', array('type' => 'string', 'data' => __('Correct validating of all policy alerts.'))); } } /** * Stop a schedule downtime. And return a message with the result of the operation. * * @param string $id Id of the downtime to stop. * @param $thrash1 Don't use. * @param array $other Don't use * * example: * * api.php?op=set&op2=stop_downtime&id=38 * * @param $thrash3 Don't use */ function api_set_stop_downtime($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_stop_downtime', __('Error stopping downtime. Id_downtime cannot be left blank.')); return; } $date_stop = date ("Y-m-j",get_system_time ()); $time_stop = date ("h:iA",get_system_time ()); $date_time_stop = strtotime ($date_stop.' '.$time_stop); $values = array(); $values['date_to'] = $date_time_stop; $result_update = db_process_sql_update('tplanned_downtime', $values, array ('id' => $id)); if ($result_update < 0) returnError('error_stop_downtime', 'Error stopping downtime.'); else returnData('string', array('type' => 'string', 'data' => __('Downtime stopped.'))); } /** * Add agent to a policy. And return a message with the result of the operation. * * @param string $id Id of the target policy. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example: * * api.php?op=set&op2=add_agent_policy&id=1&other=167&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_add_agent_policy($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_add_agent_policy', __('Error adding agent to policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == "") { returnError('error_add_agent_policy', __('Error adding agent to policy. Id_agent cannot be left blank.')); return; } // Check if the agent exists $result_agent = db_get_value ('id_agente', 'tagente', 'id_agente', (int) $other['data'][0]); if (!$result_agent) { returnError('error_add_agent_policy', __('Error adding agent to policy. Id_agent doesn\'t exists.')); return; } // Check if the agent is already in the policy $id_agent_policy = enterprise_hook('policies_get_agents', array($id, array('id_agent' => $other['data'][0]), 'id')); if ($id_agent_policy === ENTERPRISE_NOT_HOOK) { returnError('error_add_agent_policy', __('Error adding agent to policy.')); return; } if ($id_agent_policy === false) { $success = enterprise_hook('policies_create_agent', array($other['data'][0], $id, true)); } else { returnError('error_add_agent_policy', __('Error adding agent to policy. The agent is already in the policy.')); return; } if ($success) returnData('string', array('type' => 'string', 'data' => $success)); else returnError('error_add_agent_policy', 'Error adding agent to policy.'); } /** * Add data module to policy. And return id from new module. * * @param string $id Id of the target policy. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example: * * api.php?op=set&op2=add_data_module_policy&id=1&other=data_module_policy_example_name~2~data%20module%20created%20by%20Api~2~0~0~50.00~10~20~180~~21~35~~1~module_begin%0dmodule_name%20pandora_process%0dmodule_type%20generic_data%0dmodule_exec%20ps%20aux%20|%20grep%20pandora%20|%20wc%20-l%0dmodule_end&other_mode=url_encode_separator_~ * * @param $thrash3 Don't use */ function api_set_add_data_module_policy($id, $thrash1, $other, $thrash3) { if ($id == ""){ returnError('error_add_data_module_policy', __('Error adding data module to policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == ""){ returnError('error_add_data_module_policy', __('Error adding data module to policy. Module_name cannot be left blank.')); return; } // Check if the module is already in the policy $name_module_policy = enterprise_hook('policies_get_modules', array($id, array('name'=>$other['data'][0]), 'name')); if ($name_module_policy === ENTERPRISE_NOT_HOOK) { returnError('error_add_data_module_policy', __('Error adding data module to policy.')); return; } $values = array(); $values['id_tipo_modulo'] = $other['data'][1]; $values['description'] = $other['data'][2]; $values['id_module_group'] = $other['data'][3]; $values['min'] = $other['data'][4]; $values['max'] = $other['data'][5]; $values['post_process'] = $other['data'][6]; $values['module_interval'] = $other['data'][7]; $values['min_warning'] = $other['data'][8]; $values['max_warning'] = $other['data'][9]; $values['str_warning'] = $other['data'][10]; $values['min_critical'] = $other['data'][11]; $values['max_critical'] = $other['data'][12]; $values['str_critical'] = $other['data'][13]; $values['history_data'] = $other['data'][14]; $values['configuration_data'] = $other['data'][15]; if ($name_module_policy !== false){ if ($name_module_policy[0]['name'] == $other['data'][0]){ returnError('error_add_data_module_policy', __('Error adding data module to policy. The module is already in the policy.')); return; } } $success = enterprise_hook('policies_create_module', array($other['data'][0], $id, 1, $values, false)); if ($success) //returnData('string', array('type' => 'string', 'data' => __('Data module added to policy. Is necessary to apply the policy in order to changes take effect.'))); returnData('string', array('type' => 'string', 'data' => $success)); else returnError('error_add_data_module_policy', 'Error adding data module to policy.'); } /** * Update data module in policy. And return id from new module. * * @param string $id Id of the target policy module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;;;; * ;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example: * * api.php?op=set&op2=update_data_module_policy&id=1&other=10~data%20module%20updated%20by%20Api~2~0~0~50.00~10~20~180~~21~35~~1~module_begin%0dmodule_name%20pandora_process%0dmodule_type%20generic_data%0dmodule_exec%20ps%20aux%20|%20grep%20pandora%20|%20wc%20-l%0dmodule_end&other_mode=url_encode_separator_~ * * @param $thrash3 Don't use */ function api_set_update_data_module_policy($id, $thrash1, $other, $thrash3) { if ($id == ""){ returnError('error_update_data_module_policy', __('Error updating data module in policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == ""){ returnError('error_update_data_module_policy', __('Error updating data module in policy. Id_policy_module cannot be left blank.')); return; } // Check if the module exists $module_policy = enterprise_hook('policies_get_modules', array($id, array('id' => $other['data'][0]), 'id_module')); if ($module_policy === false) { returnError('error_update_data_module_policy', __('Error updating data module in policy. Module doesn\'t exists.')); return; } if ($module_policy[0]['id_module'] != 1){ returnError('error_update_network_module_policy', __('Error updating network module in policy. Module type is not network type.')); return; } $fields_data_module = array('id','description', 'id_module_group', 'min', 'max', 'post_process', 'module_interval', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'history_data', 'configuration_data'); $cont = 0; foreach ($fields_data_module as $field){ if ($other['data'][$cont] != "" and $field != 'id'){ $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = enterprise_hook('policies_update_module', array($other['data'][0], $values, false)); if ($result_update < 0) returnError('error_update_data_module_policy', 'Error updating policy module.'); else returnData('string', array('type' => 'string', 'data' => __('Data policy module updated.'))); } /** * Add network module to policy. And return a result message. * * @param string $id Id of the target policy. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;;; * ;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example: * * api.php?op=set&op2=add_network_module_policy&id=1&other=network_module_policy_example_name|6|network%20module%20created%20by%20Api|2|0|0|50.00|180|10|20||21|35||1|15|0|66|||0&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_add_network_module_policy($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_network_data_module_policy', __('Error adding network module to policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == "") { returnError('error_network_data_module_policy', __('Error adding network module to policy. Module_name cannot be left blank.')); return; } if ($other['data'][1] < 6 or $other['data'][1] > 18) { returnError('error_network_data_module_policy', __('Error adding network module to policy. Id_module_type is not correct for network modules.')); return; } // Check if the module is already in the policy $name_module_policy = enterprise_hook('policies_get_modules', array($id, array('name'=>$other['data'][0]), 'name')); if ($name_module_policy === ENTERPRISE_NOT_HOOK) { returnError('error_network_data_module_policy', __('Error adding network module to policy.')); return; } $values = array(); $values['id_tipo_modulo'] = $other['data'][1]; $values['description'] = $other['data'][2]; $values['id_module_group'] = $other['data'][3]; $values['min'] = $other['data'][4]; $values['max'] = $other['data'][5]; $values['post_process'] = $other['data'][6]; $values['module_interval'] = $other['data'][7]; $values['min_warning'] = $other['data'][8]; $values['max_warning'] = $other['data'][9]; $values['str_warning'] = $other['data'][10]; $values['min_critical'] = $other['data'][11]; $values['max_critical'] = $other['data'][12]; $values['str_critical'] = $other['data'][13]; $values['history_data'] = $other['data'][14]; $values['min_ff_event'] = $other['data'][15]; $values['disabled'] = $other['data'][16]; $values['tcp_port'] = $other['data'][17]; $values['snmp_community'] = $other['data'][18]; $values['snmp_oid'] = $other['data'][19]; $values['custom_id'] = $other['data'][20]; if ($name_module_policy !== false) { if ($name_module_policy[0]['name'] == $other['data'][0]){ returnError('error_network_data_module_policy', __('Error adding network module to policy. The module is already in the policy.')); return; } } $success = enterprise_hook('policies_create_module', array($other['data'][0], $id, 2, $values, false)); if ($success) returnData('string', array('type' => 'string', 'data' => $success)); else returnError('error_add_network_module_policy', 'Error adding network module to policy.'); } /** * Update network module in policy. And return a result message. * * @param string $id Id of the target policy module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;;;; * ;;;;;;; * ;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example: * * api.php?op=set&op2=update_network_module_policy&id=1&other=14|network%20module%20updated%20by%20Api|2|0|0|150.00|300|10|20||21|35||1|15|0|66|||0&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_update_network_module_policy($id, $thrash1, $other, $thrash3) { if ($id == ""){ returnError('error_update_network_module_policy', __('Error updating network module in policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == ""){ returnError('error_update_network_module_policy', __('Error updating network module in policy. Id_policy_module cannot be left blank.')); return; } // Check if the module exists $module_policy = enterprise_hook('policies_get_modules', array($id, array('id' => $other['data'][0]), 'id_module')); if ($module_policy === false) { returnError('error_update_network_module_policy', __('Error updating network module in policy. Module doesn\'t exists.')); return; } if ($module_policy[0]['id_module'] != 2){ returnError('error_update_network_module_policy', __('Error updating network module in policy. Module type is not network type.')); return; } $fields_network_module = array('id','description', 'id_module_group', 'min', 'max', 'post_process', 'module_interval', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'history_data', 'min_ff_event', 'disabled', 'tcp_port', 'snmp_community', 'snmp_oid', 'custom_id'); $cont = 0; foreach ($fields_network_module as $field){ if ($other['data'][$cont] != "" and $field != 'id'){ $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = enterprise_hook('policies_update_module', array($other['data'][0], $values, false)); if ($result_update < 0) returnError('error_update_network_module_policy', 'Error updating policy module.'); else returnData('string', array('type' => 'string', 'data' => __('Network policy module updated.'))); } /** * Add plugin module to policy. And return id from new module. * * @param string $id Id of the target policy. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;; * ;;;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=add_plugin_module_policy&id=1&other=example%20plugin%20module%20name|0|1|2|0|0||0|0||15|0|66|||300|50.00|0|0|0|plugin%20module%20from%20api|2|admin|pass|-p%20max&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_add_plugin_module_policy($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_add_plugin_module_policy', __('Error adding plugin module to policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == "") { returnError('error_add_plugin_module_policy', __('Error adding plugin module to policy. Module_name cannot be left blank.')); return; } if ($other['data'][22] == "") { returnError('error_add_plugin_module_policy', __('Error adding plugin module to policy. Id_plugin cannot be left blank.')); return; } // Check if the module is already in the policy $name_module_policy = enterprise_hook('policies_get_modules', array($id, array('name'=>$other['data'][0]), 'name')); if ($name_module_policy === ENTERPRISE_NOT_HOOK) { returnError('error_add_plugin_module_policy', __('Error adding plugin module to policy.')); return; } $values = array(); $values['disabled'] = $other['data'][1]; $values['id_tipo_modulo'] = $other['data'][2]; $values['id_module_group'] = $other['data'][3]; $values['min_warning'] = $other['data'][4]; $values['max_warning'] = $other['data'][5]; $values['str_warning'] = $other['data'][6]; $values['min_critical'] = $other['data'][7]; $values['max_critical'] = $other['data'][8]; $values['str_critical'] = $other['data'][9]; $values['min_ff_event'] = $other['data'][10]; $values['history_data'] = $other['data'][11]; $values['tcp_port'] = $other['data'][12]; $values['snmp_community'] = $other['data'][13]; $values['snmp_oid'] = $other['data'][14]; $values['module_interval'] = $other['data'][15]; $values['post_process'] = $other['data'][16]; $values['min'] = $other['data'][17]; $values['max'] = $other['data'][18]; $values['custom_id'] = $other['data'][19]; $values['description'] = $other['data'][20]; $values['id_plugin'] = $other['data'][21]; $values['plugin_user'] = $other['data'][22]; $values['plugin_pass'] = $other['data'][23]; $values['plugin_parameter'] = $other['data'][24]; if ($name_module_policy !== false) { if ($name_module_policy[0]['name'] == $other['data'][0]) { returnError('error_add_plugin_module_policy', __('Error adding plugin module to policy. The module is already in the policy.')); return; } } $success = enterprise_hook('policies_create_module', array($other['data'][0], $id, 4, $values, false)); if ($success) returnData('string', array('type' => 'string', 'data' => $success)); else returnError('error_add_plugin_module_policy', 'Error adding plugin module to policy.'); } /** * Update plugin module in policy. And return a result message. * * @param string $id Id of the target policy module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;;;; * ;;;;;; * ;;;;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example: * * api.php?op=set&op2=update_plugin_module_policy&id=1&other=23|0|1|0|0||0|0||15|0|166|||180|150.00|0|0|0|plugin%20module%20updated%20from%20api|2|example_user|pass|-p%20min&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_update_plugin_module_policy($id, $thrash1, $other, $thrash3) { if ($id == ""){ returnError('error_update_plugin_module_policy', __('Error updating plugin module in policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == ""){ returnError('error_update_plugin_module_policy', __('Error updating plugin module in policy. Id_policy_module cannot be left blank.')); return; } // Check if the module exists $module_policy = enterprise_hook('policies_get_modules', array($id, array('id' => $other['data'][0]), 'id_module')); if ($module_policy === false) { returnError('error_updating_plugin_module_policy', __('Error updating plugin module in policy. Module doesn\'t exists.')); return; } if ($module_policy[0]['id_module'] != 4){ returnError('error_updating_plugin_module_policy', __('Error updating plugin module in policy. Module type is not network type.')); return; } $fields_plugin_module = array('id','disabled', 'id_module_group', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'min_ff_event', 'history_data', 'tcp_port', 'snmp_community', 'snmp_oid', 'module_interval', 'post_process', 'min', 'max', 'custom_id', 'description', 'id_plugin', 'plugin_user', 'plugin_pass', 'plugin_parameter'); $cont = 0; foreach ($fields_plugin_module as $field){ if ($other['data'][$cont] != "" and $field != 'id'){ $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = enterprise_hook('policies_update_module', array($other['data'][0], $values, false)); if ($result_update < 0) returnError('error_update_plugin_module_policy', 'Error updating policy module.'); else returnData('string', array('type' => 'string', 'data' => __('Plugin policy module updated.'))); } /** * Add module data configuration into agent configuration file * * @param string $id_agent Id of the agent * @param string $module_name * @param array $configuration_data is an array. The data in it is the new configuration data of the module * @param $thrash3 Don't use * * Call example: * * api.php?op=set&op2=add_module_in_conf&user=admin&pass=pandora&id=9043&id2=example_name&other=bW9kdWxlX2JlZ2luCm1vZHVsZV9uYW1lIGV4YW1wbGVfbmFtZQptb2R1bGVfdHlwZSBnZW5lcmljX2RhdGEKbW9kdWxlX2V4ZWMgZWNobyAxOwptb2R1bGVfZW5k * * @return string 0 when success, -1 when error, -2 if already exist */ function api_set_add_module_in_conf($id_agent, $module_name, $configuration_data, $thrash3) { $new_configuration_data = base64_decode($configuration_data['data']); // Check if exist a current module with the same name in the conf file $old_configuration_data = config_agents_get_module_from_conf($id_agent, io_safe_output($module_name)); // If exists a module with same name, abort if(!empty($old_configuration_data)) { returnError('error_adding_module_conf', '-2'); exit; } $result = enterprise_hook('config_agents_add_module_in_conf', array($id_agent, $new_configuration_data)); if($result && $result !== ENTERPRISE_NOT_HOOK) { returnData('string', array('type' => 'string', 'data' => '0')); } else { returnError('error_adding_module_conf', '-1'); } } /** * Get module data configuration from agent configuration file * * @param string $id_agent Id of the agent * @param string $module_name * @param $thrash2 Don't use * @param $thrash3 Don't use * * Call example: * * api.php?op=get&op2=module_from_conf&user=admin&pass=pandora&id=9043&id2=example_name * * @return string Module data when success, empty when error */ function api_get_module_from_conf($id_agent, $module_name, $thrash2, $thrash3) { $result = enterprise_hook('config_agents_get_module_from_conf', array($id_agent, io_safe_output($module_name))); if ($result !== ENTERPRISE_NOT_HOOK) { returnData('string', array('type' => 'string', 'data' => $result)); } else { returnError('error_adding_module_conf', ''); } } /** * Delete module data configuration from agent configuration file * * @param string $id_agent Id of the agent * @param string $module_name * @param $thrash2 Don't use * @param $thrash3 Don't use * * Call example: * * api.php?op=set&op2=delete_module_in_conf&user=admin&pass=pandora&id=9043&id2=example_name * * @return string 0 when success, -1 when error */ function api_set_delete_module_in_conf($id_agent, $module_name, $thrash2, $thrash3) { $result = config_agents_delete_module_in_conf($id_agent, $module_name); $result = enterprise_hook('config_agents_delete_module_in_conf', array($id_agent, $module_name)); if($result && $result !== ENTERPRISE_NOT_HOOK) { returnData('string', array('type' => 'string', 'data' => '0')); } else { returnError('error_deleting_module_conf', '-1'); } } /** * Update module data configuration from agent configuration file * * @param string $id_agent Id of the agent * @param string $module_name * @param array $configuration_data is an array. The data in it is the new configuration data of the module * @param $thrash3 Don't use * * Call example: * * api.php?op=set&op2=update_module_in_conf&user=admin&pass=pandora&id=9043&id2=example_name&other=bW9kdWxlX2JlZ2luCm1vZHVsZV9uYW1lIGV4YW1wbGVfbmFtZQptb2R1bGVfdHlwZSBnZW5lcmljX2RhdGEKbW9kdWxlX2V4ZWMgZWNobyAxOwptb2R1bGVfZW5k * * @return string 0 when success, 1 when no changes, -1 when error, -2 if doesnt exist */ function api_set_update_module_in_conf($id_agent, $module_name, $configuration_data_serialized, $thrash3) { $new_configuration_data = base64_decode($configuration_data_serialized['data']); // Get current configuration $old_configuration_data = config_agents_get_module_from_conf($id_agent, io_safe_output($module_name)); // If not exists if(empty($old_configuration_data)) { returnError('error_editing_module_conf', '-2'); exit; } // If current configuration and new configuration are equal, abort if($new_configuration_data == $old_configuration_data) { returnData('string', array('type' => 'string', 'data' => '1')); exit; } $result = enterprise_hook('config_agents_update_module_in_conf', array($id_agent, $old_configuration_data, $new_configuration_data)); if($result && $result !== ENTERPRISE_NOT_HOOK) { returnData('string', array('type' => 'string', 'data' => '0')); } else { returnError('error_editing_module_conf', '-1'); } } /** * Add SNMP module to policy. And return id from new module. * * @param string $id Id of the target policy. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;; * ;;;;;;;; * ;;;;;;; * ;;;;;;;; * ; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=add_snmp_module_policy&id=1&other=example%20SNMP%20module%20name|0|15|2|0|0||0|0||15|1|66|3|public|.1.3.6.1.2.1.1.1.0|180|50.00|10|60|0|SNMP%20module%20modified%20by%20API|AES|example_priv_passw|authNoPriv|MD5|pepito_user|example_auth_passw&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_add_snmp_module_policy($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_add_snmp_module_policy', __('Error adding SNMP module to policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == "") { returnError('error_add_snmp_module_policy', __('Error adding SNMP module to policy. Module_name cannot be left blank.')); return; } // Check if the module is already in the policy $name_module_policy = enterprise_hook('policies_get_modules', array($id, array('name'=>$other['data'][0]), 'name')); if ($name_module_policy === ENTERPRISE_NOT_HOOK) { returnError('error_add_snmp_module_policy', __('Error adding SNMP module to policy.')); return; } if ($other['data'][2] < 15 or $other['data'][2] > 18) { returnError('error_add_snmp_module_policy', __('Error adding SNMP module to policy. Id_module_type is not correct for SNMP modules.')); return; } # SNMP version 3 if ($other['data'][13] == "3") { if ($other['data'][22] != "AES" and $other['data'][22] != "DES") { returnError('error_add_snmp_module_policy', __('Error in creation SNMP module. snmp3_priv_method doesn\'t exists. Set it to \'AES\' or \'DES\'. ')); return; } if ($other['data'][24] != "authNoPriv" and $other['data'][24] != "authPriv" and $other['data'][24] != "noAuthNoPriv") { returnError('error_add_snmp_module_policy', __('Error in creation SNMP module. snmp3_sec_level doesn\'t exists. Set it to \'authNoPriv\' or \'authPriv\' or \'noAuthNoPriv\'. ')); return; } if ($other['data'][25] != "MD5" and $other['data'][25] != "SHA") { returnError('error_add_snmp_module_policy', __('Error in creation SNMP module. snmp3_auth_method doesn\'t exists. Set it to \'MD5\' or \'SHA\'. ')); return; } $values = array( 'disabled' => $other['data'][1], 'id_tipo_modulo' => $other['data'][2], 'id_module_group' => $other['data'][3], 'min_warning' => $other['data'][4], 'max_warning' => $other['data'][5], 'str_warning' => $other['data'][6], 'min_critical' => $other['data'][7], 'max_critical' => $other['data'][8], 'str_critical' => $other['data'][9], 'min_ff_event' => $other['data'][10], 'history_data' => $other['data'][11], 'tcp_port' => $other['data'][12], 'tcp_send' => $other['data'][13], 'snmp_community' => $other['data'][14], 'snmp_oid' => $other['data'][15], 'module_interval' => $other['data'][16], 'post_process' => $other['data'][17], 'min' => $other['data'][18], 'max' => $other['data'][19], 'custom_id' => $other['data'][20], 'description' => $other['data'][21], 'custom_string_1' => $other['data'][22], 'custom_string_2' => $other['data'][23], 'custom_string_3' => $other['data'][24], 'plugin_parameter' => $other['data'][25], 'plugin_user' => $other['data'][26], 'plugin_pass' => $other['data'][27] ); } else { $values = array( 'disabled' => $other['data'][1], 'id_tipo_modulo' => $other['data'][2], 'id_module_group' => $other['data'][3], 'min_warning' => $other['data'][4], 'max_warning' => $other['data'][5], 'str_warning' => $other['data'][6], 'min_critical' => $other['data'][7], 'max_critical' => $other['data'][8], 'str_critical' => $other['data'][9], 'min_ff_event' => $other['data'][10], 'history_data' => $other['data'][11], 'tcp_port' => $other['data'][12], 'tcp_send' => $other['data'][13], 'snmp_community' => $other['data'][14], 'snmp_oid' => $other['data'][15], 'module_interval' => $other['data'][16], 'post_process' => $other['data'][17], 'min' => $other['data'][18], 'max' => $other['data'][19], 'custom_id' => $other['data'][20], 'description' => $other['data'][21] ); } if ($name_module_policy !== false) { if ($name_module_policy[0]['name'] == $other['data'][0]) { returnError('error_add_snmp_module_policy', __('Error adding SNMP module to policy. The module is already in the policy.')); return; } } $success = enterprise_hook('policies_create_module', array($other['data'][0], $id, 2, $values, false)); if ($success) returnData('string', array('type' => 'string', 'data' => $success)); else returnError('error_add_snmp_module_policy', 'Error adding SNMP module to policy.'); } /** * Update SNMP module in policy. And return a result message. * * @param string $id Id of the target policy module. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; * ;;;;;;;; * ;;;;;;; * ;;;;;;;; * ; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example: * * api.php?op=set&op2=update_snmp_module_policy&id=1&other=14|0|2|0|0||0|0||30|1|66|3|nonpublic|.1.3.6.1.2.1.1.1.0|300|150.00|10|60|0|SNMP%20module%20updated%20by%20API|DES|example_priv_passw|authPriv|MD5|pepito_user|example_auth_passw&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_update_snmp_module_policy($id, $thrash1, $other, $thrash3) { if ($id == ""){ returnError('error_update_snmp_module_policy', __('Error updating SNMP module in policy. Id_policy cannot be left blank.')); return; } if ($other['data'][0] == ""){ returnError('error_update_snmp_module_policy', __('Error updating SNMP module in policy. Id_policy_module cannot be left blank.')); return; } // Check if the module exists $module_policy = enterprise_hook('policies_get_modules', array($id, array('id' => $other['data'][0]), 'id_module')); if ($module_policy === false) { returnError('error_update_snmp_module_policy', __('Error updating SNMP module in policy. Module doesn\'t exists.')); return; } if ($module_policy[0]['id_module'] != 2){ returnError('error_update_snmp_module_policy', __('Error updating SNMP module in policy. Module type is not SNMP type.')); return; } # SNMP version 3 if ($other['data'][12] == "3") { if ($other['data'][21] != "AES" and $other['data'][21] != "DES"){ returnError('error_update_snmp_module_policy', __('Error updating SNMP module. snmp3_priv_method doesn\'t exists. Set it to \'AES\' or \'DES\'. ')); return; } if ($other['data'][23] != "authNoPriv" and $other['data'][23] != "authPriv" and $other['data'][23] != "noAuthNoPriv"){ returnError('error_update_snmp_module_policy', __('Error updating SNMP module. snmp3_sec_level doesn\'t exists. Set it to \'authNoPriv\' or \'authPriv\' or \'noAuthNoPriv\'. ')); return; } if ($other['data'][24] != "MD5" and $other['data'][24] != "SHA"){ returnError('error_update_snmp_module_policy', __('Error updating SNMP module. snmp3_auth_method doesn\'t exists. Set it to \'MD5\' or \'SHA\'. ')); return; } $fields_snmp_module = array('id','disabled', 'id_module_group', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'min_ff_event', 'history_data', 'tcp_port', 'tcp_send', 'snmp_community', 'snmp_oid', 'module_interval', 'post_process', 'min', 'max', 'custom_id', 'description', 'custom_string_1', 'custom_string_2', 'custom_string_3', 'plugin_parameter', 'plugin_user', 'plugin_pass'); } else { $fields_snmp_module = array('id','disabled', 'id_module_group', 'min_warning', 'max_warning', 'str_warning', 'min_critical', 'max_critical', 'str_critical', 'min_ff_event', 'history_data', 'tcp_port', 'tcp_send', 'snmp_community', 'snmp_oid', 'module_interval', 'post_process', 'min', 'max', 'custom_id', 'description'); } $cont = 0; foreach ($fields_snmp_module as $field){ if ($other['data'][$cont] != "" and $field != 'id'){ $values[$field] = $other['data'][$cont]; } $cont++; } $result_update = enterprise_hook('policies_update_module', array($other['data'][0], $values, false)); if ($result_update < 0) returnError('error_update_snmp_module_policy', 'Error updating policy module.'); else returnData('string', array('type' => 'string', 'data' => __('SNMP policy module updated.'))); } /** * Apply policy. And return id from the applying operation. * * @param string $id Id of the target policy. * @param $thrash1 Don't use. * @param array $other Don't use * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=apply_policy&id=1 * * @param $thrash3 Don't use */ function api_set_apply_policy($id, $thrash1, $other, $thrash3) { if ($id == "") { returnError('error_apply_policy', __('Error applying policy. Id_policy cannot be left blank.')); return; } # Check if this operation is duplicated $duplicated = enterprise_hook('policies_get_policy_queue_status', array($id)); if ($duplicated === ENTERPRISE_NOT_HOOK) { // We want to return a value if ($other == "return") { return -1; } else { returnError('error_apply_policy', __('Error applying policy.')); return; } } if ($duplicated == STATUS_IN_QUEUE_APPLYING or $duplicated == STATUS_IN_QUEUE_IN){ // We want to return a value if ($other == "return") { return -1; } else { returnError('error_apply_policy', __('Error applying policy. This policy is already pending to apply.')); return; } } $id = enterprise_hook('add_policy_queue_operation', array($id, 0, 'apply')); if ($id === ENTERPRISE_NOT_HOOK) { // We want to return a value if ($other == "return") { return -1; } else { returnError('error_apply_policy', __('Error applying policy.')); return; } } // We want to return a value if ($other == "return") { if ($id) return $id; else return -1; } else { if ($id) returnData('string', array('type' => 'string', 'data' => $id)); else returnError('error_apply_policy', 'Error applying policy.'); } } /** * Apply all policy in database. And return the number of policies applied. * * @param string $id Don't use. * @param $thrash1 Don't use. * @param array $other Don't use * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=set&op2=apply_all_policies * * @param $thrash3 Don't use */ function api_set_apply_all_policies($thrash1, $thrash2, $other, $thrash3) { $policies = array(); # Get all policies $policies = enterprise_hook('policies_get_policies', array(false, false, false, true)); if ($policies === ENTERPRISE_NOT_HOOK) { returnError('error_apply_all_policy', __('Error applying all policies.')); return; } $num_policies = count($policies); $count_results = 0; foreach ($policies as $policy) { $return_value = enterprise_hook('add_policy_queue_operation', array($policy['id'], 0, 'apply')); if ($return_value != -1) { $count_results++; } } if ($num_policies > $count_results) { $errors = $num_policies - $count_results; returnError('error_apply_policy', 'Error applying policy. ' . $errors . ' failed. '); } else { returnData('string', array('type' => 'string', 'data' => $count_results)); } } /** * Create a new group. And return the id_group of the new group. * * @param string $id Name of the new group. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * example 1 (with parent group: Servers) * * api.php?op=set&op2=create_group&id=example_group_name&other=applications|1&other_mode=url_encode_separator_| * * example 2 (without parent group) * * api.php?op=set&op2=create_group&id=example_group_name2&other=computer|&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_create_group($id, $thrash1, $other, $thrash3) { $group_name = $id; if ($id == "") { returnError('error_create_group', __('Error in group creation. Group_name cannot be left blank.')); return; } if ($other['data'][0] == "") { returnError('error_create_group', __('Error in group creation. Icon_name cannot be left blank.')); return; } if ($other['data'][1] != "") { $group = groups_get_group_by_id($other['data'][1]); if ($group == false) { returnError('error_create_group', __('Error in group creation. Id_parent_group doesn\'t exists.')); return; } } if ($other['data'][1] != "") { $values = array( 'icon' => $other['data'][0], 'parent' => $other['data'][1], 'description' => $other['data'][2] ); } else { $values = array( 'icon' => $other['data'][0], 'description' => $other['data'][2] ); } $id_group = groups_create_group($group_name, $values); if (is_error($id_group)) { // TODO: Improve the error returning more info returnError('error_create_group', __('Error in group creation.')); } else { returnData('string', array('type' => 'string', 'data' => $id_group)); } } /** * Create a new netflow filter. And return the id_group of the new group. * * @param $thrash1 Don't use. * @param $thrash2 Don't use. * @param array $other it's array, $other as param is ;;;; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * * Possible values of 'aggregate_by' field: dstip,dstport,none,proto,srcip,srcport * Possible values of 'output_format' field: kilobytes,kilobytespersecond,megabytes,megabytespersecond * * example: * * api.php?op=set&op2=create_netflow_filter&id=Filter name&other=9|host 192.168.50.3 OR host 192.168.50.4 or HOST 192.168.50.6|dstport|kilobytes&other_mode=url_encode_separator_| * * @param $thrash3 Don't use */ function api_set_create_netflow_filter($thrash1, $thrash2, $other, $thrash3) { if ($other['data'][0] == "") { returnError('error_create_netflow_filter', __('Error in netflow filter creation. Filter name cannot be left blank.')); return; } if ($other['data'][1] == "") { returnError('error_create_netflow_filter', __('Error in netflow filter creation. Group id cannot be left blank.')); return; } else { $group = groups_get_group_by_id($other['data'][1]); if ($group == false) { returnError('error_create_group', __('Error in group creation. Id_parent_group doesn\'t exists.')); return; } } if ($other['data'][2] == "") { returnError('error_create_netflow_filter', __('Error in netflow filter creation. Filter cannot be left blank.')); return; } if ($other['data'][3] == "") { returnError('error_create_netflow_filter', __('Error in netflow filter creation. Aggregate_by cannot be left blank.')); return; } if ($other['data'][4] == "") { returnError('error_create_netflow_filter', __('Error in netflow filter creation. Output_format cannot be left blank.')); return; } $values = array ( 'id_name'=> $other['data'][0], 'id_group' => $other['data'][1], 'advanced_filter'=> $other['data'][2], 'aggregate'=> $other['data'][3], 'output'=> $other['data'][4] ); // Save filter args $values['filter_args'] = netflow_get_filter_arguments ($values); $id = db_process_sql_insert('tnetflow_filter', $values); if ($id === false) { returnError('error_create_netflow_filter', __('Error in netflow filter creation.')); } else { returnData('string', array('type' => 'string', 'data' => $id)); } } /** * Get module data in CSV format. * * @param integer $id The ID of module in DB. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ; in this order * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) * example: * * api.php?op=get&op2=module_data&id=17&other=;|604800&other_mode=url_encode_separator_| * * @param $returnType Don't use. */ function api_get_module_data($id, $thrash1, $other, $returnType) { $separator = $other['data'][0]; $periodSeconds = $other['data'][1]; $sql = sprintf ("SELECT utimestamp, datos FROM tagente_datos WHERE id_agente_modulo = %d AND utimestamp > %d ORDER BY utimestamp DESC", $id, get_system_time () - $periodSeconds); $data['type'] = 'array'; $data['list_index'] = array('utimestamp', 'datos'); $data['data'] = db_get_all_rows_sql($sql); if ($data === false) returnError('error_query_module_data', 'Error in the query of module data.'); else returnData('csv', $data, $separator); } /** * Return a image file of sparse graph of module data in a period time. * * @param integer $id id of a module data. * @param $thrash1 Don't use. * @param array $other it's array, $other as param is ;;;