juanmanuelr ae8410e36e * include/functions_graph.php
include/functions_html.php
	include/functions_messages.php
	include/db/postgresql.php
	include/db/mysql.php
	include/db/oracle.php
	include/functions_reporting.php
	include/functions_filemanager.php
	include/functions_gis.php
	include/auth/ldap.php
	include/auth/mysql.php
	include/functions_networkmap.php
	include/functions_network_components.php
	include/ajax/skins.ajax.php
	include/ajax/reporting.ajax.php
	include/ajax/visual_console_builder.ajax.php
	include/ajax/alert_list.ajax.php
	include/ajax/module.php
	include/functions_config.php
	include/functions_api.php
	include/help/en/help_timesource.php
	include/help/es/help_timesource.php
	include/help/ja/help_timesource.php
	include/config_process.php
	include/functions_ui.php
	include/functions_custom_graphs.php
	include/fgraph.php
	include/functions_incidents.php
	include/api.php
	include/functions_reports.php
	include/functions_ui_renders.php
	extensions/insert_data.php
	extensions/system_info.php
	extensions/extension_uploader.php
	extensions/pandora_logs.php
	extensions/agents_modules.php
	extensions/update_manager.php
	extensions/ssh_console.php
	extensions/dbmanager.php
	extensions/vnc_view.php
	extensions/resource_registration.php
	extensions/resource_exportation.php
	extensions/users_connected.php
	extensions/module_groups.php
	extensions/update_manager/load_updatemanager.php
	extensions/update_manager/lib/libupdate_manager_client.php
	extensions/update_manager/lib/libupdate_manager.php
	extensions/update_manager/lib/libupdate_manager_components.php
	extensions/update_manager/lib/libupdate_manager_updates.php
	extensions/update_manager/settings.php
	extensions/update_manager/main.php
	extensions/plugin_registration.php
	operation/incidents/incident.php
	operation/incidents/incident_detail.php
	operation/incidents/incident_statistics.php
	operation/search_modules.php
	operation/visual_console/render_view.php
	operation/visual_console/index.php
	operation/extensions.php
	operation/agentes/status_monitor.php
	operation/agentes/export_csv.php
	operation/agentes/estado_ultimopaquete.php
	operation/agentes/datos_agente.php
	operation/agentes/alerts_status.php
	operation/agentes/estado_generalagente.php
	operation/agentes/custom_fields.php
	operation/agentes/estado_agente.php
	operation/agentes/networkmap.topology.php
	operation/agentes/networkmap.groups.php
	operation/agentes/sla_view.php
	operation/agentes/exportdata.php
	operation/agentes/gis_view.php
	operation/agentes/estado_monitores.php
	operation/agentes/ver_agente.php
	operation/agentes/graphs.php
	operation/agentes/agent_fields.php
	operation/agentes/tactical.php
	operation/agentes/group_view.php
	operation/agentes/networkmap.php
	operation/agentes/stat_win.php
	operation/servers/view_server.php
	operation/servers/view_server_detail.php
	operation/menu.php
	operation/search_agents.php
	operation/search_graphs.php
	operation/snmpconsole/snmp_view.php
	operation/users/user_edit.php
	operation/gis_maps/render_view.php
	operation/gis_maps/ajax.php
	operation/integria_incidents/incident.php
	operation/integria_incidents/incident_detail.php
	operation/integria_incidents/incident_statistics.php
	operation/events/event_statistics.php
	operation/events/events_rss.php
	operation/events/export_csv.php
	operation/events/sound_events.php
	operation/events/events_validate.php
	operation/events/events_list.php
	operation/events/events_marquee.php
	operation/events/events.php
	operation/search_alerts.php
	operation/messages/message.php
	operation/reporting/reporting_xml.php
	operation/reporting/reporting_viewer.php
	operation/reporting/graph_viewer.php
	operation/search_reports.php
	operation/search_maps.php
	operation/search_users.php
	extras/pandora_diag.php
	mobile/operation/agents/monitor_status.php
	mobile/operation/agents/view_agents.php
	mobile/operation/agents/view_alerts.php
	mobile/operation/agents/group_view.php
	mobile/operation/events/events.php
	mobile/index.php
	general/error_authconfig.php
	general/links_menu.php
	general/logon_ok.php
	general/error_dbconfig.php
	general/ui/agents_list.php
	general/header.php
	godmode/groups/modu_group_list.php
	godmode/groups/configure_group.php
	godmode/groups/configure_modu_group.php
	godmode/groups/group_list.php
	godmode/admin_access_logs.php
	godmode/db/db_main.php
	godmode/db/db_audit.php
	godmode/db/db_sanity.php
	godmode/db/db_refine.php
	godmode/db/db_info.php
	godmode/db/db_event.php
	godmode/db/db_purge.php
	godmode/extensions.php
	godmode/agentes/agent_template.php
	godmode/agentes/module_manager_editor_common.php
	godmode/agentes/fields_manager.php
	godmode/agentes/agent_conf_gis.php
	godmode/agentes/module_manager_editor_prediction.php
	godmode/agentes/module_manager.php
	godmode/agentes/modificar_agente.php
	godmode/agentes/configurar_agente.php
	godmode/agentes/configure_field.php
	godmode/agentes/module_manager_editor.php
	godmode/agentes/planned_downtime.php
	godmode/agentes/manage_config_remote.php
	godmode/agentes/agent_manager.php
	godmode/servers/recon_script.php
	godmode/servers/plugin.php
	godmode/servers/manage_recontask.php
	godmode/servers/modificar_server.php
	godmode/servers/manage_recontask_form.php
	godmode/alerts/alert_list.list.php
	godmode/alerts/configure_alert_compound.php
	godmode/alerts/alert_compounds.php
	godmode/alerts/alert_list.php
	godmode/alerts/configure_alert_template.php
	godmode/alerts/alert_templates.php
	godmode/alerts/configure_alert_action.php
	godmode/alerts/configure_alert_command.php
	godmode/alerts/alert_actions.php
	godmode/alerts/alert_list.builder.php
	godmode/alerts/alert_commands.php
	godmode/setup/file_manager.php
	godmode/setup/os.list.php
	godmode/setup/news.php
	godmode/setup/gis_step_2.php
	godmode/setup/links.php
	godmode/setup/setup.php
	godmode/setup/os.php
	godmode/setup/performance.php
	godmode/setup/setup_auth.php
	godmode/setup/gis.php
	godmode/setup/os.builder.php
	godmode/setup/setup_visuals.php
	godmode/snmpconsole/snmp_alert.php
	godmode/snmpconsole/snmp_filters.php
	godmode/users/user_list.php
	godmode/users/configure_profile.php
	godmode/gis_maps/configure_gis_map.php
	godmode/gis_maps/index.php
	godmode/massive/massive_add_alerts.php
	godmode/massive/massive_copy_modules.php
	godmode/massive/massive_delete_agents.php
	godmode/massive/massive_enable_disable_alerts.php
	godmode/massive/massive_operations.php
	godmode/massive/massive_delete_profiles.php
	godmode/massive/massive_edit_agents.php
	godmode/massive/massive_delete_action_alerts.php
	godmode/massive/massive_delete_modules.php
	godmode/massive/massive_add_profiles.php
	godmode/massive/massive_delete_alerts.php
	godmode/massive/massive_edit_modules.php
	godmode/massive/massive_standby_alerts.php
	godmode/massive/massive_add_action_alerts.php
	godmode/modules/manage_network_components_form.php
	godmode/modules/manage_nc_groups_form.php
	godmode/modules/manage_network_templates.php
	godmode/modules/module_list.php
	godmode/modules/manage_network_components_form_common.php
	godmode/modules/manage_network_components_form_network.php
	godmode/modules/manage_network_templates_form.php
	godmode/modules/manage_network_components_form_wmi.php
	godmode/modules/manage_network_components.php
	godmode/modules/manage_nc_groups.php
	godmode/reporting/visual_console_builder.wizard.php
	godmode/reporting/graph_builder.main.php
	godmode/reporting/reporting_builder.list_items.php
	godmode/reporting/visual_console_builder.php
	godmode/reporting/reporting_builder.preview.php
	godmode/reporting/reporting_builder.main.php
	godmode/reporting/visual_console_builder.data.php
	godmode/reporting/visual_console_builder.elements.php
	godmode/reporting/graph_builder.php
	godmode/reporting/visual_console_builder.preview.php
	godmode/reporting/graph_builder.graph_editor.php
	godmode/reporting/reporting_builder.php
	godmode/reporting/visual_console_builder.editor.php
	godmode/reporting/reporting_builder.item_editor.php
	godmode/reporting/map_builder.php
	godmode/reporting/graphs.php
	godmode/reporting/graph_builder.preview.php
	include/functions_db.php: Added some includes and functions of this code have "db_" prefix.
	* include/functions.php: Moved function check_login(), check_acl(), 
	dame_nombre_pluginid(), get_os_name() from functions_db.php to functions.php. 
	* include/functions_groups.php: Moved functions get_childrens(), safe_acl_group()
	 and get_parents(), give_disabled_group(), isAllGroups(), get_group_icon(), get_all_groups(), 	 
	get_id_groups_recursive(), get_user_groups_tree_recursive(), get_group_status(), 
	get_group_name(), get_group_users() from functions_db.php to this code. 
	* include/functions_profile.php: New library with profile functions. Moved functions 
	get_profile_name(), get_profiles(), create_user_profile(), delete_user_profile(), 
	delete_profile() from functions_db.php to this code. Added new parameter in function 
	get_profile() to retrieve profiles with filter conditions applied.
	* include/functions_users.php: New library with users functions. Moved functions 
	get_users_info(), get_all_model_groups(), get_user_groups(), get_user_groups_tree(), 
	get_user_first_group(), user_access_to_agent() from funtions_db.php to this code.
	* godmode/users/configure_user.php: Changed get_profile_filter() function to get_profile(). 
	* include/functions_agents.php: Moved functions get_group_agents(), get_agent_modules(), 
	get_agent_module_id(), get_agent_id(), get_agent_name(), get_agent_modules_data_count(), 
	check_alert_fired(), get_agent_interval(), get_agent_os(), give_agentmodule_flag(), 
	agent_add_address(), agent_delete_address(), get_agent_address(), get_agent_with_ip(), 
	get_agent_addresses(), get_agent_status(), delete_agent(), get_agentmodule_group(), 
	get_agent_group() from functions_db.php to this code.
	* include/functions_modules.php: Moved functions get_agentmodule(), get_agentmodule_id(), 
	get_agentmodule_is_init(), get_agent_modules_count(), get_module_type_name(), 
	get_module_type_icon(), get_agentmodule_agent(), get_agentmodule_agent_name(), 
	get_agentmodule_name(), get_agentmodule_type(), get_monitor_downs_in_period(), 		
	get_monitor_last_down_timestamp_in_period(), get_monitors_in_group(), 
	get_monitors_in_agent(), get_monitors_down(), get_moduletype_name(), 
	get_moduletype_description(), get_moduletypes(), get_module_interval(), show_icon_type(), 		
	give_modulecategory_name(),
 	give_agent_id_from_module_id(), get_module_status(), get_agent_module_last_value(), 
	get_previous_data(), get_agentmodule_modulegroup(), get_modulegroups(), 
	get_modulegroup_name() from functions_db.php to this code.
	* include/functions_alerts.php: Moved functions get_alert_type(), get_agent_alert_fired(),
	 get_module_alert_fired(), get_alert_fires_in_period(), get_group_alerts(), get_alerts_fired(), 
	get_alert_last_fire_timestamp_in_period(), get_agentmodule_status(), 
	get_agentmodule_last_status() from functions_db.php to this code.
	* include/functions_exportserver.php: Moved function dame_nombre_servidorexportacion() 
	from functions_db.php to this code.
	* include/functions_events.php: Moved functions get_group_events(), get_agent_events(), 
	get_module_events() from functions_db.php to this code.
	* include/functions_servers.php: Moved functions get_server_name(), show_server_type(), 
	check_server_status(), server_status() from functions_db.php to this code.
	* include/functions_network_profiles.php: Moved function get_networkprofile_name() 
	from functions_db.php to this code.
	* include/functions_visual_map.php: Moved functions get_layoutdata_x(), get_layoutdata_y() 
	from fucntions_db.php to this code.
	* include/functions_io.php: Moved function __() from functions_db.php to this code.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4258 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2011-04-19 18:42:49 +00:00

459 lines
12 KiB
PHP

<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2009 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; version 2
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
/**
* @package Include/auth
*/
if (!isset ($config)) {
die ('
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Pandora FMS - The Flexible Monitoring System - Console error</title>
<meta http-equiv="expires" content="0">
<meta http-equiv="content-type" content="text/html; charset=utf8">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="author" content="Sancho Lerena">
<meta name="copyright" content="This is GPL software. Created by Sancho Lerena and others">
<meta name="keywords" content="pandora, monitoring, system, GPL, software">
<meta name="robots" content="index, follow">
<link rel="icon" href="../../images/pandora.ico" type="image/ico">
<link rel="stylesheet" href="../styles/pandora.css" type="text/css">
</head>
<body>
<div id="main" style="float:left; margin-left: 100px">
<div align="center">
<div id="login_f">
<h1 id="log_f" class="error">You cannot access this file</h1>
<div>
<img src="../../images/pandora_logo.png" border="0"></a>
</div>
<div class="msg">
<span class="error"><b>ERROR:</b>
You can\'t access this file directly!</span>
</div>
</div>
</div>
</body>
</html>
');
}
include_once($config['homedir'] . "/include/functions_profile.php");
enterprise_include ('include/auth/mysql.php');
$config["user_can_update_info"] = true;
$config["user_can_update_password"] = true;
$config["admin_can_add_user"] = true;
$config["admin_can_delete_user"] = true;
$config["admin_can_disable_user"] = false; //currently not implemented
$config["admin_can_make_admin"] = true;
/**
* process_user_login accepts $login and $pass and handles it according to current authentication scheme
*
* @param string $login
* @param string $pass
*
* @return mixed False in case of error or invalid credentials, the username in case it's correct.
*/
function process_user_login ($login, $pass) {
global $config, $mysql_cache;
// Always authenticate admins against the local database
if (strtolower ($config["auth"]) == 'mysql' || is_user_admin ($login)) {
// Connect to Database
switch ($config["dbtype"]) {
case "mysql":
$sql = sprintf ("SELECT `id_user`, `password` FROM `tusuario` WHERE `id_user` = '%s'", $login);
break;
case "postgresql":
$sql = sprintf ('SELECT "id_user", "password" FROM "tusuario" WHERE "id_user" = \'%s\'', $login);
break;
case "oracle":
$sql = sprintf ('SELECT id_user, password FROM tusuario WHERE id_user = \'%s\'', $login);
break;
}
$row = db_get_row_sql ($sql);
//Check that row exists, that password is not empty and that password is the same hash
if ($row !== false && $row["password"] !== md5 ("") && $row["password"] == md5 ($pass)) {
// Login OK
// Nick could be uppercase or lowercase (select in MySQL
// is not case sensitive)
// We get DB nick to put in PHP Session variable,
// to avoid problems with case-sensitive usernames.
// Thanks to David Muñiz for Bug discovery :)
return $row["id_user"];
}
else {
$mysql_cache["auth_error"] = "User not found in database or incorrect password";
}
return false;
// Remote authentication
}
else {
switch ($config["auth"]) {
// LDAP
case 'ldap':
if (ldap_process_user_login ($login, $pass) === false) {
$config["auth_error"] = "User not found in database or incorrect password";
return false;
}
break;
// Active Directory
case 'ad':
if (enterprise_hook ('ad_process_user_login', array ($login, $pass)) === false) {
$config["auth_error"] = "User not found in database or incorrect password";
return false;
}
break;
// Remote Pandora FMS
case 'pandora':
if (enterprise_hook ('remote_pandora_process_user_login', array ($login, $pass)) === false) {
$config["auth_error"] = "User not found in database or incorrect password";
return false;
}
break;
// Remote Babel Enterprise
case 'babel':
if (enterprise_hook ('remote_babel_process_user_login', array ($login, $pass)) === false) {
$config["auth_error"] = "User not found in database or incorrect password";
return false;
}
break;
// Remote Integria
case 'integria':
if (enterprise_hook ('remote_integria_process_user_login', array ($login, $pass)) === false) {
$config["auth_error"] = "User not found in database or incorrect password";
return false;
}
break;
// Unknown authentication method
default:
$config["auth_error"] = "User not found in database or incorrect password";
return false;
}
// Authentication ok, check if the user exists in the local database
if (is_user ($login)) {
return $login;
}
// The user does not exist and can not be created
if ($config['autocreate_remote_users'] == 0 || is_user_blacklisted ($login)) {
$config["auth_error"] = "Ooops User not found in database or incorrect password";
return false;
}
// Create the user in the local database
if (create_user ($login, $pass, array ('fullname' => $login, 'comments' => 'Imported from ' . $config['auth'])) === false) {
$config["auth_error"] = "User not found in database or incorrect password";
return false;
}
create_user_profile ($login, $config['default_remote_profile'], $config['default_remote_group']);
return $login;
}
return false;
}
/**
* Checks if a user is administrator.
*
* @param string User id.
*
* @return bool True is the user is admin
*/
function is_user_admin ($id_user) {
/* This code below was here, but I don't understand WHY. This always returns TRUE ¿?¿?
static $is_admin = -1;
if ($is_admin !== -1)
return $is_admin;
*/
$is_admin = (bool) db_get_value ('is_admin', 'tusuario', 'id_user', $id_user);
return $is_admin;
}
/**
* Get the user id field on a mixed structure.
*
* This function is needed to make auth system more compatible and independant.
*
* @param mixed User structure to get id. It might be a row returned from
* tusuario or tusuario_perfil. If it's not a row, the int value is returned.
*
* @return int User id of the mixed parameter.
*/
function get_user_id ($user) {
if (is_array ($user)){
if (isset ($user['id_user']))
return $user['id_user'];
elseif (isset ($user['id_usuario']))
return $user['id_usuario'];
else
return false;
} else {
return $user;
}
}
/**
* Check is a user exists in the system
*
* @param mixed User id.
*
* @return bool True if the user exists.
*/
function is_user ($user) {
$user = db_get_row('tusuario', 'id_user', get_user_id ($user));
if (! $user)
return false;
return true;
}
/**
* Gets the users real name
*
* @param mixed User id.
*
* @return string The users full name
*/
function get_user_fullname ($user) {
return (string) db_get_value ('fullname', 'tusuario', 'id_user', get_user_id ($user));
}
/**
* Gets the users email
*
* @param mixed User id.
*
* @return string The users email address
*/
function get_user_email ($user) {
return (string) db_get_value ('email', 'tusuario', 'id_user', get_user_id ($user));
}
/**
* Gets a Users info
*
* @param mixed User id
*
* @return mixed An array of users
*/
function get_user_info ($user) {
return db_get_row ("tusuario", "id_user", get_user_id ($user));
}
/**
* Get a list of all users in an array [username] => array (userinfo)
* We can't simplify this because some auth schemes (like LDAP) automatically (or it's at least cheaper to) return all the information
* Functions like get_user_info allow selection of specifics (in functions_db)
*
* @param string Field to order by (id_user, fullname or registered)
*
* @return array An array of user information
*/
function get_users ($order = "fullname", $filter = false, $fields = false) {
if (is_array($order)) {
$filter['order'] = $order['field'] . ' ' . $order['order'];
}
else {
switch ($order) {
case "registered":
case "last_connect":
case "fullname":
break;
default:
$order = "fullname";
break;
}
$filter['order'] = $order." ASC";
}
$output = array();
$result = db_get_all_rows_filter ("tusuario", $filter, $fields);
if ($result !== false) {
foreach ($result as $row) {
$output[$row["id_user"]] = $row;
}
}
return $output;
}
/**
* Sets the last login for a user
*
* @param string User id
*/
function process_user_contact ($id_user) {
return db_process_sql_update ("tusuario",
array ("last_connect" => get_system_time ()),
array ("id_user" => $id_user));
}
/**
* Create a new user
*
* @return bool false
*/
function create_user ($id_user, $password, $user_info) {
$values = $user_info;
$values["id_user"] = $id_user;
$values["password"] = md5 ($password);
$values["last_connect"] = 0;
$values["registered"] = get_system_time ();
return (@db_process_sql_insert ("tusuario", $values)) !== false;
}
/**
* Deletes the user
*
* @param string User id
*/
function delete_user ($id_user) {
$result = db_process_sql_delete('tusuario_perfil', array('id_usuario' => $id_user));
if ($result === false) {
return false;
}
$result = db_process_sql_delete('tusuario', array('id_user' => $id_user));
if ($result === false) {
return false;
}
return true;
}
/**
* Update the password in MD5 for user pass as id_user with
* password in plain text.
*
* @param string user User ID
* @param string password Password in plain text.
*
* @return mixed False in case of error or invalid values passed. Affected rows otherwise
*/
function update_user_password ($user, $password_new) {
return db_process_sql_update ('tusuario',
array ('password' => md5 ($password_new)),
array ('id_user' => $user));
}
/**
* Update the data of a user that user is choose with
* id_user.
*
* @param string user User ID
* @param array values Associative array with index as name of field and content.
*
* @return mixed False in case of error or invalid values passed. Affected rows otherwise
*/
function update_user ($id_user, $values) {
if (! is_array ($values))
return false;
return db_process_sql_update ("tusuario", $values, array ("id_user" => $id_user));
}
/**
* Authenticate against an LDAP server.
*
* @param string User login
* @param string User password (plain text)
*
* @return bool True if the login is correct, false in other case
*/
function ldap_process_user_login ($login, $password) {
global $config;
if (! function_exists ("ldap_connect")) {
$config["auth_error"] = 'Your installation of PHP does not support LDAP';
return false;
}
// Connect to the LDAP server
$ds = @ldap_connect ($config["ldap_server"], $config["ldap_port"]);
if (!$ds) {
$config["auth_error"] = 'Error connecting to LDAP server';
return false;
}
// Set the LDAP version
ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, $config["ldap_version"]);
if ($config["ldap_start_tls"]) {
if (!@ldap_start_tls ($ds)) {
$config["auth_error"] = 'Could not start TLS for LDAP connection';
@ldap_close ($ds);
return false;
}
}
if (!@ldap_bind ($ds, $config["ldap_login_attr"]."=".$login.",".$config["ldap_base_dn"], $password)) {
$config["auth_error"] = 'User not found in database or incorrect password';
@ldap_close ($ds);
return false;
}
@ldap_close ($ds);
return true;
}
/**
* Checks if a user is in the autocreate blacklist.
*
* @param string User
*
* @return bool True if the user is in the blacklist, false otherwise.
*/
function is_user_blacklisted ($user) {
global $config;
$blisted_users = explode (',', $config['autocreate_blacklist']);
foreach ($blisted_users as $blisted_user) {
if ($user == $blisted_user) {
return true;
}
}
return false;
}
//Reference the global use authorization error to last auth error.
$config["auth_error"] = &$mysql_cache["auth_error"];
?>