diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index edac545400..366b97c0d8 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,15 @@ +2013-07-08 Sergio Martin + + * include/javascript/pandora_modules.js + include/functions_wmi.php + extensions/snmp_explorer.php + godmode/agentes/agent_wizard.wmi_explorer.php + godmode/agentes/agent_wizard.snmp_interfaces_explorer.php + godmode/agentes/agent_wizard.php + godmode/agentes/configurar_agente.php: Replace the SNMP explorer by + the Agent wizard with two initial sections. SNMP interfaces explorer + and WMI explorer + 2013-07-08 Miguel de Dios * mobile/operation/modules.php, mobile/include/style/main.css: diff --git a/pandora_console/extensions/snmp_explorer.php b/pandora_console/extensions/snmp_explorer.php deleted file mode 100755 index 4cab7d06dd..0000000000 --- a/pandora_console/extensions/snmp_explorer.php +++ /dev/null @@ -1,485 +0,0 @@ - $snmp) { - - $data = explode(': ',$snmp); - $keydata = explode('::',$key); - $keydata2 = explode('.',$keydata[1]); - - // Avoid results without index and interfaces without name - if (!isset($keydata2[1]) || !isset($data[1])) { - continue; - } - - if (array_key_exists(1,$data)) { - $interfaces[$keydata2[1]][$keydata2[0]]['type'] = $data[0]; - $interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[1]; - } - else { - $interfaces[$keydata2[1]][$keydata2[0]]['type'] = ''; - $interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[0]; - } - - $interfaces[$keydata2[1]][$keydata2[0]]['oid'] = $key; - $interfaces[$keydata2[1]][$keydata2[0]]['checked'] = 0; - } - - unset($interfaces[0]); - } - - if ($create_modules) { - $id_snmp_serialize = get_parameter_post('id_snmp_serialize'); - $interfaces = unserialize_in_temp($id_snmp_serialize); - - if (!$interfaces) { - $interfaces = array(); - } - - $values = array(); - - if ($tcp_port != '') { - $values['tcp_port'] = $tcp_port; - } - $values['snmp_community'] = $snmp_community; - $values['ip_target'] = $ip_target; - $values['tcp_send'] = $snmp_version; - - if ($snmp_version == '3') { - $values['plugin_user'] = $snmp3_auth_user; - $values['plugin_pass'] = $snmp3_auth_pass; - $values['plugin_parameter'] = $snmp3_auth_method; - $values['custom_string_1'] = $snmp3_privacy_method; - $values['custom_string_2'] = $snmp3_privacy_pass; - $values['custom_string_3'] = $snmp3_security_level; - } - - $oids = array(); - foreach ($interfaces as $key => $interface) { - foreach ($interface as $key2 => $module) { - $oid = get_parameter($key."-".$key2, ''); - if ($oid != '') { - $interfaces[$key][$key2]['checked'] = 1; - $oids[$key][] = $interfaces[$key][$key2]['oid']; - } - else { - $interfaces[$key][$key2]['checked'] = 0; - } - } - } - $modules = get_parameter('module', array()); - $id_snmp = get_parameter('id_snmp'); - - if ($id_snmp == false) { - ui_print_error_message (__('No modules selected')); - $id_snmp = array(); - } - - if (agents_get_name($id_agent) == false) { - ui_print_error_message (__('No agent selected or the agent does not exist')); - $id_snmp = array(); - } - - $result = false; - - $errors = array(); - $done = 0; - - foreach ($id_snmp as $id) { - if (isset($interfaces[$id]['ifName']) && $interfaces[$id]['ifName']['value'] != "") { - $ifname = $interfaces[$id]['ifName']['value']; - } - else if (isset($interfaces[$id]['ifDescr']) && $interfaces[$id]['ifDescr']['value'] != "") { - $ifname = $interfaces[$id]['ifDescr']['value']; - } - foreach ($modules as $module) { - $oid_array = explode('.',$module); - $oid_array[count($oid_array)-1] = $id; - $oid = implode('.',$oid_array); - - // Get the name - $name_array = explode('::',$oid_array[0]); - $name = $name_array[1] . "_" . $ifname; - - // Clean the name - $name = str_replace ( "\"" , "" , $name); - - // Proc moduletypes - if (preg_match ( "/Status/", $name_array[1])) - $module_type = 18; - - elseif (preg_match ( "/Present/", $name_array[1])) - $module_type = 18; - - elseif (preg_match ( "/PromiscuousMode/", $name_array[1])) - $module_type = 18; - - // String moduletypes - elseif (preg_match ( "/Alias/", $name_array[1])) - $module_type = 17; - - elseif (preg_match ( "/Address/", $name_array[1])) - $module_type = 17; - - elseif (preg_match ( "/Name/", $name_array[1])) - $module_type = 17; - - elseif (preg_match ( "/Specific/", $name_array[1])) - $module_type = 17; - - elseif (preg_match ( "/Descr/", $name_array[1])) - $module_type = 17; - - // Specific counters (ends in s) - elseif (preg_match ( "/s$/", $name_array[1])) - $module_type = 16; - - // Otherwise, numeric - else - $module_type = 15; - - $values['id_tipo_modulo'] = $module_type; - $values['descripcion'] = io_safe_input("(" . $ip_target." - ".$name . ") " . $interfaces[$id]['ifDescr']['value']); - - $values['snmp_oid'] = $oid; - $values['id_modulo'] = 2; - - $result = modules_create_agent_module ($id_agent, io_safe_input($name), $values); - - if (is_error($result)) { - if (!isset($errors[$result])) { - $errors[$result] = 0; - } - $errors[$result]++; - } - else { - $done++; - } - } - } - - if ($done > 0) { - ui_print_success_message(__('Successfully modules created')." ($done)"); - } - - if (!empty($errors)) { - $msg = __('Could not be created').':'; - - - foreach ($errors as $code => $number) { - switch ($code) { - case ERR_EXIST: - $msg .= '
'.__('Another module already exists with the same name')." ($number)"; - break; - case ERR_INCOMPLETE: - $msg .= '
'.__('Some required fields are missed').': ('.__('name').') '." ($number)"; - break; - case ERR_DB: - case ERR_GENERIC: - default: - $msg .= '
'.__('Processing error')." ($number)"; - break; - } - } - - ui_print_error_message($msg); - - } - } - - // Create the interface list for the interface - $interfaces_list = array(); - foreach ($interfaces as $interface) { - // Get the interface name, removing " " characters and avoid "blank" interfaces - if (isset($interface['ifName']) && $interface['ifName']['value'] != "") { - $ifname = $interface['ifName']['value']; - } - else if (isset($interface['ifDescr']) && $interface['ifDescr']['value'] != "") { - $ifname = $interface['ifDescr']['value']; - } - else { - continue; - } - - $interfaces_list[$interface['ifIndex']['value']] = str_replace ( "\"" , "" , $ifname); - } - - echo ''; - echo "
"; - - $table->width = '98%'; - - $table->valign[0] = 'top'; - $table->valign[1] = 'top'; - - $table->data[0][0] = '' . __('Target IP') . ''; - $table->data[0][1] = html_print_input_text ('ip_target', $ip_target, '', 15, 60, true); - - $table->data[0][2] = '' . __('Port') . ''; - $table->data[0][3] = html_print_input_text ('tcp_port', $tcp_port, '', 5, 20, true); - - $snmp_versions['1'] = 'v. 1'; - $snmp_versions['2'] = 'v. 2'; - $snmp_versions['2c'] = 'v. 2c'; - $snmp_versions['3'] = 'v. 3'; - - $table->data[1][0] = '' . __('SNMP community') . ''; - $table->data[1][1] = html_print_input_text ('snmp_community', $snmp_community, '', 15, 60, true); - - $table->data[1][2] = '' . _('SNMP version') . ''; - $table->data[1][3] = html_print_select ($snmp_versions, 'snmp_version', $snmp_version, '', '', '', true, false, false, ''); - - $table->data[1][3] .= ''; - html_print_input_hidden('snmpwalk', 1); - - html_print_table($table); - - unset($table); - - //SNMP3 OPTIONS - $table->width = '98%'; - - $table->valign[0] = 'top'; - $table->valign[1] = 'top'; - - $table->data[2][1] = ''.__('Auth user').''; - $table->data[2][2] = html_print_input_text ('snmp3_auth_user', $snmp3_auth_user, '', 15, 60, true); - $table->data[2][3] = ''.__('Auth password').''; - $table->data[2][4] = html_print_input_text ('snmp3_auth_pass', $snmp3_auth_pass, '', 15, 60, true); - $table->data[2][4] .= html_print_input_hidden('active_snmp_v3', 0, true); - - $table->data[5][0] = ''.__('Privacy method').''; - $table->data[5][1] = html_print_select(array('DES' => __('DES'), 'AES' => __('AES')), 'snmp3_privacy_method', $snmp3_privacy_method, '', '', '', true); - $table->data[5][2] = ''.__('privacy pass').''; - $table->data[5][3] = html_print_input_text ('snmp3_privacy_pass', $snmp3_privacy_pass, '', 15, 60, true); - - $table->data[6][0] = ''.__('Auth method').''; - $table->data[6][1] = html_print_select(array('MD5' => __('MD5'), 'SHA' => __('SHA')), 'snmp3_auth_method', $snmp3_auth_method, '', '', '', true); - $table->data[6][2] = ''.__('Security level').''; - $table->data[6][3] = html_print_select(array('noAuthNoPriv' => __('Not auth and not privacy method'), - 'authNoPriv' => __('Auth and not privacy method'), 'authPriv' => __('Auth and privacy method')), 'snmp3_security_level', $snmp3_security_level, '', '', '', true); - - if ($snmp_version == 3) { - echo '
'; - } - else { - echo ''; - - echo "
"; - echo ''; - html_print_submit_button(__('SNMP Walk'), 'snmp_walk', false, array('class' => 'sub next')); - echo "
"; - - if ($snmpwalk && !$snmpis) { - echo ''.__('Unable to do SNMP walk').''; - } - - unset($table); - - echo ""; - - if (!empty($interfaces_list)) { - echo ''; - echo ''; - echo "
"; - - $id_snmp_serialize = serialize_in_temp($interfaces, $config['id_user']."_snmp"); - html_print_input_hidden('id_snmp_serialize', $id_snmp_serialize); - - html_print_input_hidden('create_modules', 1); - html_print_input_hidden('ip_target', $ip_target); - html_print_input_hidden('tcp_port', $tcp_port); - html_print_input_hidden('snmp_community', $snmp_community); - html_print_input_hidden('snmp_version', $snmp_version); - html_print_input_hidden('snmp3_auth_user', $snmp3_auth_user); - html_print_input_hidden('snmp3_auth_pass', $snmp3_auth_pass); - html_print_input_hidden('snmp3_auth_method', $snmp3_auth_method); - html_print_input_hidden('snmp3_privacy_method', $snmp3_privacy_method); - html_print_input_hidden('snmp3_privacy_pass', $snmp3_privacy_pass); - html_print_input_hidden('snmp3_security_level', $snmp3_security_level); - - $table->width = '98%'; - - $table->valign[0] = 'top'; - $table->valign[1] = 'top'; - - //Agent selector - $table->data[0][0] = ''.__('Interfaces').''; - $table->data[0][1] = ''; - $table->data[0][2] = ''.__('Modules').''; - - $table->data[1][0] = html_print_select ($interfaces_list, 'id_snmp[]', 0, false, '', '', true, true, true, '', false, 'width:200px;'); - $table->data[1][1] = html_print_image('images/darrowright.png', true); - $table->data[1][2] = html_print_select (array (), 'module[]', 0, false, '', 0, true, true, true, '', false, 'width:200px;'); - $table->data[1][2] .= html_print_input_hidden('agent', $id_agent, true); - - html_print_table($table); - - echo "
"; - html_print_submit_button(__('Create modules'), '', false, array('class' => 'sub add')); - echo "
"; - unset($table); - - echo "
"; - echo '
'; - } - - ui_require_jquery_file ('pandora.controls'); - ui_require_jquery_file ('ajaxqueue'); - ui_require_jquery_file ('bgiframe'); -?> - - - diff --git a/pandora_console/godmode/agentes/agent_wizard.php b/pandora_console/godmode/agentes/agent_wizard.php new file mode 100644 index 0000000000..d06deca9e1 --- /dev/null +++ b/pandora_console/godmode/agentes/agent_wizard.php @@ -0,0 +1,44 @@ +"; +echo "" . __('SNMP Interfaces explorer') . ""; +echo " | "; +echo "" . __('WMI explorer') . ""; +echo ""; + +require("agent_wizard." . $wizard_section . ".php"); + +?> diff --git a/pandora_console/godmode/agentes/agent_wizard.snmp_interfaces_explorer.php b/pandora_console/godmode/agentes/agent_wizard.snmp_interfaces_explorer.php new file mode 100644 index 0000000000..7e5649775f --- /dev/null +++ b/pandora_console/godmode/agentes/agent_wizard.snmp_interfaces_explorer.php @@ -0,0 +1,475 @@ + $snmp) { + + $data = explode(': ',$snmp); + $keydata = explode('::',$key); + $keydata2 = explode('.',$keydata[1]); + + // Avoid results without index and interfaces without name + if (!isset($keydata2[1]) || !isset($data[1])) { + continue; + } + + if (array_key_exists(1,$data)) { + $interfaces[$keydata2[1]][$keydata2[0]]['type'] = $data[0]; + $interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[1]; + } + else { + $interfaces[$keydata2[1]][$keydata2[0]]['type'] = ''; + $interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[0]; + } + + $interfaces[$keydata2[1]][$keydata2[0]]['oid'] = $key; + $interfaces[$keydata2[1]][$keydata2[0]]['checked'] = 0; + } + + unset($interfaces[0]); +} + +if ($create_modules) { + $id_snmp_serialize = get_parameter_post('id_snmp_serialize'); + $interfaces = unserialize_in_temp($id_snmp_serialize); + + if (!$interfaces) { + $interfaces = array(); + } + + $values = array(); + + if ($tcp_port != '') { + $values['tcp_port'] = $tcp_port; + } + $values['snmp_community'] = $snmp_community; + $values['ip_target'] = $ip_target; + $values['tcp_send'] = $snmp_version; + + if ($snmp_version == '3') { + $values['plugin_user'] = $snmp3_auth_user; + $values['plugin_pass'] = $snmp3_auth_pass; + $values['plugin_parameter'] = $snmp3_auth_method; + $values['custom_string_1'] = $snmp3_privacy_method; + $values['custom_string_2'] = $snmp3_privacy_pass; + $values['custom_string_3'] = $snmp3_security_level; + } + + $oids = array(); + foreach ($interfaces as $key => $interface) { + foreach ($interface as $key2 => $module) { + $oid = get_parameter($key."-".$key2, ''); + if ($oid != '') { + $interfaces[$key][$key2]['checked'] = 1; + $oids[$key][] = $interfaces[$key][$key2]['oid']; + } + else { + $interfaces[$key][$key2]['checked'] = 0; + } + } + } + $modules = get_parameter('module', array()); + $id_snmp = get_parameter('id_snmp'); + + if ($id_snmp == false) { + ui_print_error_message (__('No modules selected')); + $id_snmp = array(); + } + + if (agents_get_name($id_agent) == false) { + ui_print_error_message (__('No agent selected or the agent does not exist')); + $id_snmp = array(); + } + + $result = false; + + $errors = array(); + $done = 0; + + foreach ($id_snmp as $id) { + if (isset($interfaces[$id]['ifName']) && $interfaces[$id]['ifName']['value'] != "") { + $ifname = $interfaces[$id]['ifName']['value']; + } + else if (isset($interfaces[$id]['ifDescr']) && $interfaces[$id]['ifDescr']['value'] != "") { + $ifname = $interfaces[$id]['ifDescr']['value']; + } + foreach ($modules as $module) { + $oid_array = explode('.',$module); + $oid_array[count($oid_array)-1] = $id; + $oid = implode('.',$oid_array); + + // Get the name + $name_array = explode('::',$oid_array[0]); + $name = $name_array[1] . "_" . $ifname; + + // Clean the name + $name = str_replace ( "\"" , "" , $name); + + // Proc moduletypes + if (preg_match ( "/Status/", $name_array[1])) + $module_type = 18; + + elseif (preg_match ( "/Present/", $name_array[1])) + $module_type = 18; + + elseif (preg_match ( "/PromiscuousMode/", $name_array[1])) + $module_type = 18; + + // String moduletypes + elseif (preg_match ( "/Alias/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Address/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Name/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Specific/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Descr/", $name_array[1])) + $module_type = 17; + + // Specific counters (ends in s) + elseif (preg_match ( "/s$/", $name_array[1])) + $module_type = 16; + + // Otherwise, numeric + else + $module_type = 15; + + $values['id_tipo_modulo'] = $module_type; + $values['descripcion'] = io_safe_input("(" . $ip_target." - ".$name . ") " . $interfaces[$id]['ifDescr']['value']); + + $values['snmp_oid'] = $oid; + $values['id_modulo'] = 2; + + $result = modules_create_agent_module ($id_agent, io_safe_input($name), $values); + + if (is_error($result)) { + if (!isset($errors[$result])) { + $errors[$result] = 0; + } + $errors[$result]++; + } + else { + $done++; + } + } + } + + if ($done > 0) { + ui_print_success_message(__('Successfully modules created')." ($done)"); + } + + if (!empty($errors)) { + $msg = __('Could not be created').':'; + + + foreach ($errors as $code => $number) { + switch ($code) { + case ERR_EXIST: + $msg .= '
'.__('Another module already exists with the same name')." ($number)"; + break; + case ERR_INCOMPLETE: + $msg .= '
'.__('Some required fields are missed').': ('.__('name').') '." ($number)"; + break; + case ERR_DB: + case ERR_GENERIC: + default: + $msg .= '
'.__('Processing error')." ($number)"; + break; + } + } + + ui_print_error_message($msg); + + } +} + +// Create the interface list for the interface +$interfaces_list = array(); +foreach ($interfaces as $interface) { + // Get the interface name, removing " " characters and avoid "blank" interfaces + if (isset($interface['ifName']) && $interface['ifName']['value'] != "") { + $ifname = $interface['ifName']['value']; + } + else if (isset($interface['ifDescr']) && $interface['ifDescr']['value'] != "") { + $ifname = $interface['ifDescr']['value']; + } + else { + continue; + } + + $interfaces_list[$interface['ifIndex']['value']] = str_replace ( "\"" , "" , $ifname); +} + +echo ''; +echo "
"; + +$table->width = '98%'; + +$table->valign[0] = 'top'; +$table->valign[1] = 'top'; + +$table->data[0][0] = '' . __('Target IP') . ''; +$table->data[0][1] = html_print_input_text ('ip_target', $ip_target, '', 15, 60, true); + +$table->data[0][2] = '' . __('Port') . ''; +$table->data[0][3] = html_print_input_text ('tcp_port', $tcp_port, '', 5, 20, true); + +$snmp_versions['1'] = 'v. 1'; +$snmp_versions['2'] = 'v. 2'; +$snmp_versions['2c'] = 'v. 2c'; +$snmp_versions['3'] = 'v. 3'; + +$table->data[1][0] = '' . __('SNMP community') . ''; +$table->data[1][1] = html_print_input_text ('snmp_community', $snmp_community, '', 15, 60, true); + +$table->data[1][2] = '' . __('SNMP version') . ''; +$table->data[1][3] = html_print_select ($snmp_versions, 'snmp_version', $snmp_version, '', '', '', true, false, false, ''); + +$table->data[1][3] .= ''; +html_print_input_hidden('snmpwalk', 1); + +html_print_table($table); + +unset($table); + +//SNMP3 OPTIONS +$table->width = '98%'; + +$table->valign[0] = 'top'; +$table->valign[1] = 'top'; + +$table->data[2][1] = ''.__('Auth user').''; +$table->data[2][2] = html_print_input_text ('snmp3_auth_user', $snmp3_auth_user, '', 15, 60, true); +$table->data[2][3] = ''.__('Auth password').''; +$table->data[2][4] = html_print_input_text ('snmp3_auth_pass', $snmp3_auth_pass, '', 15, 60, true); +$table->data[2][4] .= html_print_input_hidden('active_snmp_v3', 0, true); + +$table->data[5][0] = ''.__('Privacy method').''; +$table->data[5][1] = html_print_select(array('DES' => __('DES'), 'AES' => __('AES')), 'snmp3_privacy_method', $snmp3_privacy_method, '', '', '', true); +$table->data[5][2] = ''.__('privacy pass').''; +$table->data[5][3] = html_print_input_text ('snmp3_privacy_pass', $snmp3_privacy_pass, '', 15, 60, true); + +$table->data[6][0] = ''.__('Auth method').''; +$table->data[6][1] = html_print_select(array('MD5' => __('MD5'), 'SHA' => __('SHA')), 'snmp3_auth_method', $snmp3_auth_method, '', '', '', true); +$table->data[6][2] = ''.__('Security level').''; +$table->data[6][3] = html_print_select(array('noAuthNoPriv' => __('Not auth and not privacy method'), + 'authNoPriv' => __('Auth and not privacy method'), 'authPriv' => __('Auth and privacy method')), 'snmp3_security_level', $snmp3_security_level, '', '', '', true); + +if ($snmp_version == 3) { + echo '
'; +} +else { + echo ''; + +echo "
"; +echo ''; +html_print_submit_button(__('SNMP Walk'), 'snmp_walk', false, array('class' => 'sub next')); +echo "
"; + +if ($snmpwalk && !$snmpis) { + ui_print_error_message(__('Unable to do SNMP walk')); +} + +unset($table); + +echo ""; + +if (!empty($interfaces_list)) { + echo ''; + echo "
"; + echo ''; + + $id_snmp_serialize = serialize_in_temp($interfaces, $config['id_user']."_snmp"); + html_print_input_hidden('id_snmp_serialize', $id_snmp_serialize); + + html_print_input_hidden('create_modules', 1); + html_print_input_hidden('ip_target', $ip_target); + html_print_input_hidden('tcp_port', $tcp_port); + html_print_input_hidden('snmp_community', $snmp_community); + html_print_input_hidden('snmp_version', $snmp_version); + html_print_input_hidden('snmp3_auth_user', $snmp3_auth_user); + html_print_input_hidden('snmp3_auth_pass', $snmp3_auth_pass); + html_print_input_hidden('snmp3_auth_method', $snmp3_auth_method); + html_print_input_hidden('snmp3_privacy_method', $snmp3_privacy_method); + html_print_input_hidden('snmp3_privacy_pass', $snmp3_privacy_pass); + html_print_input_hidden('snmp3_security_level', $snmp3_security_level); + + $table->width = '98%'; + + $table->valign[0] = 'top'; + $table->valign[1] = 'top'; + + //Agent selector + $table->data[0][0] = ''.__('Interfaces').''; + $table->data[0][1] = ''; + $table->data[0][2] = ''.__('Modules').''; + + $table->data[1][0] = html_print_select ($interfaces_list, 'id_snmp[]', 0, false, '', '', true, true, true, '', false, 'width:200px;'); + $table->data[1][1] = html_print_image('images/darrowright.png', true); + $table->data[1][2] = html_print_select (array (), 'module[]', 0, false, '', 0, true, true, true, '', false, 'width:200px;'); + $table->data[1][2] .= html_print_input_hidden('agent', $id_agent, true); + + html_print_table($table); + + echo "
"; + html_print_submit_button(__('Create modules'), '', false, array('class' => 'sub add')); + echo "
"; + unset($table); + + echo "
"; + echo "
"; + echo '
'; +} + +ui_require_jquery_file ('pandora.controls'); +ui_require_jquery_file ('ajaxqueue'); +ui_require_jquery_file ('bgiframe'); +?> + + diff --git a/pandora_console/godmode/agentes/agent_wizard.wmi_explorer.php b/pandora_console/godmode/agentes/agent_wizard.wmi_explorer.php new file mode 100644 index 0000000000..5a26e6c19b --- /dev/null +++ b/pandora_console/godmode/agentes/agent_wizard.wmi_explorer.php @@ -0,0 +1,518 @@ + $row) { + // First and second rows are Class and column names, ignore it + if ($index < 2) { + continue; + } + $row_exploded = explode('|', $row); + + if (!in_array($row_exploded[$processes_name_field], $processes)) { + $processes[$row_exploded[$processes_name_field]] = $row_exploded[$processes_name_field]; + } + } + unset($output); + + // Services + $wmi_services = $wmi_command . ' "select Name from Win32_Service"'; + $services_name_field = 0; + $services_check_field = 1; + + exec($wmi_services, $output); + + foreach ($output as $index => $row) { + // First and second rows are Class and column names, ignore it + if ($index < 2) { + continue; + } + $row_exploded = explode('|', $row); + + if (!in_array($row_exploded[$services_name_field], $services)) { + $services[$row_exploded[$services_name_field]] = $row_exploded[$services_name_field]; + } + } + unset($output); + + // Disks + $wmi_disks = $wmi_command . ' "Select DeviceID from Win32_LogicalDisk"'; + $disks_name_field = 0; + + exec($wmi_disks, $output); + + foreach ($output as $index => $row) { + // First and second rows are Class and column names, ignore it + if ($index < 2) { + continue; + } + $row_exploded = explode('|', $row); + + if (!in_array($row_exploded[$disks_name_field], $services)) { + $disk_string = sprintf(__('Free space on disk %s'), $row_exploded[$disks_name_field]); + $disks[$row_exploded[$disks_name_field]] = $disk_string; + } + } + unset($output); + + // WMI Components + $network_component_groups = network_components_get_groups(MODULE_WMI); + } +} + +if ($create_modules) { + $modules = get_parameter("module", array()); + + $services = array(); + $processes = array(); + $disks = array(); + $components = array(); + + foreach ($modules as $module) { + // Split module data to get type + $module_exploded = explode('_', $module); + $type = $module_exploded[0]; + + // Delete type from module data + unset($module_exploded[0]); + + // Rebuild module data + $module = implode('_', $module_exploded); + + switch($type) { + case 'service': + $services[] = $module; + break; + case 'process': + $processes[] = $module; + break; + case 'disk': + $disks[] = $module; + break; + case 'component': + $components[] = $module; + break; + } + } + + // Common values for WMI modules + $values = array( + 'ip_target' => $ip_target, + 'tcp_send' => $tcp_send, + 'plugin_user' => $plugin_user, + 'plugin_pass' => $plugin_pass, + 'id_modulo' => MODULE_WMI); + + // Create Service modules + $services_values = $values; + + $services_values['snmp_community'] = 'Running'; // Key string + $services_values['tcp_port'] = 1; // Field number (Running/Stopped) + $services_values['id_tipo_modulo'] = 2; // Generic boolean + + $services_result = wmi_create_wizard_modules($id_agent, $services, 'services', $services_values); + + // Create Process modules + $processes_values = $values; + + $processes_values['tcp_port'] = 0; // Field number (OID) + $processes_values['id_tipo_modulo'] = 2; // Generic boolean + + $processes_result = wmi_create_wizard_modules($id_agent, $processes, 'processes', $processes_values); + + // Create Space on disk modules + $disks_values = $values; + + $disks_values['tcp_port'] = 1; // Free space in bytes + $disks_values['id_tipo_modulo'] = 1; // Generic numeric + $disks_values['unit'] = 'Bytes'; // Unit + + $disks_result = wmi_create_wizard_modules($id_agent, $disks, 'disks', $disks_values); + + // Create modules from component + $components_values = $values; + + $components_values['id_agente'] = $id_agent; + + $components_result = wmi_create_module_from_components($components, $components_values); + + + // Errors/Success messages + $success_message = ''; + $error_message = ''; + if (!empty($services_result)) { + if (count($services_result[NOERR]) > 0) { + $success_message .= sprintf(__('%s service modules created succesfully'), count($services_result[NOERR])) . '
'; + } + if (count($services_result[ERR_GENERIC]) > 0) { + $error_message .= sprintf(__('Error creating %s service modules'), count($services_result[ERR_GENERIC])) . '
'; + } + } + if (!empty($processes_result)) { + if (count($processes_result[NOERR]) > 0) { + $success_message .= sprintf(__('%s process modules created succesfully'), count($processes_result[NOERR])) . '
'; + } + if (count($processes_result[ERR_GENERIC]) > 0) { + $error_message .= sprintf(__('Error creating %s process modules'), count($processes_result[ERR_GENERIC])) . '
'; + } + } + if (!empty($disks_result)) { + if (count($disks_result[NOERR]) > 0) { + $success_message .= sprintf(__('%s disk space modules created succesfully'), count($disks_result[NOERR])) . '
'; + } + if (count($disks_result[ERR_GENERIC]) > 0) { + $error_message .= sprintf(__('Error creating %s disk space modules'), count($disks_result[ERR_GENERIC])) . '
'; + } + } + if (!empty($components_result)) { + if (count($components_result[NOERR]) > 0) { + $success_message .= sprintf(__('%s modules created from components succesfully'), count($components_result[NOERR])) . '
'; + } + if (count($components_result[ERR_GENERIC]) > 0) { + $error_message .= sprintf(__('Error creating %s modules from components'), count($components_result[ERR_GENERIC])) . '
'; + } + if (count($components_result[ERR_EXIST]) > 0) { + $error_message .= sprintf(__('%s modules already exist'), count($components_result[ERR_EXIST])) . '
'; + } + } + + if (!empty($success_message)) { + ui_print_success_message($success_message); + } + if (!empty($error_message)) { + ui_print_error_message($error_message); + } +} + +// Create the interface list for the interface +$interfaces_list = array(); +foreach ($interfaces as $interface) { + // Get the interface name, removing " " characters and avoid "blank" interfaces + if (isset($interface['ifName']) && $interface['ifName']['value'] != "") { + $ifname = $interface['ifName']['value']; + } + else if (isset($interface['ifDescr']) && $interface['ifDescr']['value'] != "") { + $ifname = $interface['ifDescr']['value']; + } + else { + continue; + } + + $interfaces_list[$interface['ifIndex']['value']] = str_replace ( "\"" , "" , $ifname); +} + +echo ''; +echo "
"; + +$table->width = '98%'; + +$table->valign[0] = 'top'; +$table->valign[1] = 'top'; + +$table->data[0][0] = '' . __('Target IP') . ''; +$table->data[0][1] = html_print_input_text ('ip_target', $ip_target, '', 15, 60, true); + +$table->data[0][2] = '' . __('Namespace') . ''; +$table->data[0][2] .= ui_print_help_icon ('wminamespace', true); +$table->data[0][3] = html_print_input_text ('tcp_send', $tcp_send, '', 15, 60, true); + +$table->data[1][0] = '' . __('Username') . ''; +$table->data[1][1] = html_print_input_text ('plugin_user', $plugin_user, '', 15, 60, true); + +$table->data[1][2] = '' . __('Password') . ''; +$table->data[1][3] = html_print_input_password ('plugin_pass', $plugin_pass, '', 15, 60, true); + +$table->data[1][3] .= ''; +html_print_input_hidden('wmiexplore', 1); + +html_print_table($table); + +echo "
"; +echo ''; +html_print_submit_button(__('WMI Explore'), 'wmi_explore', false, array('class' => 'sub next')); +echo "
"; + +if ($wmiexplore && $fail) { + ui_print_error_message(__('Unable to do WMI explorer')); +} + +unset($table); + +echo "
"; + +if ($wmiexplore && !$fail) { + echo ''; + echo "
"; + echo ''; + + html_print_input_hidden('create_modules', 1); + html_print_input_hidden('ip_target', $ip_target); // Host + html_print_input_hidden('plugin_user', $plugin_user); // User + html_print_input_hidden('plugin_pass', $plugin_pass); // Password + html_print_input_hidden('tcp_send', $tcp_send); // Namespace + + $table->width = '98%'; + + // Mode selector + $modes = array(); + $modes['services'] = __('Services'); + $modes['processes'] = __('Processes'); + $modes['disks'] = __('Free space on disk'); + $modes['components'] = __('WMI components'); + + $table->data[1][0] = __('Wizard mode') . ': '; + $table->data[1][0] .= html_print_select ($modes, + 'wmi_wizard_modes', '', '', '', '', true, false, false); + $table->cellstyle[1][0] = 'vertical-align: middle;'; + + $table->colspan[1][0] = 2; + $table->data[1][2] = ''.__('Modules').''; + $table->cellstyle[1][2] = 'vertical-align: middle;'; + + // Components list + $table->data[2][0] = '
'; + $table->data[2][0] .= __('Filter by group') . '
'; + $table->data[2][0] .= html_print_select ($network_component_groups, + 'network_component_group', '', '', '', '', + true, false, false, '', false, 'width: 300px;') . '
'; + $table->data[2][0] .= html_print_select (array (), 'network_component', '', '', + '', '', true, true, true, '', false, 'width: 300px;'); + $table->data[2][0] .= '
'; + + // Services list + $table->data[2][0] .= '
'; + $table->data[2][0] .= html_print_select ($services, 'services', '', '', + '', '', true, true, true, '', false, 'width: 300px;'); + $table->data[2][0] .= '
'; + + // Processes list + $table->data[2][0] .= '
'; + $table->data[2][0] .= html_print_select ($processes, 'processes', '', '', + '', '', true, true, true, '', false, 'width: 300px;'); + $table->data[2][0] .= '
'; + $table->data[2][0] .= ''; + + // Disks list + $table->data[2][0] .= '
'; + $table->data[2][0] .= html_print_select ($disks, 'disks', '', '', + '', '', true, true, true, '', false, 'width: 300px;'); + $table->data[2][0] .= '
'; + $table->cellstyle[2][0] = 'vertical-align: top; text-align: center;'; + + + // Components arrow + $table->data[2][1] = '
' . html_print_image('images/darrowright.png', true, array('title' => __('Add to modules list'))) . '
'; + // Services arrow + $table->data[2][1] .= '
' . html_print_image('images/darrowright.png', true, array('title' => __('Add to modules list'))) . '
'; + // Processes arrow + $table->data[2][1] .= '
' . html_print_image('images/darrowright.png', true, array('title' => __('Add to modules list'))) . '
'; + // Disks arrow + $table->data[2][1] .= '
' . html_print_image('images/darrowright.png', true, array('title' => __('Add to modules list'))) . '
'; + + + $table->data[2][1] .= '

' . html_print_image('images/cross.png', true, array('title' => __('Remove from modules list'))) . '
'; + $table->cellstyle[2][1] = 'vertical-align: middle; text-align: center;'; + + $table->data[2][2] = html_print_select (array (), 'module[]', 0, false, '', 0, true, true, true, '', false, 'width:300px; height: 100%;'); + $table->data[2][2] .= html_print_input_hidden('agent', $id_agent, true); + $table->cellstyle[2][2] = 'vertical-align: top; text-align: center;'; + + html_print_table($table); + + echo "
"; + html_print_submit_button(__('Create modules'), 'create_modules_btn', false, array('class' => 'sub add')); + echo "
"; + unset($table); + + echo "
"; + echo "
"; + echo ''; +} + +ui_require_jquery_file ('pandora.controls'); +ui_require_jquery_file ('ajaxqueue'); +ui_require_jquery_file ('bgiframe'); +ui_require_javascript_file ('pandora_modules'); + +?> + + diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index aa14daad77..c82b216b8c 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -339,6 +339,16 @@ if ($id_agente) { $gistab['active'] = false; } + /* Agent wizard tab */ + $agent_wizard['text'] = '' + . html_print_image ("images/wand.png", true, array ( "title" => __('Agent wizard'))) + . ''; + + if ($tab == "agent_wizard") + $agent_wizard['active'] = true; + else + $agent_wizard['active'] = false; + $total_incidents = agents_get_count_incidents($id_agente); /* Incident tab */ @@ -363,7 +373,8 @@ if ($id_agente) { 'pluginstab' => $pluginstab, 'collection'=> $collectiontab, 'group' => $grouptab, - 'gis' => $gistab); + 'gis' => $gistab, + 'agent_wizard' => $agent_wizard); // Only if the agent has incidents associated show incidents tab if ($total_incidents) { @@ -1394,6 +1405,9 @@ switch ($tab) { ui_print_error_message (__('Invalid tab specified')); } break; + case "agent_wizard": + require("agent_wizard.php"); + break; default: if (enterprise_hook ('switch_agent_tab', array ($tab))) { //This will make sure that blank pages will have at least some diff --git a/pandora_console/include/functions_wmi.php b/pandora_console/include/functions_wmi.php new file mode 100644 index 0000000000..467d9aa389 --- /dev/null +++ b/pandora_console/include/functions_wmi.php @@ -0,0 +1,158 @@ + array(), NOERR => array()); + + if (empty($names)) { + return array(); + } + + foreach($names as $name) { + // Add query to wmi_command + switch ($wizard_mode) { + case 'services': + $wmi_query = 'SELECT state FROM Win32_Service WHERE Name="' . io_safe_output($name) . '"'; + break; + case 'processes': + $wmi_query = 'SELECT Name FROM Win32_Process WHERE Name="' . io_safe_output($name) . '"'; + break; + case 'disks': + $wmi_query = 'SELECT Freespace FROM Win32_LogicalDisk WHERE DeviceID ="' . io_safe_output($name) . '"'; + break; + } + + // Add the query to values + $values['snmp_oid'] = io_safe_input($wmi_query); + + $return = modules_create_agent_module ($id_agent, $name, $values); + + if($return < 0) { + $results[ERR_GENERIC][] = $name; + } else { + $results[NOERR][] = $name; + } + } + + return $results; +} + +function wmi_create_module_from_components($components, $values) { + $results = array(ERR_GENERIC => array(), NOERR => array(), ERR_EXIST => array()); + + if (empty($components)) { + return array(); + } + foreach ($components as $component_id) { + $nc = db_get_row ("tnetwork_component", "id_nc", $component_id); + + // Compatibilize the fields between components and modules table + $nc['descripcion'] = $nc['description']; + unset($nc['description']); + + $nc['nombre'] = $nc['name']; + unset($nc['name']); + + $nc['id_tipo_modulo'] = $nc['type']; + unset($nc['type']); + + unset($nc['id_nc']); + unset($nc['id_group']); + + // Store the passed values with the component values + foreach ($values as $k => $v) { + $nc[$k] = $v; + } + + // Put tags in array if the component has to add them later + if(!empty($nc['tags'])) { + $tags = explode(',', $nc['tags']); + } + else { + $tags = array(); + } + + unset($nc['tags']); + + // Check if this module exists in the agent + $module_name_check = db_get_value_filter('id_agente_modulo', 'tagente_modulo', array('delete_pending' => 0, 'nombre' => $nc['nombre'], 'id_agente' => $nc['id_agente'])); + + if ($module_name_check !== false) { + $results[ERR_EXIST][] = $nc["nombre"]; + } + else { + $id_agente_modulo = modules_create_agent_module($nc["id_agente"], $nc["nombre"], $nc); + + if ($id_agente_modulo === false) { + $results[ERR_GENERIC][] = $nc["nombre"]; + } + else { + if(!empty($tags)) { + // Creating tags + $tag_ids = array(); + foreach ($tags as $tag_name) { + $tag_id = tags_get_id($tag_name); + + //If tag exists in the system we store to create it + $tag_ids[] = $tag_id; + } + + tags_insert_module_tag ($id_agente_modulo, $tag_ids); + } + + $results[NOERR][] = $nc["nombre"]; + } + } + } + return $results; +} +?> diff --git a/pandora_console/include/javascript/pandora_modules.js b/pandora_console/include/javascript/pandora_modules.js index 1f8bc9e193..cf16b37282 100644 --- a/pandora_console/include/javascript/pandora_modules.js +++ b/pandora_console/include/javascript/pandora_modules.js @@ -43,7 +43,7 @@ function configure_modules_form () { function (data, status) { if (data == false) { $("#component_loading").hide (); - $("span#no_component").show (); + $("#no_component").show (); return; } jQuery.each (data, function (i, val) { @@ -58,7 +58,6 @@ function configure_modules_form () { }, "json" ); - } ); @@ -219,40 +218,8 @@ function configure_modules_form () { ); }); - $("#network_component_group").change (function () { - var $select = $("#network_component").hide (); - $("#component").hide (); - if (this.value == 0) - return; - $("#component_loading").show (); - $(".error, #no_component").hide (); - $("option[value!=0]", $select).remove (); - jQuery.post ("ajax.php", - {"page" : "godmode/agentes/module_manager_editor", - "get_module_components" : 1, - "id_module_component_group" : this.value, - "id_module_component_type" : $("#hidden-id_module_component_type").attr ("value") - }, - function (data, status) { - if (data == false) { - $("#component_loading").hide (); - $("span#no_component").show (); - return; - } - jQuery.each (data, function (i, val) { - option = $("") - .attr ("value", val['id_nc']) - .append (val['name']); - $select.append (option); - }); - $("#component_loading").hide (); - $select.show (); - $("#component").show (); - }, - "json" - ); - }); - + network_component_group_change_event(); + $("#network_component").change (function () { if (this.value == 0) return; @@ -679,3 +646,39 @@ function show_module_detail_dialog(module_id, id_agente) { } }); } + +function network_component_group_change_event() { + $("#network_component_group").change (function () { + var $select = $("#network_component").hide (); + $("#component").hide (); + if (this.value == 0) + return; + $("#component_loading").show (); + $(".error, #no_component").hide (); + $("option[value!=0]", $select).remove (); + jQuery.post ("ajax.php", + {"page" : "godmode/agentes/module_manager_editor", + "get_module_components" : 1, + "id_module_component_group" : this.value, + "id_module_component_type" : $("#hidden-id_module_component_type").attr ("value") + }, + function (data, status) { + if (data == false) { + $("#component_loading").hide (); + $("#no_component").show (); + return; + } + jQuery.each (data, function (i, val) { + option = $("") + .attr ("value", val['id_nc']) + .append (val['name']); + $select.append (option); + }); + $("#component_loading").hide (); + $select.show (); + $("#component").show (); + }, + "json" + ); + }); +}