2007-05-24 Sancho Lerena <slerena@artica.es>

* conf/pandora_server.conf: Added support for dbname option.

        * pandora_snmpconsole: Version and bash header updated.

        * bin/pandora_config.pm: Added support for dbname option. Added
        some default options for DB.

        * bin/pandora_db.pm: Fixed stupid bug in alert execution.  Added
        support for dbname option and other minor fixes.

        * bin/pandora_server.pl,
        bin/pandora_network.pl,
        bin/pandora_snmpconsole.pl,
        bin/pandora_recon.pl:  Added support for dbname option.

        * pandora_server: Version update



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@468 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
slerena 2007-05-24 21:14:06 +00:00
parent 45a4ba6916
commit 5a7cc6bb9f
10 changed files with 79 additions and 44 deletions

View File

@ -1,3 +1,22 @@
2007-05-24 Sancho Lerena <slerena@artica.es>
* conf/pandora_server.conf: Added support for dbname option.
* pandora_snmpconsole: Version and bash header updated.
* bin/pandora_config.pm: Added support for dbname option. Added
some default options for DB.
* bin/pandora_db.pm: Fixed stupid bug in alert execution. Added
support for dbname option and other minor fixes.
* bin/pandora_server.pl,
bin/pandora_network.pl,
bin/pandora_snmpconsole.pl,
bin/pandora_recon.pl: Added support for dbname option.
* pandora_server: Version update
2007-05-21 Sancho Lerena <slerena@artica.es> 2007-05-21 Sancho Lerena <slerena@artica.es>
* pandora_network: Version banner update. * pandora_network: Version banner update.

View File

@ -118,9 +118,10 @@ sub pandora_loadconfig {
# 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->{"dbuser"} =""; $pa_config->{"dbuser"} ="pandora";
$pa_config->{"dbpass"} = ""; $pa_config->{"dbpass"} = "pandora";
$pa_config->{"dbhost"} = ""; $pa_config->{"dbhost"} = "localhost";
$pa_config->{"dbname"} = "pandora";
$pa_config->{"basepath"}=$pa_config->{'pandora_path'}; # Compatibility with Pandora 1.1 $pa_config->{"basepath"}=$pa_config->{'pandora_path'}; # Compatibility with Pandora 1.1
$pa_config->{"incomingdir"}=$pa_config->{'pandora_path'}."/data_in"; $pa_config->{"incomingdir"}=$pa_config->{'pandora_path'}."/data_in";
$pa_config->{"server_threshold"}=30; $pa_config->{"server_threshold"}=30;
@ -205,6 +206,7 @@ sub pandora_loadconfig {
$pa_config->{"errorlogfile"} = $tbuf; $pa_config->{"errorlogfile"} = $tbuf;
} }
} }
elsif ($parametro =~ m/^dbname\s(.*)/i) { $pa_config->{'dbname'}= $1; }
elsif ($parametro =~ m/^dbuser\s(.*)/i) { $pa_config->{'dbuser'}= $1; } elsif ($parametro =~ m/^dbuser\s(.*)/i) { $pa_config->{'dbuser'}= $1; }
elsif ($parametro =~ m/^dbpass\s(.*)/i) { $pa_config->{'dbpass'}= $1; } elsif ($parametro =~ m/^dbpass\s(.*)/i) { $pa_config->{'dbpass'}= $1; }
elsif ($parametro =~ m/^dbhost\s(.*)/i) { $pa_config->{'dbhost'}= $1; } elsif ($parametro =~ m/^dbhost\s(.*)/i) { $pa_config->{'dbhost'}= $1; }
@ -291,7 +293,7 @@ sub pandora_loadconfig {
my $dbh; my $dbh;
# Check valid Database variables and update server status # Check valid Database variables and update server status
eval { eval {
$dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 }); $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 });
pandora_updateserver ($pa_config, $pa_config->{'servername'},1, $opmode, $dbh); # Alive status pandora_updateserver ($pa_config, $pa_config->{'servername'},1, $opmode, $dbh); # Alive status
}; };
if ($@) { if ($@) {

View File

@ -267,7 +267,7 @@ sub execute_alert (%$$$$$$$$$$) {
my @datarow; my @datarow;
if ($idag->rows != 0) { if ($idag->rows != 0) {
while (@datarow = $idag->fetchrow_array()) { while (@datarow = $idag->fetchrow_array()) {
$comand = $datarow[2]; $command = $datarow[2];
$alert_name = $datarow[1]; $alert_name = $datarow[1];
} }
} }
@ -276,26 +276,26 @@ sub execute_alert (%$$$$$$$$$$) {
logger($pa_config, "Alert ($alert_name) TRIGGERED for $agent",2); logger($pa_config, "Alert ($alert_name) TRIGGERED for $agent",2);
if ($id_alert != 3){ # id_alerta 3 is reserved for internal audit system if ($id_alert != 3){ # id_alerta 3 is reserved for internal audit system
$comand =~ s/_field1_/"$field1"/ig; $command =~ s/_field1_/"$field1"/ig;
$comand =~ s/_field2_/"$field2"/ig; $command =~ s/_field2_/"$field2"/ig;
$comand =~ s/_field3_/"$field3"/ig; $command =~ s/_field3_/"$field3"/ig;
$comand=~ s/_agent_/$agent/ig; $command=~ s/_agent_/$agent/ig;
$comand =~ s/_timestamp_/$timestamp/ig; $command =~ s/_timestamp_/$timestamp/ig;
$comand =~ s/_data_/$data/ig; $command =~ s/_data_/$data/ig;
# Clean up some "tricky" characters # Clean up some "tricky" characters
$comand =~ s/&gt;/>/g; $command =~ s/&gt;/>/g;
# EXECUTING COMMAND !!! # EXECUTING COMMAND !!!
eval { eval {
my $exit_value = system ($comand); my $exit_value = system ($command);
$exit_value = $? >> 8; # Shift 8 bits to get a "classic" errorlevel $exit_value = $? >> 8; # Shift 8 bits to get a "classic" errorlevel
if ($exit_value != 0) { if ($exit_value != 0) {
logger($pa_config, "Executed command for triggered alert '$alert_name' had errors (errorlevel =! 0) ",1); logger($pa_config, "Executed command for triggered alert '$alert_name' had errors (errorlevel =! 0) ",1);
logger($pa_config, "Executed command was $comand ",2); logger($pa_config, "Executed command was $command ",5);
} }
}; };
if ($@){ if ($@){
logger($pa_config, "WARNING: Alert command don't retun from execution. ( $comand )", 0 ); logger($pa_config, "WARNING: Alert command don't retun from execution. ( $command )", 0 );
logger($pa_config, "ERROR Code: $@",0); logger($pa_config, "ERROR Code: $@",1);
} }
} else { # id_alerta = 3, is a internal system audit } else { # id_alerta = 3, is a internal system audit
logger($pa_config, "Internal audit lauch for agent name $agent",3); logger($pa_config, "Internal audit lauch for agent name $agent",3);
@ -305,8 +305,8 @@ sub execute_alert (%$$$$$$$$$$) {
pandora_audit ($pa_config, $field1, $agent, "User Alert ($alert_name)", $dbh); pandora_audit ($pa_config, $field1, $agent, "User Alert ($alert_name)", $dbh);
} }
my $evt_descripcion = "Alert fired ($agent $alert_name) $field1"; my $evt_descripcion = "Alert fired ($agent $alert_name) $field1";
my $id_agente = dame_agente_id($pa_config,$agent,$dbh); my $id_agente = dame_agente_id ($pa_config,$agent,$dbh);
pandora_event($pa_config, $evt_descripcion, dame_grupo_agente($pa_config, $id_agente, $dbh), $id_agente, $dbh); pandora_event ($pa_config, $evt_descripcion, dame_grupo_agente($pa_config, $id_agente, $dbh), $id_agente, $dbh);
} }
@ -776,6 +776,9 @@ sub pandora_writedata (%$$$$$$$$$$){
# much more faster to do comparations... # much more faster to do comparations...
my $utimestamp; # integer version of timestamp my $utimestamp; # integer version of timestamp
$utimestamp = &UnixDate($timestamp,"%s"); # convert from human to integer $utimestamp = &UnixDate($timestamp,"%s"); # convert from human to integer
if (! defined($utimestamp)){ # If problems getting timestamp data
$utimestamp = &UnixDate("today","%s");
}
my $needscreate = 0; my $needscreate = 0;
# take max and min values for this id_agente_module # take max and min values for this id_agente_module
@ -1074,7 +1077,7 @@ sub pandora_audit (%$$$$) {
# In startup audit, DBH not passed # In startup audit, DBH not passed
if (! defined($dbh)){ if (! defined($dbh)){
$local_dbh = 1; $local_dbh = 1;
$dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 }); $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 });
} }
my $timestamp = &UnixDate("today","%Y-%m-%d %H:%M:%S"); my $timestamp = &UnixDate("today","%Y-%m-%d %H:%M:%S");
my $utimestamp; # integer version of timestamp my $utimestamp; # integer version of timestamp

View File

@ -83,7 +83,8 @@ print " [*] Threads loaded and running \n";
# Last thread is the main process # Last thread is the main process
my $dbhost = $pa_config{'dbhost'}; my $dbhost = $pa_config{'dbhost'};
my $dbh = DBI->connect("DBI:mysql:pandora:$dbhost:3306", $pa_config{'dbuser'}, $pa_config{'dbpass'}, { RaiseError => 1, AutoCommit => 1 }); my $dbname = $pa_config{'dbname'};
my $dbh = DBI->connect("DBI:mysql:$dbname:$dbhost:3306", $pa_config{'dbuser'}, $pa_config{'dbpass'}, { RaiseError => 1, AutoCommit => 1 });
while (1) { while (1) {
pandora_serverkeepaliver (\%pa_config, 1, $dbh); pandora_serverkeepaliver (\%pa_config, 1, $dbh);
@ -131,7 +132,7 @@ sub pandora_network_subsystem {
# SNMP DATA, SNMP DATA_STRING # SNMP DATA, SNMP DATA_STRING
my $nettypedesc; my $nettypedesc;
# Connect ONCE to Database, we pass DBI handler to all subprocess. # Connect ONCE to Database, we pass DBI handler to all subprocess.
my $dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 }); my $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 });
my $id_agente; my $id_agente;
my $id_agente_modulo; my $id_agente_modulo;

View File

@ -56,7 +56,8 @@ my $pa_config = \%pa_config;
my $dbhost = $pa_config->{'dbhost'}; my $dbhost = $pa_config->{'dbhost'};
my $dbuser = $pa_config->{'dbuser'}; my $dbuser = $pa_config->{'dbuser'};
my $dbpass = $pa_config->{'dbpass'}; my $dbpass = $pa_config->{'dbpass'};
my $dbh = DBI->connect("DBI:mysql:pandora:$dbhost:3306", $dbuser, $dbpass, { RaiseError => 1, AutoCommit => 1 }); my $dbname = $pa_config->{'dbname'};
my $dbh = DBI->connect("DBI:mysql:$dbname:$dbhost:3306", $dbuser, $dbpass, { RaiseError => 1, AutoCommit => 1 });
# Daemonize of configured # Daemonize of configured
if ( $pa_config{"daemon"} eq "1" ) { if ( $pa_config{"daemon"} eq "1" ) {
@ -92,7 +93,7 @@ while ( 1 ){
sub pandora_recon_subsystem { sub pandora_recon_subsystem {
# Init vars # Init vars
my $pa_config = $_[0]; my $pa_config = $_[0];
my $dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 }); my $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 });
my $server_id = dame_server_id($pa_config, $pa_config->{'servername'}."_Recon", $dbh); my $server_id = dame_server_id($pa_config, $pa_config->{'servername'}."_Recon", $dbh);
my $query_sql; # for use in SQL my $query_sql; # for use in SQL
my $exec_sql; # for use in SQL my $exec_sql; # for use in SQL
@ -136,7 +137,7 @@ sub pandora_exec_task {
my $query_sql; # for use in SQL my $query_sql; # for use in SQL
my $exec_sql; # for use in SQL my $exec_sql; # for use in SQL
my @sql_data; # for use in SQL my @sql_data; # for use in SQL
my $dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 }); my $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306", $pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 });
$query_sql = "SELECT * FROM trecon_task WHERE id_rt = $id_task"; $query_sql = "SELECT * FROM trecon_task WHERE id_rt = $id_task";
$exec_sql = $dbh->prepare($query_sql); $exec_sql = $dbh->prepare($query_sql);

View File

@ -71,7 +71,7 @@ sub pandora_dataserver {
my @file_list; my @file_list;
my $onefile; # Each item of incoming directory my $onefile; # Each item of incoming directory
my $agent_filename; my $agent_filename;
my $dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306",$pa_config->{"dbuser"}, $pa_config->{"dbpass"},{ RaiseError => 1, AutoCommit => 1 }); my $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306",$pa_config->{"dbuser"}, $pa_config->{"dbpass"},{ RaiseError => 1, AutoCommit => 1 });
while ( 1 ) { # Pandora module processor main loop while ( 1 ) { # Pandora module processor main loop
opendir(DIR, $pa_config->{'incomingdir'} ) or die "[FATAL] Cannot open Incoming data directory at $pa_config->{'incomingdir'}: $!"; opendir(DIR, $pa_config->{'incomingdir'} ) or die "[FATAL] Cannot open Incoming data directory at $pa_config->{'incomingdir'}: $!";
@ -148,7 +148,7 @@ sub pandora_dataserver {
sub pandora_keepalived { sub pandora_keepalived {
my $pa_config = $_[0]; my $pa_config = $_[0];
my $dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306",$pa_config->{"dbuser"}, $pa_config->{"dbpass"},{ RaiseError => 1, AutoCommit => 1 }); my $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306",$pa_config->{"dbuser"}, $pa_config->{"dbpass"},{ RaiseError => 1, AutoCommit => 1 });
while ( 1 ){ while ( 1 ){
sleep $pa_config->{"server_threshold"}; sleep $pa_config->{"server_threshold"};
threads->yield; threads->yield;
@ -304,15 +304,20 @@ sub procesa_datos {
$agent_version = $datos->{'version'}; $agent_version = $datos->{'version'};
$interval = $datos->{'interval'}; $interval = $datos->{'interval'};
$os_version = $datos->{'os_version'}; $os_version = $datos->{'os_version'};
# Set default interval if not defined in agent (This is very very odd whatever!).
if (!defined($interval)){
$interval = 300;
}
# Check for parameteres, not all version agents gives the same parameters ! # Check for parameteres, not all version agents gives the same parameters !
if (length($interval) == 0){ if (length($interval) == 0){
$interval = -1; # No update for interval ! $interval = -1; # No update for interval !
} }
if (length($os_version) == 0){ if ((!defined ($os_version)) || (length($os_version) == 0)){
$os_version = "N/A"; $os_version = "N/A";
} }
if (defined $agent_name){ if (defined $agent_name){
$id_agente = dame_agente_id($pa_config,$agent_name,$dbh); $id_agente = dame_agente_id($pa_config,$agent_name,$dbh);

View File

@ -110,7 +110,7 @@ sub pandora_snmptrapd {
} }
} }
# open database, only ONCE. We pass reference to DBI handler ($dbh) to all subprocess # open database, only ONCE. We pass reference to DBI handler ($dbh) to all subprocess
my $dbh = DBI->connect("DBI:mysql:pandora:$pa_config->{'dbhost'}:3306",$pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 }); my $dbh = DBI->connect("DBI:mysql:$pa_config->{'dbname'}:$pa_config->{'dbhost'}:3306",$pa_config->{'dbuser'}, $pa_config->{'dbpass'}, { RaiseError => 1, AutoCommit => 1 });
# Main loop for reading file # Main loop for reading file
while ( 1 ){ while ( 1 ){

View File

@ -6,7 +6,7 @@
# if not given, it takes localhost. It's preferable to setup one # if not given, it takes localhost. It's preferable to setup one
# because machine name could change by some reason. # because machine name could change by some reason.
#servername servername endor
# incomingdir: Defines directory where incoming data packets are stored # incomingdir: Defines directory where incoming data packets are stored
# You could set directory relative to base path or absolute, starting with / # You could set directory relative to base path or absolute, starting with /
@ -23,9 +23,13 @@ log_file /var/log/pandora_server.log
errorlog_file /var/log/pandora_server.error errorlog_file /var/log/pandora_server.error
# dbname: Database name (pandora by default
dbname pandora13
# dbuser: Database user name (pandora by default) # dbuser: Database user name (pandora by default)
dbuser root dbuser pandora
# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground # daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground
# this could be setup on command line with -D option # this could be setup on command line with -D option
@ -34,7 +38,7 @@ dbuser root
# dbpass: Database password # dbpass: Database password
dbpass none dbpass pandora
# dbhost: Database hostname or IP address # dbhost: Database hostname or IP address
@ -43,11 +47,11 @@ dbhost localhost
# verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy) # verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy)
# -v in command line (verbose) or -d (debug) # -v in command line (verbose) or -d (debug)
verbosity 10 verbosity 1
# Alert threshold # Alert threshold
alert_threshold 60 alert_threshold 45
# Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup) # Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup)
@ -76,13 +80,13 @@ reconserver 1
# Network timeout (in seconds) for timeout in network connections for Network agents # Network timeout (in seconds) for timeout in network connections for Network agents
network_timeout 5 network_timeout 8
# Server keepalive (in seconds) # Server keepalive (in seconds)
server_keepalive 30 server_keepalive 50
# Server Threshold: defines number of seconds of main loop (in sec) # Server Threshold: defines number of seconds of main loop (in sec)
server_threshold 10 server_threshold 15

View File

@ -2,7 +2,7 @@
# Pandora Data Server startup script # Pandora Data Server startup script
# Sancho Lerena, <slerena@gmail.com> # Sancho Lerena, <slerena@gmail.com>
# Linux Version (generic) # Linux Version (generic)
# v1.2 (Ene/2006) # v1.3 (May/2006)
# Configurable path and filenames # Configurable path and filenames
PANDORA_HOME="/usr/share/pandora_server" PANDORA_HOME="/usr/share/pandora_server"

View File

@ -1,8 +1,8 @@
#!/bin/sh #!/bin/bash
# Startup script for Pandora SNMP Console # Startup script for Pandora SNMP Console
# Sancho Lerena, <slerena@gmail.com> # Sancho Lerena, <slerena@gmail.com>
# Linux Version(generico) # Linux Version(generic)
# v1.2 (Ene/2006) # v1.3 (May/2006)
# Compatible with NetSNMP 5.1 or higher # Compatible with NetSNMP 5.1 or higher