diff --git a/src/warden-client/lib/WardenClientConf.pm b/src/warden-client/lib/WardenClientConf.pm index 2acd29f7f9038987b8b6218c1182b2f3038b2679..26340f9f23c1cfa97f57ed052715a41d641c2b8d 100755 --- a/src/warden-client/lib/WardenClientConf.pm +++ b/src/warden-client/lib/WardenClientConf.pm @@ -9,6 +9,19 @@ package WardenClientConf; use strict; +use Carp; + +# preset of default variables +our $URI = undef; +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_SYSLOG = 0; +our $LOG_SYSLOG_FACILITY = "local7"; +our $LOG_VERBOSE = 0; + our $VERSION = "2.0"; @@ -19,17 +32,6 @@ sub loadConf { my $conf_file = shift; - # preset of default variables - our $URI = undef; - 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_SYSLOG = 0; - our $LOG_SYSLOG_FACILITY = "local7"; - our $LOG_VERBOSE = 0; - # load set variables by user unless (do $conf_file) { die("Errors in config file '$conf_file': $@") if $@; @@ -37,7 +39,78 @@ sub loadConf # 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, $LOG_VERBOSE); + 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 93ee9052c2c17db8cd08d79c22ba2a083c6811eb..7cb6b476269a90df5bdadc8e288b0faccbf71ba0 100755 --- a/src/warden-client/lib/WardenClientReceive.pm +++ b/src/warden-client/lib/WardenClientReceive.pm @@ -13,7 +13,7 @@ use SOAP::Lite; use IO::Socket::SSL qw(debug1); use SOAP::Transport::HTTP; use FindBin; -use Carp; +# use Carp; use Sys::Syslog; our $VERSION = "2.0"; @@ -27,75 +27,6 @@ our $LOG_SYSLOG_FACILITY; our $LOG_VERBOSE = 0; #----- end of configuration variables ------------------------------------------ -#------------------------------------------------------------------------------- -# 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; - } -} - - #------------------------------------------------------------------------------- # getNewEvents - get new events from warden server greater than last received ID #------------------------------------------------------------------------------- @@ -116,7 +47,7 @@ sub getNewEvents 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, $LOG_VERBOSE) = WardenClientConf::loadConf($conf_file); + ($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); # set name of ID file for each client aplication my $caller_name = $FindBin::Script; @@ -127,15 +58,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") || errMsg("Cannot open ID file $id_file: $!"); + open(ID, "< $id_file") || WardenClientConf::errMsg("Cannot open ID file $id_file: $!"); foreach(<ID>) { $last_id = $_; } close ID; } else { - my $response = c2s($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, "getLastId"); + my $response = WardenClientConf::c2s($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, "getLastId"); $last_id = $response->result; - open(ID, "> $id_file") || errMsg("Cannot open ID file $id_file: $!"); + open(ID, "> $id_file") || WardenClientConf::errMsg("Cannot open ID file $id_file: $!"); print ID $last_id; close ID; } @@ -153,7 +84,7 @@ sub getNewEvents ); # call server method getNewEvents - my $response = c2s($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, "getNewEvents", $request_data); + my $response = WardenClientConf::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); @@ -189,7 +120,7 @@ sub getNewEvents # write last return ID if (defined $last_id) { # must be defined for first check ID - open(ID, "> $id_file") || errMsg("Cannot open ID file $id_file: $!"); + open(ID, "> $id_file") || WardenClientConf::errMsg("Cannot open ID file $id_file: $!"); print ID $last_id; close ID; } diff --git a/src/warden-client/lib/WardenClientSend.pm b/src/warden-client/lib/WardenClientSend.pm index 32a9d45a93b98bf38697746e604e4ed806e342ec..c903807b926448fc87f53b30d3c662b5b006a776 100755 --- a/src/warden-client/lib/WardenClientSend.pm +++ b/src/warden-client/lib/WardenClientSend.pm @@ -12,7 +12,6 @@ use strict; use SOAP::Lite; use IO::Socket::SSL qw(debug1); use SOAP::Transport::HTTP; -use Carp; use Sys::Syslog; our $VERSION = "2.0"; #first iteration after 'port to Apache' @@ -26,69 +25,6 @@ our $LOG_SYSLOG_FACILITY; our $LOG_VERBOSE = 0; #----- end of configuration variables ------------------------------------------ -#------------------------------------------------------------------------------- -# 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 ($server, $port, $service) = $uri =~ /https:\/\/(.+)\:(\d+)\/(.+)/; - - my $client; - if (!($client = SOAP::Transport::HTTP::Client->new())) { - errMsg("Sorry, unable to create socket: " . &SOAP::Transport::HTTP::Client::errstr) - } - $client->timeout(60); - $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 = $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 = $soap->deserializer->deserialize($result); - # check SOAP fault status - $response->fault ? errMsg("Server sent error message:: " . $response->faultstring) : return 1; - } -} - - #------------------------------------------------------------------------------- # saveNewEvent - send new event from detection scripts to warden server #------------------------------------------------------------------------------- @@ -107,7 +43,7 @@ sub saveNewEvent 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, $LOG_VERBOSE) = WardenClientConf::loadConf($conf_file); + ($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); # prepare variables of event my @event = @{$event_ref}; @@ -140,7 +76,7 @@ sub saveNewEvent ) ); - $result = c2s($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, "saveNewEvent", $event); + $result = WardenClientConf::c2s($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, "saveNewEvent", $event); } # End of eval block or do {