diff --git a/src/warden-client/lib/WardenClientCommon.pm b/src/warden-client/lib/WardenClientCommon.pm new file mode 100644 index 0000000000000000000000000000000000000000..a5f6b166903c918767965b5afdc6a2c653e83189 --- /dev/null +++ b/src/warden-client/lib/WardenClientCommon.pm @@ -0,0 +1,82 @@ +#!/usr/bin/perl -w + +package WardenClientCommon; + +require Exporter; + +use strict; +use Carp; + +use WardenClientConf qw($LOG_VERBOSE); + +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(errMsg c2s); + +#------------------------------------------------------------------------------- +# errMsg - print error message and die +#------------------------------------------------------------------------------- +sub errMsg +{ + my $msg = "Error message: " . shift; + + if ($LOG_VERBOSE) { # user wants to log debug information + $msg .= "\nStack info: " . Carp::longmess(); + } + + die($msg . "\n"); +} # End of errMsg + + +#------------------------------------------------------------------------------- +# c2s - connect to server, send request and receive response +#------------------------------------------------------------------------------- +sub c2s +{ + my $uri = shift; + my $ssl_key_file = shift; + my $ssl_cert_file = shift; + my $ssl_ca_file = shift; + my $method = shift; + my $data = shift; + + my $client; + my ($server, $port, $service) = $uri =~ /https:\/\/(.+)\:(\d+)\/(.+)/; + if (!($client = SOAP::Transport::HTTP::Client->new())) { + errMsg("Sorry, unable to create socket: " . &SOAP::Transport::HTTP::Client::errstr) + } + $client->timeout(10); + $client->ssl_opts(verify_hostname => 1, + SSL_use_cert => 1, + SSL_verify_mode => 0x02, + SSL_key_file => $ssl_key_file, + SSL_cert_file => $ssl_cert_file, + SSL_ca_file => $ssl_ca_file); + + # setting of URI and serialize SOAP envelope and data object + my $soap = SOAP::Lite->uri($service)->proxy($uri); + my $envelope; + if (!defined $data) { + $envelope = $soap->serializer->envelope(method => $method); + } else { + $envelope = $soap->serializer->envelope(method => $method, $data); + } + + # setting of TCP URI and send serialized SOAP envelope and data + my $server_uri = "https://$server:$port/$service"; + my $result = $client->send_receive(envelope => $envelope, endpoint => $server_uri); + + # check server response + if (!defined $result) { + errMsg("Error: server returned empty response." . "\n" . "Problem with used SSL ceritificates or Warden server at $server:$port is down."); + } else { + # deserialized response from server -> create SOAP envelope and data object + my $response; + + eval { + $response = $soap->deserializer->deserialize($result); + } or errMsg($@ . "Received data: " . $result); + # check SOAP fault status + $response->fault ? errMsg("Server sent error message:: " . $response->faultstring) : return $response; + } +} + diff --git a/src/warden-client/lib/WardenClientConf.pm b/src/warden-client/lib/WardenClientConf.pm index 26340f9f23c1cfa97f57ed052715a41d641c2b8d..3872339113905038c92b798a4ffb530c0fcd25db 100755 --- a/src/warden-client/lib/WardenClientConf.pm +++ b/src/warden-client/lib/WardenClientConf.pm @@ -9,7 +9,10 @@ package WardenClientConf; use strict; -use Carp; +require Exporter; + +our @ISA = qw(Exporter); +our @EXPORT_OK = qw($URI $SSL_KEY_FILE $SSL_CERT_FILE $SSL_CA_FILE $MAX_RCV_EVENTS_LIMIT $LOG_STDERR $LOG_SYSLOG $LOG_SYSLOG_FACILITY $LOG_VERBOSE); # preset of default variables our $URI = undef; @@ -17,7 +20,7 @@ our $SSL_KEY_FILE = undef; our $SSL_CERT_FILE = undef; our $SSL_CA_FILE = undef; our $MAX_RCV_EVENTS_LIMIT = undef; -our $LOG_STDERR = 0; +our $LOG_STDERR = 1; our $LOG_SYSLOG = 0; our $LOG_SYSLOG_FACILITY = "local7"; our $LOG_VERBOSE = 0; @@ -25,92 +28,16 @@ our $LOG_VERBOSE = 0; our $VERSION = "2.0"; -#------------------------------------------------------------------------------- -# loadConf - load variables from configuration file -#------------------------------------------------------------------------------- sub loadConf -{ +{ my $conf_file = shift; - # load set variables by user + # load configuration variables set by user unless (do $conf_file) { die("Errors in config file '$conf_file': $@") if $@; die("Can't read config file '$conf_file': $!") unless defined $_; # if $_ defined, it's retvalue of last statement of conf, for which we don't care } - - return ($URI, $SSL_KEY_FILE, $SSL_CERT_FILE, $SSL_CA_FILE, $MAX_RCV_EVENTS_LIMIT, $LOG_STDERR, $LOG_SYSLOG, $LOG_SYSLOG_FACILITY); - -} # End of loadConf - -#------------------------------------------------------------------------------- -# errMsg - print error message and die -#------------------------------------------------------------------------------- -sub errMsg -{ - my $msg = "Error message: " . shift; - - if ($LOG_VERBOSE) { # user wants to log debug information - $msg .= "\nStack info: " . Carp::longmess(); - } - - die($msg . "\n"); -} # End of errMsg - - -#------------------------------------------------------------------------------- -# c2s - connect to server, send request and receive response -#------------------------------------------------------------------------------- -sub c2s -{ - my $uri = shift; - my $ssl_key_file = shift; - my $ssl_cert_file = shift; - my $ssl_ca_file = shift; - my $method = shift; - my $data = shift; - - my $client; - my ($server, $port, $service) = $uri =~ /https:\/\/(.+)\:(\d+)\/(.+)/; - if (!($client = SOAP::Transport::HTTP::Client->new())) { - errMsg("Sorry, unable to create socket: " . &SOAP::Transport::HTTP::Client::errstr) - } - $client->timeout(10); - $client->ssl_opts(verify_hostname => 1, - SSL_use_cert => 1, - SSL_verify_mode => 0x02, - SSL_key_file => $ssl_key_file, - SSL_cert_file => $ssl_cert_file, - SSL_ca_file => $ssl_ca_file); - - # setting of URI and serialize SOAP envelope and data object - my $soap = SOAP::Lite->uri($service)->proxy($uri); - my $envelope; - if (!defined $data) { - $envelope = $soap->serializer->envelope(method => $method); - } else { - $envelope = $soap->serializer->envelope(method => $method, $data); - } - - # setting of TCP URI and send serialized SOAP envelope and data - my $server_uri = "https://$server:$port/$service"; - my $result = $client->send_receive(envelope => $envelope, endpoint => $server_uri); - - # check server response - if (!defined $result) { - errMsg("Error: server returned empty response." . "\n" . "Problem with used SSL ceritificates or Warden server at $server:$port is down."); - } else { - # deserialized response from server -> create SOAP envelope and data object - my $response; - - eval { - $response = $soap->deserializer->deserialize($result); - } or errMsg($@ . "Received data: " . $result); - # check SOAP fault status - $response->fault ? errMsg("Server sent error message:: " . $response->faultstring) : return $response; - } } - - 1; diff --git a/src/warden-client/lib/WardenClientReceive.pm b/src/warden-client/lib/WardenClientReceive.pm index 7cb6b476269a90df5bdadc8e288b0faccbf71ba0..20a139ac922c3e2d8f5f1ff81baa48d6e9af4f6c 100755 --- a/src/warden-client/lib/WardenClientReceive.pm +++ b/src/warden-client/lib/WardenClientReceive.pm @@ -13,19 +13,10 @@ use SOAP::Lite; use IO::Socket::SSL qw(debug1); use SOAP::Transport::HTTP; use FindBin; -# use Carp; use Sys::Syslog; -our $VERSION = "2.0"; - -#----- global configuration variables - default initialization ----------------- -our $LOG_STDERR = 1; - -our $LOG_SYSLOG = 0; -our $LOG_SYSLOG_FACILITY; -our $LOG_VERBOSE = 0; -#----- end of configuration variables ------------------------------------------ +our $VERSION = "2.0"; #------------------------------------------------------------------------------- # getNewEvents - get new events from warden server greater than last received ID @@ -43,11 +34,15 @@ sub getNewEvents my $etcdir = $warden_path . "/etc/"; my $libdir = $warden_path . "/lib/"; + # use lib "/asdf/aasdf"; # cesta do lib/ adresare wardenu + # use WardenClientConf qw($URI $SSL_KEY_FILE $SSL_CERT_FILE $SSL_CA_FILE $MAX_RCV_EVENTS_LIMIT $LOG_STDERR $LOG_SYSLOG $LOG_SYSLOG_FACILITY $LOG_VERBOSE); + require $libdir . "WardenClientConf.pm"; + # use WardenClientCommon qw (errMsg c2s); + require $libdir . "WardenClientCommon.pm" + # read the config file - require $libdir . "WardenClientConf.pm"; my $conf_file = $etcdir . "warden-client.conf"; - my ($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, $max_rcv_events_limit); - ($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, $max_rcv_events_limit, $LOG_STDERR, $LOG_SYSLOG, $LOG_SYSLOG_FACILITY) = WardenClientConf::loadConf($conf_file); + WardenClientConf::loadConf($conf_file); # set name of ID file for each client aplication my $caller_name = $FindBin::Script; @@ -58,15 +53,15 @@ sub getNewEvents # get last ID from warden server DB and save it into ID file my $last_id; if (-e $id_file) { - open(ID, "< $id_file") || WardenClientConf::errMsg("Cannot open ID file $id_file: $!"); + open(ID, "< $id_file") || errMsg("Cannot open ID file $id_file: $!"); foreach(<ID>) { $last_id = $_; } close ID; } else { - my $response = WardenClientConf::c2s($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, "getLastId"); + my $response = c2s($URI, $SSL_KEY_FILE, $SSL_CERT_FILE, $SSL_CA_FILE, "getLastId"); $last_id = $response->result; - open(ID, "> $id_file") || WardenClientConf::errMsg("Cannot open ID file $id_file: $!"); + open(ID, "> $id_file") || errMsg("Cannot open ID file $id_file: $!"); print ID $last_id; close ID; } @@ -79,12 +74,12 @@ sub getNewEvents request => \SOAP::Data->value( SOAP::Data->name(REQUESTED_TYPE => $requested_type), SOAP::Data->name(LAST_ID => $last_id), - SOAP::Data->name(MAX_RCV_EVENTS_LIMIT => $max_rcv_events_limit) + SOAP::Data->name(MAX_RCV_EVENTS_LIMIT => $MAX_RCV_EVENTS_LIMIT) ) ); # call server method getNewEvents - my $response = WardenClientConf::c2s($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, "getNewEvents", $request_data); + my $response = c2s($URI, $SSL_KEY_FILE, $SSL_CERT_FILE, $SSL_CA_FILE, "getNewEvents", $request_data); # parse returned SOAP data object my ($id, $hostname, $service, $detected, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout); @@ -120,14 +115,14 @@ sub getNewEvents # write last return ID if (defined $last_id) { # must be defined for first check ID - open(ID, "> $id_file") || WardenClientConf::errMsg("Cannot open ID file $id_file: $!"); + open(ID, "> $id_file") || errMsg("Cannot open ID file $id_file: $!"); print ID $last_id; close ID; } } # End of eval block or do { - - if ($LOG_STDERR) { + + if ($LOG_STDERR) { print STDERR "Warden-client unexpected end in eval block.\n" . $@ . "\n"; }