Skip to content
Snippets Groups Projects
Commit 8066fbdc authored by Tomáš Plesník's avatar Tomáš Plesník
Browse files

upraveno volani funkce c2s; odstraneno nacitani modulu z predavane cesty;...

upraveno volani funkce c2s; odstraneno nacitani modulu z predavane cesty; pridano jednotne nacitani konfiguracniho souboru pro cely modul (pro vsechny funkce); uprava formatovani kodu; uprava error a warning hlasek; uprava komentaru
parent 95d6cb74
No related branches found
No related tags found
No related merge requests found
...@@ -15,7 +15,25 @@ my $lib = File::Basename::dirname(__FILE__); ...@@ -15,7 +15,25 @@ my $lib = File::Basename::dirname(__FILE__);
use lib $lib; use lib $lib;
use WardenClientCommon; use WardenClientCommon;
################################################################################
# VARIABLES
################################################################################
our $VERSION = "2.2"; our $VERSION = "2.2";
our $VAR = "$lib/../var";
################################################################################
# READING OF CONFIGURATION FILE
################################################################################
# load server configuration
my $etc = "$lib/../etc";
my $conf_file = "$etc/warden-client.conf";
WardenClientCommon::loadConf($conf_file);
################################################################################
# FUNCTIONS
################################################################################
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
...@@ -42,11 +60,11 @@ sub saveNewEvent ...@@ -42,11 +60,11 @@ sub saveNewEvent
# Issue #596 - Should be removed in Warden client 3.0. # Issue #596 - Should be removed in Warden client 3.0.
# check if obsolete event attribute 'Priority' is used # check if obsolete event attribute 'Priority' is used
if ((defined $priority) && ($priority >= 0)) { if ((defined $priority) && ($priority >= 0)) {
WardenClientCommon::errMsg('Event attribute "Priority" is now obsolete and will be removed in Warden client 3.0', 'warn'); WardenClientCommon::errMsg("Event attribute 'Priority' is now obsolete and will be removed in Warden client v.3.0", "warn");
} }
# check if obsolete event attribute 'Timeout' is used # check if obsolete event attribute 'Timeout' is used
if ((defined $timeout) && ($timeout >= 0)) { if ((defined $timeout) && ($timeout >= 0)) {
WardenClientCommon::errMsg('Event attribute "Timeout" is now obsolete and will be removed in Warden client 3.0', 'warn'); WardenClientCommon::errMsg("Event attribute 'Timeout' is now obsolete and will be removed in Warden client v.3.0", "warn");
} }
# end of Issue #596 # end of Issue #596
...@@ -68,10 +86,8 @@ sub saveNewEvent ...@@ -68,10 +86,8 @@ sub saveNewEvent
SOAP::Data->name(TIMEOUT => $timeout) SOAP::Data->name(TIMEOUT => $timeout)
) )
); );
} # end of eval } or WardenClientCommon::errMsg("Error when creating SOAP data object: " . $@);
or WardenClientCommon::errMsg('Unknown error when creating SOAP data object, ' . $@);
# c2s() returns undef on fail
my $result = WardenClientCommon::c2s("saveNewEvent", $event); my $result = WardenClientCommon::c2s("saveNewEvent", $event);
defined $result ? return 1 : return 0; defined $result ? return 1 : return 0;
...@@ -84,76 +100,53 @@ sub saveNewEvent ...@@ -84,76 +100,53 @@ sub saveNewEvent
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
sub getNewEvents sub getNewEvents
{ {
my @events;
my $warden_path = shift;
my $requested_type = shift; my $requested_type = shift;
my $vardir = $warden_path . "/var/"; # set name of ID file based on caller name (each client application)
my $etcdir = $warden_path . "/etc/";
my $libdir = $warden_path . "/lib/";
require $libdir . "WardenClientConf.pm";
require $libdir . "WardenClientCommon.pm";
# read the config file
my $conf_file = $etcdir . "warden-client.conf";
WardenClientConf::loadConf($conf_file);
# set name of ID file for each client aplication
my ($caller_name) = ($FindBin::Script =~ /^(.*)$/); # untaint my ($caller_name) = ($FindBin::Script =~ /^(.*)$/); # untaint
my $id_file = $vardir . $caller_name . "-". ($requested_type || "any") . ".id"; my $id_file = $VAR . $caller_name . "-". ($requested_type || "any") . ".id";
#----------------------------------------------------------------------------- # get last event ID
# get last ID from ID file (if exist) or
# 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) { # get ID from ID file
open(ID, "< $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!"); open(FILE, "< $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
foreach(<ID>) { foreach(<FILE>) {
$last_id = $_; $last_id = $_;
} }
close ID; close FILE;
} else { } else { # get ID from Warden server database and print it into the ID file
# c2s() returns undef on fail my $response = WardenClientCommon::c2s("getLastId");
my $response = WardenClientCommon::c2s($WardenClientConf::URI, $WardenClientConf::SSL_KEY_FILE, $WardenClientConf::SSL_CERT_FILE, $WardenClientConf::SSL_CA_FILE, "getLastId"); defined $response or return;
defined $response or return; # receive data or return undef
$last_id = $response->result; $last_id = $response->result;
open(ID, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!"); open(FILE, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
print ID $last_id; print FILE $last_id;
close ID; close FILE;
} }
#----------------------------------------------------------------------------- # prepare SOAP data object for Warden server
# get new events from warden server DB based on gathered last ID
my $request_data; my $request_data;
eval { eval {
# create SOAP data object
$request_data = SOAP::Data->name( $request_data = SOAP::Data->name(
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 => $WardenClientConf::MAX_RCV_EVENTS_LIMIT) SOAP::Data->name(MAX_RCV_EVENTS_LIMIT => $WardenClientCommon::MAX_RCV_EVENTS_LIMIT)
) )
) )
} or return errMsg('Unknown error when creating SOAP data object, ' . $@); } or return WardenClientCommon::errMsg('Unknown error when creating SOAP data object, ' . $@);
# call server method getNewEvents # call server method getNewEvents
my $response = WardenClientCommon::c2s($WardenClientConf::URI, $WardenClientConf::SSL_KEY_FILE, $WardenClientConf::SSL_CERT_FILE, $WardenClientConf::SSL_CA_FILE, "getNewEvents", $request_data); my $response = WardenClientCommon::c2s("getNewEvents", $request_data);
defined $response or return; # connect to warden server or return undef defined $response or return;
# parse returned SOAP data object # parse server response (SOAP data object)
my @events;
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);
my @response_list = $response->valueof('/Envelope/Body/getNewEventsResponse/event/'); my @response_list = $response->valueof('/Envelope/Body/getNewEventsResponse/event/');
while (scalar @response_list) { while (scalar @response_list) {
my $response_data = shift(@response_list); my $response_data = shift(@response_list);
my @event; my @event;
# parse items of one event
$id = $response_data->{'ID'}; $id = $response_data->{'ID'};
$hostname = $response_data->{'HOSTNAME'}; $hostname = $response_data->{'HOSTNAME'};
$service = $response_data->{'SERVICE'}; $service = $response_data->{'SERVICE'};
...@@ -168,7 +161,6 @@ sub getNewEvents ...@@ -168,7 +161,6 @@ sub getNewEvents
$priority = $response_data->{'PRIORITY'}; $priority = $response_data->{'PRIORITY'};
$timeout = $response_data->{'TIMEOUT'}; $timeout = $response_data->{'TIMEOUT'};
# push new event from warden server into @events which is returned
@event = ($id, $hostname, $service, $detected, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout); @event = ($id, $hostname, $service, $detected, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout);
push (@events, \@event); push (@events, \@event);
...@@ -176,17 +168,16 @@ sub getNewEvents ...@@ -176,17 +168,16 @@ sub getNewEvents
if ($id > $last_id) { if ($id > $last_id) {
$last_id = $id; $last_id = $id;
} }
} #end of while loop }
# write last return ID # print last returned event ID into ID file
if (defined $last_id) { # must be defined for first check ID if (defined $last_id) {
open(ID, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!"); open(FILE, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
print ID $last_id; print FILE $last_id;
close ID; close FILE;
} }
return @events; return @events;
} # End of getNewEvents } # End of getNewEvents
...@@ -202,10 +193,10 @@ sub getClientInfo ...@@ -202,10 +193,10 @@ sub getClientInfo
# parse server response (SOAP data object) # parse server response (SOAP data object)
my @clients; my @clients;
my @response_list = $response->valueof('/Envelope/Body/getClientInfoResponse/client/'); my @response_list = $response->valueof('/Envelope/Body/getClientInfoResponse/client/');
while (scalar @response_list) { while (scalar @response_list) {
my $response_data = shift(@response_list); my $response_data = shift(@response_list);
my %client; my %client;
$client{'client_id'} = $response_data->{'CLIENT_ID'} ; $client{'client_id'} = $response_data->{'CLIENT_ID'} ;
$client{'hostname'} = $response_data->{'HOSTNAME'}; $client{'hostname'} = $response_data->{'HOSTNAME'};
$client{'registered'} = $response_data->{'REGISTERED'}; $client{'registered'} = $response_data->{'REGISTERED'};
...@@ -216,6 +207,7 @@ sub getClientInfo ...@@ -216,6 +207,7 @@ sub getClientInfo
$client{'receive_own_events'} = $response_data->{'RECEIVE_OWN_EVENTS'}; $client{'receive_own_events'} = $response_data->{'RECEIVE_OWN_EVENTS'};
$client{'description_tags'} = $response_data->{'DESCRIPTION_TAGS'}; $client{'description_tags'} = $response_data->{'DESCRIPTION_TAGS'};
$client{'ip_net_client'} = $response_data->{'IP_NET_CLIENT'}; $client{'ip_net_client'} = $response_data->{'IP_NET_CLIENT'};
push (@clients,\%client); push (@clients,\%client);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment