diff --git a/pandora_server/FreeBSD/pandora_server.conf.new b/pandora_server/FreeBSD/pandora_server.conf.new index 01ff859fa5..9f072621ee 100644 --- a/pandora_server/FreeBSD/pandora_server.conf.new +++ b/pandora_server/FreeBSD/pandora_server.conf.new @@ -507,21 +507,11 @@ async_recovery 1 # Required for some features like the module graphs macros. # console_api_url: Api URL (http://localhost/pandora_console/include/api.php by default) -console_api_url http://localhost/pandora_console/include/api.php +# console_api_url http://localhost/pandora_console/include/api.php # console_api_pass: Api pass # console_api_pass 1234 -# console_user: Console user name (admin by default) -console_user admin - -# console_pass: Console password (pandora by default) -# To make sure console_api_url, console_api_pass, console_user and console_pass are properly configured run: -# curl "?op=get&op2=test&apipass=&user=&pass=" -# It should return a string similar to: -# OK,{VERSION},{BUILD} -console_pass pandora - # Passphrase used to generate the key for password encryption (PANDORA FMS ENTERPRISE ONLY). #encryption_passphrase passphrase diff --git a/pandora_server/bin/pandora_server b/pandora_server/bin/pandora_server index 1ce3e3da5e..474f0f9029 100755 --- a/pandora_server/bin/pandora_server +++ b/pandora_server/bin/pandora_server @@ -21,6 +21,7 @@ use strict; use warnings; use POSIX qw(strftime); use threads; +use Digest::MD5 qw(md5_hex); # Default lib dir for RPM and DEB packages use lib '/usr/lib/perl5'; @@ -576,6 +577,139 @@ sub main() { pandora_event (\%Config, "Warmup mode for events started.", 0, 0, 0, 0, 0, 'system', 0, $DBH); } + # Only if console_api_url was not defined + if( !defined($Config{"console_api_url"}) ) { + my $console_api_url = pandora_get_tconfig_token ($DBH, 'public_url', ''); + + # If public_url is empty in database + if ( $console_api_url eq '' ) { + $console_api_url = 'http://localhost/pandora_console/'; + logger(\%Config, "Assuming default path for API url: " . $console_api_url, 3); + } + + $Config{"console_api_url"} = $console_api_url . 'include/api.php'; + } + + # Definition of configuration file + my $cfg_file = $Config{'pandora_path'}; + my $cfg_file_output = $Config{'pandora_path'} . "_backup"; + + # Only if console_api_pass was not defined + if ( !defined($Config{"console_api_pass"}) ) { + my $console_api_pass = pandora_get_tconfig_token ($DBH, 'api_password', ''); + # If api_password is empty in database + if ( $console_api_pass eq '' ) { + $console_api_pass = '1234'; + db_process_update ($DBH, 'tconfig', {'value' => $console_api_pass}, {'token' => 'api_password'}); + } + # Definition of console_api_pass in config + $Config{"console_api_pass"} = $console_api_pass; + # Watch if paramether is added or not (even if it is commented) + my $console_api_pass_control = undef; + if ( open (CFGin, "<$cfg_file") && open (CFGout, ">>$cfg_file_output") ) { + while(my $row = ) { + if (chomp($row) =~ (m/^#\sconsole_api_pass\s(.*)/i)) { + $console_api_pass_control = 1; + print CFGout "\nconsole_api_pass " .$Config{"console_api_pass"} . "\n"; + } else { + print CFGout "$row\n"; + } + } + # Only if the parameter was not added + if ( !defined($console_api_pass_control) ) { + print CFGout "\n# console_api_pass: Console password\n"; + print CFGout "console_api_pass " .$Config{"console_api_pass"} . "\n"; + } + # Close both files + close (CFGin); + close (CFGout); + # Convert the output file in the original configuration file + rename $cfg_file_output, $cfg_file; + } + } + + # Only if console_pass was not defined. + if ( !defined($Config{"console_pass"}) ){ + # Randomized parametrization of console_pass. + if (open (CFG, ">>$cfg_file")) { + my $valid_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + my $num_char = 8; + my $randomized_string = ''; + for (my $i = 0; $i < $num_char; $i++) { + $randomized_string .= substr($valid_chars, rand(length($valid_chars)), 1); + } + + $Config{"console_pass"} = $randomized_string; + print CFG "\n# console_pass: Console password\n"; + print CFG "# To make sure console_api_url, console_api_pass, console_user and console_pass are properly configured run:\n"; + print CFG "# curl '?op=get&op2=test&apipass=&user=&pass='\n"; + print CFG "# It should return a string similar to:\n"; + print CFG "# OK,{VERSION},{BUILD}\n"; + print CFG "console_pass " .$Config{"console_pass"} . "\n"; + + close (CFG); + } else { + logger(\%Config, "[WARNING] Error with configuration file when define `console_pass`: $!", 3); + } + } + + # Only if console_user was not defined + if ( !defined($Config{"console_user"}) ) { + my $pandora_uid = pandora_get_tconfig_token ($DBH, 'pandora_uid', ''); + + if ( $pandora_uid ne '' && $pandora_uid ne 'OFFLINE' ) { + $Config{"console_user"} = "internal_API_$pandora_uid"; + } else { + $Config{"console_user"} = "internal_API"; + } + + # If user not exists in DB, is necessary to create it + if ( get_user_exists($DBH, $Config{"console_user"}) == -1 ) { + + # Definition of API user parameters + my $api_user_parameters = {}; + $api_user_parameters->{'id_user'} = $Config{"console_user"}; + $api_user_parameters->{'password'} = md5_hex($Config{"console_pass"}); + $api_user_parameters->{'comments'} = "Internal user, used for generating reports and email attachments"; + $api_user_parameters->{'is_admin'} = 0; + $api_user_parameters->{'not_login'} = 1; + + # Profile creation for API purpouses + my $api_profile_parameters = {}; + $api_profile_parameters->{'id_usuario'} = $Config{"console_user"}; + $api_profile_parameters->{'id_perfil'} = 1; + $api_profile_parameters->{'id_grupo'} = 0; + $api_profile_parameters->{'assigned_by'} = "system"; + $api_profile_parameters->{'id_policy'} = 0; + + # Insert in DB + my $res_tusuario = db_process_insert($DBH, 'id_user', 'tusuario', $api_user_parameters); + my $res_tusuario_perfil = db_process_insert($DBH, 'id_user', 'tusuario_perfil', $api_profile_parameters); + + # If the user was inserted in DB, must write it in configuration file + if ( $res_tusuario_perfil > 0 ) { + if (open (CFG, ">>$cfg_file")) { + print CFG "\n# Console User (created for API use)\n"; + print CFG "console_user " . $Config{"console_user"} . "\n"; + close (CFG); + } else { + logger(\%Config, "Warning. Was not possible edit configuration file for add console user", 3); + } + } else { + logger(\%Config, "Warning. Was not possible creating console user for API.", 3); + } + } + } + + # Testing API url + my $curl_execution = "'".$Config{'console_api_url'}."?op=get&op2=test&apipass=".$Config{"console_api_pass"}."&user=".$Config{"console_user"}."&pass=".$Config{"console_pass"}."'"; + my $exe_testing_api = `curl $curl_execution`; + my @res_testing_api = split(',', $exe_testing_api); + if ( $res_testing_api[0] ne 'OK' ) { + logger(\%Config, "Warning! The server does not have access to the API, this can trigger problems in the generation of reports and graphs.", 1); + pandora_event (\%Config, "Server does not have access to the API", 0, 0, 0, 0, 0, 'system', 0, $DBH); + } + # Generate 'going up' events foreach my $server (@Servers) { $server->upEvent (); diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index 9e38b6cdcf..8d5c8df2cc 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -563,21 +563,11 @@ async_recovery 1 # Required for some features like the module graphs macros. # console_api_url: Api URL (http://localhost/pandora_console/include/api.php by default) -console_api_url http://localhost/pandora_console/include/api.php +# console_api_url http://localhost/pandora_console/include/api.php # console_api_pass: Api pass # console_api_pass 1234 -# console_user: Console user name (admin by default) -console_user admin - -# console_pass: Console password (pandora by default) -# To make sure console_api_url, console_api_pass, console_user and console_pass are properly configured run: -# curl "?op=get&op2=test&apipass=&user=&pass=" -# It should return a string similar to: -# OK,{VERSION},{BUILD} -console_pass pandora - # Passphrase used to generate the key for password encryption (PANDORA FMS ENTERPRISE ONLY). #encryption_passphrase passphrase diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 2443a573c3..5cf38a0af5 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -453,12 +453,6 @@ sub pandora_load_config { # Auto-recovery of asynchronous modules. $pa_config->{"async_recovery"} = 1; # 5.1SP1 - # Console API connection - $pa_config->{"console_api_url"} = 'http://localhost/pandora_console/include/api.php'; # 6.0 - $pa_config->{"console_api_pass"} = ''; # 6.0 - $pa_config->{"console_user"} = 'admin'; # 6.0 - $pa_config->{"console_pass"} = 'pandora'; # 6.0 - # Database password encryption passphrase $pa_config->{"encryption_passphrase"} = ''; # 6.0