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__);
use lib $lib;
use WardenClientCommon;
################################################################################
# VARIABLES
################################################################################
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
# Issue #596 - Should be removed in Warden client 3.0.
# check if obsolete event attribute 'Priority' is used
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
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
......@@ -68,10 +86,8 @@ sub saveNewEvent
SOAP::Data->name(TIMEOUT => $timeout)
)
);
} # end of eval
or WardenClientCommon::errMsg('Unknown error when creating SOAP data object, ' . $@);
} or WardenClientCommon::errMsg("Error when creating SOAP data object: " . $@);
# c2s() returns undef on fail
my $result = WardenClientCommon::c2s("saveNewEvent", $event);
defined $result ? return 1 : return 0;
......@@ -84,109 +100,84 @@ sub saveNewEvent
#-------------------------------------------------------------------------------
sub getNewEvents
{
my @events;
my $warden_path = shift;
my $requested_type = shift;
my $vardir = $warden_path . "/var/";
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 $id_file = $vardir . $caller_name . "-". ($requested_type || "any") . ".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;
if (-e $id_file) {
open(ID, "< $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
foreach(<ID>) {
$last_id = $_;
}
close ID;
} else {
# c2s() returns undef on fail
my $response = WardenClientCommon::c2s($WardenClientConf::URI, $WardenClientConf::SSL_KEY_FILE, $WardenClientConf::SSL_CERT_FILE, $WardenClientConf::SSL_CA_FILE, "getLastId");
defined $response or return; # receive data or return undef
$last_id = $response->result;
open(ID, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
print ID $last_id;
close ID;
my $requested_type = shift;
# set name of ID file based on caller name (each client application)
my ($caller_name) = ($FindBin::Script =~ /^(.*)$/); # untaint
my $id_file = $VAR . $caller_name . "-". ($requested_type || "any") . ".id";
# get last event ID
my $last_id;
if (-e $id_file) { # get ID from ID file
open(FILE, "< $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
foreach(<FILE>) {
$last_id = $_;
}
close FILE;
} else { # get ID from Warden server database and print it into the ID file
my $response = WardenClientCommon::c2s("getLastId");
defined $response or return;
$last_id = $response->result;
open(FILE, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
print FILE $last_id;
close FILE;
}
#-----------------------------------------------------------------------------
# get new events from warden server DB based on gathered last ID
my $request_data;
eval {
# create SOAP data object
$request_data = SOAP::Data->name(
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 => $WardenClientConf::MAX_RCV_EVENTS_LIMIT)
)
# prepare SOAP data object for Warden server
my $request_data;
eval {
$request_data = SOAP::Data->name(
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 => $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
my $response = WardenClientCommon::c2s($WardenClientConf::URI, $WardenClientConf::SSL_KEY_FILE, $WardenClientConf::SSL_CERT_FILE, $WardenClientConf::SSL_CA_FILE, "getNewEvents", $request_data);
defined $response or return; # connect to warden server or return undef
# parse returned SOAP data object
my ($id, $hostname, $service, $detected, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout);
# call server method getNewEvents
my $response = WardenClientCommon::c2s("getNewEvents", $request_data);
defined $response or return;
my @response_list = $response->valueof('/Envelope/Body/getNewEventsResponse/event/');
while (scalar @response_list) {
my $response_data = shift(@response_list);
my @event;
# parse items of one event
$id = $response_data->{'ID'};
$hostname = $response_data->{'HOSTNAME'};
$service = $response_data->{'SERVICE'};
$detected = $response_data->{'DETECTED'};
$type = $response_data->{'TYPE'};
$source_type = $response_data->{'SOURCE_TYPE'};
$source = $response_data->{'SOURCE'};
$target_proto = $response_data->{'TARGET_PROTO'};
$target_port = $response_data->{'TARGET_PORT'};
$attack_scale = $response_data->{'ATTACK_SCALE'};
$note = $response_data->{'NOTE'};
$priority = $response_data->{'PRIORITY'};
$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);
push (@events, \@event);
# 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 @response_list = $response->valueof('/Envelope/Body/getNewEventsResponse/event/');
while (scalar @response_list) {
my $response_data = shift(@response_list);
my @event;
$id = $response_data->{'ID'};
$hostname = $response_data->{'HOSTNAME'};
$service = $response_data->{'SERVICE'};
$detected = $response_data->{'DETECTED'};
$type = $response_data->{'TYPE'};
$source_type = $response_data->{'SOURCE_TYPE'};
$source = $response_data->{'SOURCE'};
$target_proto = $response_data->{'TARGET_PROTO'};
$target_port = $response_data->{'TARGET_PORT'};
$attack_scale = $response_data->{'ATTACK_SCALE'};
$note = $response_data->{'NOTE'};
$priority = $response_data->{'PRIORITY'};
$timeout = $response_data->{'TIMEOUT'};
@event = ($id, $hostname, $service, $detected, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout);
push (@events, \@event);
# set maximum received ID from current batch
if ($id > $last_id) {
$last_id = $id;
}
} #end of while loop
# write last return ID
if (defined $last_id) { # must be defined for first check ID
open(ID, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
print ID $last_id;
close ID;
# set maximum received ID from current batch
if ($id > $last_id) {
$last_id = $id;
}
}
return @events;
# print last returned event ID into ID file
if (defined $last_id) {
open(FILE, "> $id_file") or return WardenClientCommon::errMsg("Cannot open ID file $id_file: $!");
print FILE $last_id;
close FILE;
}
return @events;
} # End of getNewEvents
......@@ -202,10 +193,10 @@ sub getClientInfo
# parse server response (SOAP data object)
my @clients;
my @response_list = $response->valueof('/Envelope/Body/getClientInfoResponse/client/');
while (scalar @response_list) {
my $response_data = shift(@response_list);
my %client;
$client{'client_id'} = $response_data->{'CLIENT_ID'} ;
$client{'hostname'} = $response_data->{'HOSTNAME'};
$client{'registered'} = $response_data->{'REGISTERED'};
......@@ -216,6 +207,7 @@ sub getClientInfo
$client{'receive_own_events'} = $response_data->{'RECEIVE_OWN_EVENTS'};
$client{'description_tags'} = $response_data->{'DESCRIPTION_TAGS'};
$client{'ip_net_client'} = $response_data->{'IP_NET_CLIENT'};
push (@clients,\%client);
}
......
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