Skip to content
Snippets Groups Projects
Commit 5b557ca0 authored by Jan Soukal's avatar Jan Soukal
Browse files

rozpracovana funkcionalita oddelujici nacitani konfiguraku (loadConf a...

rozpracovana funkcionalita oddelujici nacitani konfiguraku (loadConf a konfiguracni promenne v WardenClientConf) a provozni funkce (errMsg a c2s v WardenClientCommon)
parent 39adb9f2
No related branches found
No related tags found
No related merge requests found
#!/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;
}
}
...@@ -9,7 +9,10 @@ ...@@ -9,7 +9,10 @@
package WardenClientConf; package WardenClientConf;
use strict; 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 # preset of default variables
our $URI = undef; our $URI = undef;
...@@ -17,7 +20,7 @@ our $SSL_KEY_FILE = undef; ...@@ -17,7 +20,7 @@ our $SSL_KEY_FILE = undef;
our $SSL_CERT_FILE = undef; our $SSL_CERT_FILE = undef;
our $SSL_CA_FILE = undef; our $SSL_CA_FILE = undef;
our $MAX_RCV_EVENTS_LIMIT = undef; our $MAX_RCV_EVENTS_LIMIT = undef;
our $LOG_STDERR = 0; our $LOG_STDERR = 1;
our $LOG_SYSLOG = 0; our $LOG_SYSLOG = 0;
our $LOG_SYSLOG_FACILITY = "local7"; our $LOG_SYSLOG_FACILITY = "local7";
our $LOG_VERBOSE = 0; our $LOG_VERBOSE = 0;
...@@ -25,92 +28,16 @@ our $LOG_VERBOSE = 0; ...@@ -25,92 +28,16 @@ our $LOG_VERBOSE = 0;
our $VERSION = "2.0"; our $VERSION = "2.0";
#-------------------------------------------------------------------------------
# loadConf - load variables from configuration file
#-------------------------------------------------------------------------------
sub loadConf sub loadConf
{ {
my $conf_file = shift; my $conf_file = shift;
# load set variables by user # load configuration variables set by user
unless (do $conf_file) { unless (do $conf_file) {
die("Errors in config file '$conf_file': $@") if $@; die("Errors in config file '$conf_file': $@") if $@;
die("Can't read config file '$conf_file': $!") unless defined $_; 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 # 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; 1;
...@@ -13,19 +13,10 @@ use SOAP::Lite; ...@@ -13,19 +13,10 @@ use SOAP::Lite;
use IO::Socket::SSL qw(debug1); use IO::Socket::SSL qw(debug1);
use SOAP::Transport::HTTP; use SOAP::Transport::HTTP;
use FindBin; use FindBin;
# use Carp;
use Sys::Syslog; 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; our $VERSION = "2.0";
#----- end of configuration variables ------------------------------------------
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# getNewEvents - get new events from warden server greater than last received ID # getNewEvents - get new events from warden server greater than last received ID
...@@ -43,11 +34,15 @@ sub getNewEvents ...@@ -43,11 +34,15 @@ sub getNewEvents
my $etcdir = $warden_path . "/etc/"; my $etcdir = $warden_path . "/etc/";
my $libdir = $warden_path . "/lib/"; 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 # read the config file
require $libdir . "WardenClientConf.pm";
my $conf_file = $etcdir . "warden-client.conf"; my $conf_file = $etcdir . "warden-client.conf";
my ($uri, $ssl_key_file, $ssl_cert_file, $ssl_ca_file, $max_rcv_events_limit); 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 # set name of ID file for each client aplication
my $caller_name = $FindBin::Script; my $caller_name = $FindBin::Script;
...@@ -58,15 +53,15 @@ sub getNewEvents ...@@ -58,15 +53,15 @@ sub getNewEvents
# get last ID from warden server DB and save it into ID file # get last ID from warden server DB and save it into ID file
my $last_id; my $last_id;
if (-e $id_file) { 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>) { foreach(<ID>) {
$last_id = $_; $last_id = $_;
} }
close ID; close ID;
} else { } 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; $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; print ID $last_id;
close ID; close ID;
} }
...@@ -79,12 +74,12 @@ sub getNewEvents ...@@ -79,12 +74,12 @@ sub getNewEvents
request => \SOAP::Data->value( request => \SOAP::Data->value(
SOAP::Data->name(REQUESTED_TYPE => $requested_type), SOAP::Data->name(REQUESTED_TYPE => $requested_type),
SOAP::Data->name(LAST_ID => $last_id), 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 # 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 # parse returned SOAP data object
my ($id, $hostname, $service, $detected, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout); my ($id, $hostname, $service, $detected, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout);
...@@ -120,14 +115,14 @@ sub getNewEvents ...@@ -120,14 +115,14 @@ sub getNewEvents
# write last return ID # write last return ID
if (defined $last_id) { # must be defined for first check 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; print ID $last_id;
close ID; close ID;
} }
} # End of eval block } # End of eval block
or do { or do {
if ($LOG_STDERR) { if ($LOG_STDERR) {
print STDERR "Warden-client unexpected end in eval block.\n" . $@ . "\n"; print STDERR "Warden-client unexpected end in eval block.\n" . $@ . "\n";
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment