2011-04-13 Ramon Novoa <rnovoa@artica.es>

* lib/PandoraFMS/SNMPServer.pm,
	  lib/PandoraFMS/Config.pm,
	  lib/PandoraFMS/NetworkServer.pm,
	  lib/PandoraFMS/WMIServer.pm,
	  lib/PandoraFMS/PluginServer.pm,
	  lib/PandoraFMS/DB.pm,
	  lib/PandoraFMS/ProducerConsumerServer.pm,
	  lib/PandoraFMS/PredictionServer.pm,
	  lib/PandoraFMS/Core.pm,
	  lib/PandoraFMS/ReconServer.pm,
	  bin/pandora_server,
	  util/pandora_db.pl,
	  util/pandora_manage.pl,
	  util/recon_scripts/snmpdevices.pl: Adding support for PostgreSQL and
	  Oracle (not complete).



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4213 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
Ramon Novoa 2011-04-13 16:28:59 +00:00
parent 78870b8ae3
commit c69f48e890
15 changed files with 123 additions and 53 deletions

View File

@ -1,3 +1,21 @@
2011-04-13 Ramon Novoa <rnovoa@artica.es>
* lib/PandoraFMS/SNMPServer.pm,
lib/PandoraFMS/Config.pm,
lib/PandoraFMS/NetworkServer.pm,
lib/PandoraFMS/WMIServer.pm,
lib/PandoraFMS/PluginServer.pm,
lib/PandoraFMS/DB.pm,
lib/PandoraFMS/ProducerConsumerServer.pm,
lib/PandoraFMS/PredictionServer.pm,
lib/PandoraFMS/Core.pm,
lib/PandoraFMS/ReconServer.pm,
bin/pandora_server,
util/pandora_db.pl,
util/pandora_manage.pl,
util/recon_scripts/snmpdevices.pl: Adding support for PostgreSQL and
Oracle (not complete).
2011-04-13 Sancho Lerena <slerena@artica.es> 2011-04-13 Sancho Lerena <slerena@artica.es>
* lib/PandoraFMS/ReconServer.pm: Fixed bug #3286027. Fix also * lib/PandoraFMS/ReconServer.pm: Fixed bug #3286027. Fix also

View File

@ -68,7 +68,7 @@ sub pandora_startup () {
pandora_start_log (\%Config); pandora_start_log (\%Config);
# Connect to the DB # Connect to the DB
$DBH = db_connect ('mysql', $Config{'dbname'}, $Config{'dbhost'}, 3306, $DBH = db_connect ($Config{'dbengine'}, $Config{'dbname'}, $Config{'dbhost'}, 3306,
$Config{'dbuser'}, $Config{'dbpass'}); $Config{'dbuser'}, $Config{'dbpass'});
# Grab config tokens shared with the console and not in the .conf # Grab config tokens shared with the console and not in the .conf

View File

@ -174,6 +174,7 @@ sub pandora_load_config {
# Default values # Default values
$pa_config->{'version'} = $pandora_version; $pa_config->{'version'} = $pandora_version;
$pa_config->{'build'} = $pandora_build; $pa_config->{'build'} = $pandora_build;
$pa_config->{"dbengine"} = "mysql";
$pa_config->{"dbuser"} = "pandora"; $pa_config->{"dbuser"} = "pandora";
$pa_config->{"dbpass"} = "pandora"; $pa_config->{"dbpass"} = "pandora";
$pa_config->{"dbhost"} = "localhost"; $pa_config->{"dbhost"} = "localhost";
@ -383,6 +384,9 @@ sub pandora_load_config {
elsif ($parametro =~ m/^snmp_logfile\s(.*)/i) { elsif ($parametro =~ m/^snmp_logfile\s(.*)/i) {
$pa_config->{'snmp_logfile'}= clean_blank($1); $pa_config->{'snmp_logfile'}= clean_blank($1);
} }
elsif ($parametro =~ m/^dbengine\s(.*)/i) {
$pa_config->{'dbengine'}= clean_blank($1);
}
elsif ($parametro =~ m/^dbname\s(.*)/i) { elsif ($parametro =~ m/^dbname\s(.*)/i) {
$pa_config->{'dbname'}= clean_blank($1); $pa_config->{'dbname'}= clean_blank($1);
} }

View File

@ -707,7 +707,7 @@ sub pandora_access_update ($$$) {
if ($pa_config->{"agentaccess"} == 0){ if ($pa_config->{"agentaccess"} == 0){
return; return;
} }
db_insert ($dbh, "INSERT INTO tagent_access (`id_agent`, `utimestamp`) VALUES (?, ?)", $agent_id, time ()); db_do ($dbh, "INSERT INTO tagent_access (id_agent, utimestamp) VALUES (?, ?)", $agent_id, time ());
} }
########################################################################## ##########################################################################
@ -793,8 +793,8 @@ sub pandora_process_module ($$$$$$$$$;$) {
logger($pa_config, "Alerts inhibited for agent '" . $agent->{'nombre'} . "'.", 10); logger($pa_config, "Alerts inhibited for agent '" . $agent->{'nombre'} . "'.", 10);
} }
# tagente_estado.last_try defaults to NULL, should default to '0000-00-00 00:00:00' # tagente_estado.last_try defaults to NULL, should default to '1970-01-01 00:00:00'
$agent_status->{'last_try'} = '0000-00-00 00:00:00' unless defined ($agent_status->{'last_try'}); $agent_status->{'last_try'} = '1970-01-01 00:00:00' unless defined ($agent_status->{'last_try'});
# Do we have to save module data? # Do we have to save module data?
if ($agent_status->{'last_try'} !~ /(\d+)\-(\d+)\-(\d+) +(\d+):(\d+):(\d+)/) { if ($agent_status->{'last_try'} !~ /(\d+)\-(\d+)\-(\d+) +(\d+):(\d+):(\d+)/) {
@ -912,7 +912,7 @@ sub pandora_update_server ($$$$$;$$) {
# Create an entry in tserver # Create an entry in tserver
if (! defined ($server)){ if (! defined ($server)){
my $server_id = db_insert ($dbh, 'INSERT INTO tserver (`name`, `server_type`, `description`, `version`, `threads`, `queued_modules`) my $server_id = db_insert ($dbh, 'id_server', 'INSERT INTO tserver (name, server_type, description, version, threads, queued_modules)
VALUES (?, ?, ?, ?, ?, ?)', $server_name, $server_type, VALUES (?, ?, ?, ?, ?, ?)', $server_name, $server_type,
'Autocreated at startup', $pa_config->{'version'} . ' (P) ' . $pa_config->{'build'}, $num_threads, $queue_size); 'Autocreated at startup', $pa_config->{'version'} . ' (P) ' . $pa_config->{'build'}, $num_threads, $queue_size);
$server = get_db_single_row ($dbh, 'SELECT * FROM tserver $server = get_db_single_row ($dbh, 'SELECT * FROM tserver
@ -1103,9 +1103,8 @@ sub pandora_audit ($$$$$) {
my $utimestamp = time(); my $utimestamp = time();
my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime($utimestamp)); my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime($utimestamp));
db_insert($dbh, 'INSERT INTO tsesion (`ID_usuario`, `IP_origen`, `accion`, `fecha`, `descripcion`, `utimestamp`) db_do($dbh, 'INSERT INTO tsesion (' . db_reserved_word ('ID_usuario') .', ' . db_reserved_word ('IP_origen') . ', accion, fecha, descripcion, utimestamp)
VALUES (?, ?, ?, ?, ?, ?)', VALUES (?, ?, ?, ?, ?, ?)', 'SYSTEM', $name, $action , $timestamp , $description , $utimestamp);
'SYSTEM', $name, $action , $timestamp , $description , $utimestamp);
db_disconnect($dbh) if ($disconnect == 1); db_disconnect($dbh) if ($disconnect == 1);
} }
@ -1128,9 +1127,9 @@ sub pandora_create_module ($$$$$$$$$$) {
$min = 0 if ($min eq ''); $min = 0 if ($min eq '');
$post_process = 0 if ($post_process eq ''); $post_process = 0 if ($post_process eq '');
my $module_id = db_insert($dbh, 'INSERT INTO tagente_modulo (`id_agente`, `id_tipo_modulo`, `nombre`, `max`, `min`, `post_process`, `descripcion`, `module_interval`, `id_modulo`) my $module_id = db_insert($dbh, 'id_agente_modulo', 'INSERT INTO tagente_modulo (id_agente, id_tipo_modulo, nombre, max, min, post_process, descripcion, module_interval, id_modulo)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)', $agent_id, $module_type_id, safe_input($module_name), $max, $min, $post_process, $description, $interval); VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)', $agent_id, $module_type_id, safe_input($module_name), $max, $min, $post_process, $description, $interval);
db_do ($dbh, 'INSERT INTO tagente_estado (`id_agente_modulo`, `id_agente`, `last_try`) VALUES (?, ?, \'0000-00-00 00:00:00\')', $module_id, $agent_id); db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, id_agente, last_try) VALUES (?, ?, \'1970-01-01 00:00:00\')', $module_id, $agent_id);
return $module_id; return $module_id;
} }
@ -1163,9 +1162,9 @@ sub pandora_create_module_from_hash ($$$) {
logger($pa_config, "Creating module '$parameters->{'nombre'}' for agent ID $parameters->{'id_agente'}.", 10); logger($pa_config, "Creating module '$parameters->{'nombre'}' for agent ID $parameters->{'id_agente'}.", 10);
my $module_id = db_process_insert($dbh, 'tagente_modulo', $parameters); my $module_id = db_process_insert($dbh, 'id_agente_modulo', 'tagente_modulo', $parameters);
db_do ($dbh, 'INSERT INTO tagente_estado (`id_agente_modulo`, `id_agente`, `last_try`) VALUES (?, ?, \'0000-00-00 00:00:00\')', $module_id, $parameters->{'id_agente'}); db_do ($dbh, 'INSERT INTO tagente_estado (`id_agente_modulo`, `id_agente`, `last_try`) VALUES (?, ?, \'1970-01-01 00:00:00\')', $module_id, $parameters->{'id_agente'});
return $module_id; return $module_id;
} }
@ -1206,12 +1205,12 @@ sub pandora_create_agent ($$$$$$$$$$;$$$$$) {
my $agent_id; my $agent_id;
# Test if the optional positional parameters are defined or GIS is disabled # Test if the optional positional parameters are defined or GIS is disabled
if (!defined ($timezone_offset) ) { if (!defined ($timezone_offset) ) {
$agent_id = db_insert ($dbh, 'INSERT INTO tagente (`nombre`, `direccion`, `comentarios`, `id_grupo`, `id_os`, `server_name`, `intervalo`, `id_parent`, `modo`) $agent_id = db_insert ($dbh, 'id_agente', 'INSERT INTO tagente (nombre, direccion, comentarios, id_grupo, id_os, server_name, intervalo, id_parent, modo)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)', safe_input($agent_name), $address, $description, $group_id, $os_id, $server_name, $interval, $parent_id); VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)', safe_input($agent_name), $address, $description, $group_id, $os_id, $server_name, $interval, $parent_id);
} }
else { else {
$agent_id = db_insert ($dbh, 'INSERT INTO tagente (`nombre`, `direccion`, `comentarios`, `id_grupo`, `id_os`, `server_name`, `intervalo`, `id_parent`, $agent_id = db_insert ($dbh, 'id_agente', 'INSERT INTO tagente (nombre, direccion, comentarios, id_grupo, id_os, server_name, intervalo, id_parent,
`timezone_offset`, `modo` ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1)', safe_input($agent_name), $address, timezone_offset, modo ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1)', safe_input($agent_name), $address,
$description, $group_id, $os_id, $server_name, $interval, $parent_id, $timezone_offset); $description, $group_id, $os_id, $server_name, $interval, $parent_id, $timezone_offset);
} }
if (defined ($longitude) && defined ($latitude ) && $pa_config->{'activate_gis'} == 1 ) { if (defined ($longitude) && defined ($latitude ) && $pa_config->{'activate_gis'} == 1 ) {
@ -1283,8 +1282,8 @@ sub pandora_event ($$$$$$$$$$) {
my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime ($utimestamp)); my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime ($utimestamp));
$id_agentmodule = 0 unless defined ($id_agentmodule); $id_agentmodule = 0 unless defined ($id_agentmodule);
db_do ($dbh, 'INSERT INTO tevento (`id_agente`, `id_grupo`, `evento`, `timestamp`, `estado`, `utimestamp`, `event_type`, `id_agentmodule`, `id_alert_am`, `criticity`) db_do ($dbh, 'INSERT INTO tevento (id_agente, id_grupo, evento, timestamp, estado, utimestamp, event_type, id_agentmodule, id_alert_am, criticity, user_comment)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $id_agente, $id_grupo, safe_input ($evento), $timestamp, $event_status, $utimestamp, $event_type, $id_agentmodule, $id_alert_am, $severity); VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $id_agente, $id_grupo, safe_input ($evento), $timestamp, $event_status, $utimestamp, $event_type, $id_agentmodule, $id_alert_am, $severity, '');
} }
########################################################################## ##########################################################################
@ -1360,7 +1359,7 @@ sub pandora_module_keep_alive_nd {
AND tagente.disabled = 0 AND tagente.disabled = 0
AND tagente_modulo.id_tipo_modulo = 100 AND tagente_modulo.id_tipo_modulo = 100
AND tagente_modulo.disabled = 0 AND tagente_modulo.disabled = 0
AND (tagente_estado.datos = 1 OR tagente_estado.datos = \'\') AND (tagente_estado.datos = \'1\' OR tagente_estado.datos = \'\')
AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo
AND ( tagente_estado.utimestamp + (tagente.intervalo * 2) < UNIX_TIMESTAMP())'); AND ( tagente_estado.utimestamp + (tagente.intervalo * 2) < UNIX_TIMESTAMP())');
@ -1416,7 +1415,7 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
} }
# Check time threshold # Check time threshold
$alert->{'last_fired'} = '0000-00-00 00:00:00' unless defined ($alert->{'last_fired'}); $alert->{'last_fired'} = '1970-01-01 00:00:00' unless defined ($alert->{'last_fired'});
return unless ($alert->{'last_fired'} =~ /(\d+)\-(\d+)\-(\d+) +(\d+):(\d+):(\d+)/); return unless ($alert->{'last_fired'} =~ /(\d+)\-(\d+)\-(\d+) +(\d+):(\d+):(\d+)/);
my $last_fired = ($1 > 0) ? timelocal($6, $5, $4, $3, $2 - 1, $1 - 1900) : 0; my $last_fired = ($1 > 0) ? timelocal($6, $5, $4, $3, $2 - 1, $1 - 1900) : 0;
@ -1575,7 +1574,7 @@ sub process_inc_data ($$$$) {
# No previous data # No previous data
if (! defined ($data_inc)) { if (! defined ($data_inc)) {
db_insert ($dbh, 'INSERT INTO tagente_datos_inc db_do ($dbh, 'INSERT INTO tagente_datos_inc
(`id_agente_modulo`, `datos`, `utimestamp`) (`id_agente_modulo`, `datos`, `utimestamp`)
VALUES (?, ?, ?)', $module->{'id_agente_modulo'}, $data, $utimestamp); VALUES (?, ?, ?)', $module->{'id_agente_modulo'}, $data, $utimestamp);
return undef; return undef;
@ -1584,7 +1583,7 @@ sub process_inc_data ($$$$) {
# Negative increment, reset inc data # Negative increment, reset inc data
if ($data < $data_inc->{'datos'}) { if ($data < $data_inc->{'datos'}) {
db_do ($dbh, 'DELETE FROM tagente_datos_inc WHERE id_agente_modulo = ?', $module->{'id_agente_modulo'}); db_do ($dbh, 'DELETE FROM tagente_datos_inc WHERE id_agente_modulo = ?', $module->{'id_agente_modulo'});
db_insert ($dbh, 'INSERT INTO tagente_datos_inc db_do ($dbh, 'INSERT INTO tagente_datos_inc
(`id_agente_modulo`, `datos`, `utimestamp`) (`id_agente_modulo`, `datos`, `utimestamp`)
VALUES (?, ?, ?)', $module->{'id_agente_modulo'}, $data, $utimestamp); VALUES (?, ?, ?)', $module->{'id_agente_modulo'}, $data, $utimestamp);
return undef; return undef;
@ -1832,14 +1831,14 @@ sub save_agent_position($$$$$$;$$) {
if (defined($start_timestamp)) { if (defined($start_timestamp)) {
# Upadate the timestamp of the received agent # Upadate the timestamp of the received agent
db_insert ($dbh, 'INSERT INTO tgis_data_status (tagente_id_agente, current_longitude , current_latitude, current_altitude, db_do ($dbh, 'INSERT INTO tgis_data_status (tagente_id_agente, current_longitude , current_latitude, current_altitude,
stored_longitude , stored_latitude, stored_altitude, start_timestamp, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', stored_longitude , stored_latitude, stored_altitude, start_timestamp, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
$agent_id, $current_longitude, $current_latitude, $current_altitude, $current_longitude, $agent_id, $current_longitude, $current_latitude, $current_altitude, $current_longitude,
$current_latitude, $current_altitude, $start_timestamp, $description); $current_latitude, $current_altitude, $start_timestamp, $description);
} }
else { else {
# Upadate the data of the received agent using the default timestamp # Upadate the data of the received agent using the default timestamp
db_insert ($dbh, 'INSERT INTO tgis_data_status (tagente_id_agente, current_longitude , current_latitude, current_altitude, db_do ($dbh, 'INSERT INTO tgis_data_status (tagente_id_agente, current_longitude , current_latitude, current_altitude,
stored_longitude , stored_latitude, stored_altitude, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ', stored_longitude , stored_latitude, stored_altitude, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ',
$agent_id, $current_longitude, $current_latitude, $current_altitude, $current_longitude, $agent_id, $current_longitude, $current_latitude, $current_altitude, $current_longitude,
$current_latitude, $current_altitude, , $description); $current_latitude, $current_altitude, , $description);
@ -1891,7 +1890,7 @@ sub archive_agent_position($$$$$$$$$$) {
logger($pa_config, "Saving new agent position: start_timestamp=$start_timestamp longitude=$longitude latitude=$latitude altitude=$altitude", 10); logger($pa_config, "Saving new agent position: start_timestamp=$start_timestamp longitude=$longitude latitude=$latitude altitude=$altitude", 10);
db_insert($dbh, 'INSERT INTO tgis_data_history (`longitude`, `latitude`, `altitude`, `tagente_id_agente`, `start_timestamp`, db_do($dbh, 'INSERT INTO tgis_data_history (`longitude`, `latitude`, `altitude`, `tagente_id_agente`, `start_timestamp`,
`end_timestamp`, `description`, `number_of_packages`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', `end_timestamp`, `description`, `number_of_packages`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
$longitude, $latitude, $altitude, $agent_id, $start_timestamp, $end_timestamp, $description, $number_packages); $longitude, $latitude, $altitude, $agent_id, $start_timestamp, $end_timestamp, $description, $number_packages);

View File

@ -31,9 +31,11 @@ our @EXPORT = qw(
db_connect db_connect
db_disconnect db_disconnect
db_do db_do
db_insert
db_process_insert db_process_insert
db_process_update db_process_update
db_insert db_reserved_word
db_string
db_update db_update
get_action_id get_action_id
get_agent_id get_agent_id
@ -60,10 +62,12 @@ our @EXPORT = qw(
########################################################################## ##########################################################################
## Connect to the DB. ## Connect to the DB.
########################################################################## ##########################################################################
my $RDBMS = '';
sub db_connect ($$$$$$) { sub db_connect ($$$$$$) {
my ($rdbms, $db_name, $db_host, $db_port, $db_user, $db_pass) = @_; my ($rdbms, $db_name, $db_host, $db_port, $db_user, $db_pass) = @_;
if ($rdbms eq 'mysql') { if ($rdbms eq 'mysql') {
$RDBMS = 'mysql';
# Connect to MySQL # Connect to MySQL
my $dbh = DBI->connect("DBI:mysql:$db_name:$db_host:3306", $db_user, $db_pass, { RaiseError => 1, AutoCommit => 1 }); my $dbh = DBI->connect("DBI:mysql:$db_name:$db_host:3306", $db_user, $db_pass, { RaiseError => 1, AutoCommit => 1 });
@ -75,6 +79,14 @@ sub db_connect ($$$$$$) {
# Enable character semantics # Enable character semantics
$dbh->{'mysql_enable_utf8'} = 1; $dbh->{'mysql_enable_utf8'} = 1;
return $dbh;
} elsif ($rdbms eq 'postgresql') {
$RDBMS = 'postgresql';
# Connect to PostgreSQL
my $dbh = DBI->connect("DBI:Pg:dbname=$db_name;host=$db_host;port=5432", $db_user, $db_pass);
return undef unless defined ($dbh);
return $dbh; return $dbh;
} }
@ -331,11 +343,21 @@ sub get_db_rows ($$;@) {
########################################################################## ##########################################################################
## SQL insert. Returns the ID of the inserted row. ## SQL insert. Returns the ID of the inserted row.
########################################################################## ##########################################################################
sub db_insert ($$;@) { sub db_insert ($$$;@) {
my ($dbh, $query, @values) = @_; my ($dbh, $index, $query, @values) = @_;
my $insert_id = undef;
$dbh->do($query, undef, @values); # MySQL
return $dbh->{'mysql_insertid'}; if ($RDBMS eq 'mysql') {
$dbh->do($query, undef, @values);
$insert_id = $dbh->{'mysql_insertid'};
}
# PostgreSQL
elsif ($RDBMS eq 'postgresql') {
$insert_id = get_db_value ($dbh, $query . ' RETURNING ' . db_reserved_word ($index), undef, @values);
}
return $insert_id;
} }
########################################################################## ##########################################################################
@ -352,8 +374,8 @@ sub db_update ($$;@) {
########################################################################## ##########################################################################
## SQL insert. Returns the ID of the inserted row. ## SQL insert. Returns the ID of the inserted row.
########################################################################## ##########################################################################
sub db_process_insert($$$;@) { sub db_process_insert($$$$;@) {
my ($dbh, $table, $parameters, @values) = @_; my ($dbh, $index, $table, $parameters, @values) = @_;
my @columns_array = keys %$parameters; my @columns_array = keys %$parameters;
my @values_array = values %$parameters; my @values_array = values %$parameters;
@ -378,7 +400,7 @@ sub db_process_insert($$$;@) {
my $columns_string = join(',',@columns_array); my $columns_string = join(',',@columns_array);
my $res = db_insert ($dbh, "INSERT INTO $table (".$columns_string.") VALUES ".$wildcards, @values_array); my $res = db_insert ($dbh, $index, "INSERT INTO $table (".$columns_string.") VALUES ".$wildcards, @values_array);
return $res; return $res;
} }
@ -426,6 +448,33 @@ sub db_do ($$;@) {
$dbh->do($query, undef, @values); $dbh->do($query, undef, @values);
} }
##########################################################################
## Escape the given reserved word.
##########################################################################
sub db_reserved_word ($) {
my $reserved_word = shift;
# MySQL
return '`' . $reserved_word . '`' if ($RDBMS eq 'mysql');
# PostgreSQL
return '"' . $reserved_word . '"' if ($RDBMS eq 'postgresql');
return $reserved_word;
}
##########################################################################
## Quote the given string.
##########################################################################
sub db_string ($) {
my $string = shift;
# MySQL and PostgreSQL
return "'" . $string . "'" if ($RDBMS eq 'mysql' || $RDBMS eq 'postgresql');
return $string;
}
# End of function declaration # End of function declaration
# End of defined Code # End of defined Code

View File

@ -89,7 +89,7 @@ sub data_producer ($) {
my @rows; my @rows;
if ($pa_config->{'pandora_master'} == 0) { if ($pa_config->{'pandora_master'} == 0) {
@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left @rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
FROM tagente, tagente_modulo, tagente_estado FROM tagente, tagente_modulo, tagente_estado
WHERE server_name = ? WHERE server_name = ?
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente
@ -101,7 +101,7 @@ sub data_producer ($) {
AND (tagente_modulo.flag = 1 OR ((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP())) AND (tagente_modulo.flag = 1 OR ((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP()))
ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC ', $pa_config->{'servername'}); ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC ', $pa_config->{'servername'});
} else { } else {
@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, tagente_estado.last_execution_try, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left @rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, tagente_estado.last_execution_try, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
FROM tagente, tagente_modulo, tagente_estado FROM tagente, tagente_modulo, tagente_estado
WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0))) WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0)))
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente

View File

@ -89,7 +89,7 @@ sub data_producer ($) {
my @rows; my @rows;
if ($pa_config->{'pandora_master'} != 1) { if ($pa_config->{'pandora_master'} != 1) {
@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left @rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
FROM tagente, tagente_modulo, tagente_estado FROM tagente, tagente_modulo, tagente_estado
WHERE server_name = ? WHERE server_name = ?
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente
@ -100,7 +100,7 @@ sub data_producer ($) {
AND (tagente_modulo.flag = 1 OR (tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP()) AND (tagente_modulo.flag = 1 OR (tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP())
ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'}); ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'});
} else { } else {
@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left @rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
FROM tagente, tagente_modulo, tagente_estado FROM tagente, tagente_modulo, tagente_estado
WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0))) WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0)))
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente

View File

@ -83,7 +83,7 @@ sub data_producer ($) {
my @rows; my @rows;
if ($pa_config->{'pandora_master'} != 1) { if ($pa_config->{'pandora_master'} != 1) {
@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag @rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, last_execution_try
FROM tagente, tagente_modulo, tagente_estado FROM tagente, tagente_modulo, tagente_estado
WHERE server_name = ? WHERE server_name = ?
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente
@ -95,7 +95,7 @@ sub data_producer ($) {
OR (tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP()) OR (tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP())
ORDER BY last_execution_try ASC ', $pa_config->{'servername'}); ORDER BY last_execution_try ASC ', $pa_config->{'servername'});
} else { } else {
@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag @rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, last_execution_try
FROM tagente, tagente_modulo, tagente_estado FROM tagente, tagente_modulo, tagente_estado
WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0))) WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0)))
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente

View File

@ -104,7 +104,7 @@ sub data_producer ($$$$$) {
eval { eval {
# Connect to the DB # Connect to the DB
my $dbh = db_connect ('mysql', $pa_config->{'dbname'}, $pa_config->{'dbhost'}, 3306, my $dbh = db_connect ($pa_config->{'dbengine'}, $pa_config->{'dbname'}, $pa_config->{'dbhost'}, 3306,
$pa_config->{'dbuser'}, $pa_config->{'dbpass'}); $pa_config->{'dbuser'}, $pa_config->{'dbpass'});
$self->setDBH ($dbh); $self->setDBH ($dbh);
@ -151,7 +151,7 @@ sub data_consumer ($$$$$) {
eval { eval {
# Connect to the DB # Connect to the DB
my $dbh = db_connect ('mysql', $pa_config->{'dbname'}, $pa_config->{'dbhost'}, 3306, my $dbh = db_connect ($pa_config->{'dbengine'}, $pa_config->{'dbname'}, $pa_config->{'dbhost'}, 3306,
$pa_config->{'dbuser'}, $pa_config->{'dbpass'}); $pa_config->{'dbuser'}, $pa_config->{'dbpass'});
$self->setDBH ($dbh); $self->setDBH ($dbh);

View File

@ -244,7 +244,7 @@ sub data_consumer ($$) {
} }
# Assign the new address to the agent # Assign the new address to the agent
db_insert ($dbh, 'INSERT INTO taddress_agent (`id_a`, `id_agent`) db_do ($dbh, 'INSERT INTO taddress_agent (`id_a`, `id_agent`)
VALUES (?, ?)', $addr_id, $agent_id); VALUES (?, ?)', $addr_id, $agent_id);
# Create network profile modules for the agent # Create network profile modules for the agent
@ -355,7 +355,7 @@ sub update_recon_task ($$$) {
sub add_address ($$) { sub add_address ($$) {
my ($dbh, $ip_address) = @_; my ($dbh, $ip_address) = @_;
return db_insert ($dbh, 'INSERT INTO taddress (ip) VALUES (?)', $ip_address); return db_insert ($dbh, 'id_a', 'INSERT INTO taddress (ip) VALUES (?)', $ip_address);
} }
########################################################################## ##########################################################################
@ -384,13 +384,13 @@ sub create_network_profile_modules {
$component->{'snmp_community'} = $snmp_community; $component->{'snmp_community'} = $snmp_community;
# Create the module # Create the module
my $module_id = db_insert ($dbh, 'INSERT INTO tagente_modulo (id_agente, id_tipo_modulo, descripcion, nombre, max, min, module_interval, tcp_port, tcp_send, tcp_rcv, snmp_community, snmp_oid, ip_target, id_module_group, flag, disabled, plugin_user, plugin_pass, plugin_parameter, max_timeout, id_modulo ) my $module_id = db_insert ($dbh, 'id_agente_modulo', 'INSERT INTO tagente_modulo (id_agente, id_tipo_modulo, descripcion, nombre, max, min, module_interval, tcp_port, tcp_send, tcp_rcv, snmp_community, snmp_oid, ip_target, id_module_group, flag, disabled, plugin_user, plugin_pass, plugin_parameter, max_timeout, id_modulo )
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, 0, ?, ?, ?, ?, ?)', VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, 0, ?, ?, ?, ?, ?)',
$agent_id, $component->{'type'}, $component->{'description'}, safe_input($component->{'name'}), $component->{'max'}, $component->{'min'}, $component->{'module_interval'}, $component->{'tcp_port'}, $component->{'tcp_send'}, $component->{'tcp_rcv'}, $component->{'snmp_community'}, $agent_id, $component->{'type'}, $component->{'description'}, safe_input($component->{'name'}), $component->{'max'}, $component->{'min'}, $component->{'module_interval'}, $component->{'tcp_port'}, $component->{'tcp_send'}, $component->{'tcp_rcv'}, $component->{'snmp_community'},
$component->{'snmp_oid'}, $addr, $component->{'id_module_group'}, $component->{'plugin_user'}, $component->{'plugin_pass'}, $component->{'plugin_parameter'}, $component->{'max_timeout'}, $component->{'id_modulo'}); $component->{'snmp_oid'}, $addr, $component->{'id_module_group'}, $component->{'plugin_user'}, $component->{'plugin_pass'}, $component->{'plugin_parameter'}, $component->{'max_timeout'}, $component->{'id_modulo'});
# An entry in tagente_estado is necessary for the module to work # An entry in tagente_estado is necessary for the module to work
db_do ($dbh, 'INSERT INTO tagente_estado (`id_agente_modulo`, `id_agente`, `last_try`, current_interval) VALUES (?, ?, \'0000-00-00 00:00:00\', ?)', $module_id, $agent_id, $component->{'module_interval'}); db_do ($dbh, 'INSERT INTO tagente_estado (`id_agente_modulo`, `id_agente`, `last_try`, current_interval) VALUES (?, ?, \'1970-01-01 00:00:00\', ?)', $module_id, $agent_id, $component->{'module_interval'});
logger($pa_config, 'Creating module ' . $component->{'name'} . " for agent $addr from network component '" . $component->{'name'} . "'.", 10); logger($pa_config, 'Creating module ' . $component->{'name'} . " for agent $addr from network component '" . $component->{'name'} . "'.", 10);
} }

View File

@ -144,7 +144,7 @@ sub pandora_snmptrapd {
# Insert the trap into the DB # Insert the trap into the DB
if (! defined(enterprise_hook ('snmp_insert_trap', [$pa_config, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type, $timestamp, $self->getServerID (), $dbh]))) { if (! defined(enterprise_hook ('snmp_insert_trap', [$pa_config, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type, $timestamp, $self->getServerID (), $dbh]))) {
my $trap_id = db_insert ($dbh, 'INSERT INTO ttrap (timestamp, source, oid, type, value, oid_custom, value_custom, type_custom) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', my $trap_id = db_insert ($dbh, 'id_trap', 'INSERT INTO ttrap (timestamp, source, oid, type, value, oid_custom, value_custom, type_custom) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
$timestamp, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type); $timestamp, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type);
logger ($pa_config, "Received SNMP Trap from $source", 4); logger ($pa_config, "Received SNMP Trap from $source", 4);

View File

@ -89,7 +89,7 @@ sub data_producer ($) {
my @rows; my @rows;
if ($pa_config->{'pandora_master'} != 1) { if ($pa_config->{'pandora_master'} != 1) {
@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left @rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
FROM tagente, tagente_modulo, tagente_estado FROM tagente, tagente_modulo, tagente_estado
WHERE server_name = ? WHERE server_name = ?
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente
@ -101,7 +101,7 @@ sub data_producer ($) {
OR tagente_modulo.flag = 1) OR tagente_modulo.flag = 1)
ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'}); ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'});
} else { } else {
@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left @rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
FROM tagente, tagente_modulo, tagente_estado, tserver FROM tagente, tagente_modulo, tagente_estado, tserver
WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0))) WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0)))
AND tagente_modulo.id_agente = tagente.id_agente AND tagente_modulo.id_agente = tagente.id_agente

View File

@ -479,7 +479,7 @@ sub pandora_checkdb_consistency {
my $count = get_db_value ($dbh, 'SELECT COUNT(*) FROM tagente_estado WHERE id_agente_modulo = ?', $id_agente_modulo); my $count = get_db_value ($dbh, 'SELECT COUNT(*) FROM tagente_estado WHERE id_agente_modulo = ?', $id_agente_modulo);
next if (defined ($count) && $count > 0); next if (defined ($count) && $count > 0);
db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, datos, timestamp, estado, id_agente, last_try, utimestamp, current_interval, running_by, last_execution_try) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $id_agente_modulo, 0, '0000-00-00 00:00:00', 1, $id_agente, '0000-00-00 00:00:00', 0, 0, 0, 0); db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, datos, timestamp, estado, id_agente, last_try, utimestamp, current_interval, running_by, last_execution_try) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $id_agente_modulo, 0, '1970-01-01 00:00:00', 1, $id_agente, '1970-01-01 00:00:00', 0, 0, 0, 0);
print "[CHECKDB] Inserting module $id_agente_modulo in state table \n"; print "[CHECKDB] Inserting module $id_agente_modulo in state table \n";
} }

View File

@ -226,7 +226,7 @@ sub pandora_delete_all_template_module_actions ($$) {
sub pandora_create_user ($$$$$) { sub pandora_create_user ($$$$$) {
my ($dbh, $name, $password, $is_admin, $comments) = @_; my ($dbh, $name, $password, $is_admin, $comments) = @_;
return db_insert ($dbh, 'INSERT INTO tusuario (id_user, fullname, password, comments, is_admin) return db_insert ($dbh, 'id_user', 'INSERT INTO tusuario (id_user, fullname, password, comments, is_admin)
VALUES (?, ?, ?, ?, ?)', $name, $name, $password, $comments, $is_admin); VALUES (?, ?, ?, ?, ?)', $name, $name, $password, $comments, $is_admin);
} }
@ -258,7 +258,7 @@ sub pandora_create_template_module_action ($$$) {
logger($pa_config, "Creating module alert action to alert '$parameters->{'id_alert_template_module'}'.", 10); logger($pa_config, "Creating module alert action to alert '$parameters->{'id_alert_template_module'}'.", 10);
my $action_id = db_process_insert($dbh, 'talert_template_module_actions', $parameters); my $action_id = db_process_insert($dbh, 'id', 'talert_template_module_actions', $parameters);
return $action_id; return $action_id;
} }
@ -269,7 +269,7 @@ sub pandora_create_template_module_action ($$$) {
sub pandora_create_user_profile ($$$$) { sub pandora_create_user_profile ($$$$) {
my ($dbh, $user_id, $profile_id, $group_id) = @_; my ($dbh, $user_id, $profile_id, $group_id) = @_;
return db_insert ($dbh, 'INSERT INTO tusuario_perfil (id_usuario, id_perfil, id_grupo) VALUES (?, ?, ?)', $user_id, $profile_id, $group_id); return db_insert ($dbh, 'id_up', 'INSERT INTO tusuario_perfil (id_usuario, id_perfil, id_grupo) VALUES (?, ?, ?)', $user_id, $profile_id, $group_id);
} }
########################################################################## ##########################################################################

View File

@ -94,7 +94,7 @@ sub get_agent_from_addr ($$) {
sub add_address ($$) { sub add_address ($$) {
my ($dbh, $ip_address) = @_; my ($dbh, $ip_address) = @_;
return db_insert ($dbh, 'INSERT INTO taddress (ip) VALUES (?)', $ip_address); return db_insert ($dbh, 'id_a', 'INSERT INTO taddress (ip) VALUES (?)', $ip_address);
} }
########################################################################## ##########################################################################
@ -234,7 +234,7 @@ for (my $i = 1, $net_addr++; $net_addr < $net_addr->broadcast; $i++, $net_addr++
$agent_id = pandora_create_agent (\%conf, $conf{'servername'}, $host_name, $addr, $target_group, 0, 11, '', 300, $dbh); $agent_id = pandora_create_agent (\%conf, $conf{'servername'}, $host_name, $addr, $target_group, 0, 11, '', 300, $dbh);
# Assign the new address to the agent # Assign the new address to the agent
db_insert ($dbh, 'INSERT INTO taddress_agent (`id_a`, `id_agent`) VALUES (?, ?)', $addr_id, $agent_id); db_do ($dbh, 'INSERT INTO taddress_agent (`id_a`, `id_agent`) VALUES (?, ?)', $addr_id, $agent_id);
# Generate an event # Generate an event
pandora_event (\%conf, "[RECON] New SNMP host [$host_name] detected on network [" . $target_network . ']', $target_group, $agent_id, 2, 0, 0, 'recon_host_detected', 0, $dbh); pandora_event (\%conf, "[RECON] New SNMP host [$host_name] detected on network [" . $target_network . ']', $target_group, $agent_id, 2, 0, 0, 'recon_host_detected', 0, $dbh);