diff --git a/src/warden-server/lib/Warden.pm b/src/warden-server/lib/Warden.pm index 35f928e6ebdfc8f2ebbffffbd8ff16fc748c2e17..e0a1c7c07a07978f7ec11dcbdb567a0644aac56b 100755 --- a/src/warden-server/lib/Warden.pm +++ b/src/warden-server/lib/Warden.pm @@ -56,18 +56,27 @@ our $DBH = DBI->connect("DBI:mysql:database=$DB_NAME;host=$DB_HOST", $DB_USER, $ ################################################################################ #------------------------------------------------------------------------------- -# write2log - writing message to syslog +# sendMsg - sent message to syslog (SYS::Syslog) and to client (SOAP::Fault) +# +# Args: (SYSLOG severity, SYSLOG msg, SOAP msg) #------------------------------------------------------------------------------- -sub write2log +sub sendMsg { - my $priority = shift; - my $msg = shift; - my $filename = File::Basename::basename($0); + my $severity = shift; + my $syslog_msg = shift; + my $soap_msg = shift; + my $filename = File::Basename::basename($0); + + if (defined $severity && defined $syslog_msg) { + Sys::Syslog::openlog($filename, "cons,pid", $FACILITY); + Sys::Syslog::syslog("$severity", "$syslog_msg"); + Sys::Syslog::closelog(); + } - Sys::Syslog::openlog($filename, "cons,pid", $FACILITY); - Sys::Syslog::syslog("$priority", "$msg"); - Sys::Syslog::closelog(); -} # End of write2log + if (defined $soap_msg) { + die SOAP::Fault->faultstring($soap_msg); + } +} # End of sendMsg #------------------------------------------------------------------------------- @@ -115,13 +124,16 @@ sub authorizeClient ORDER BY SUBSTRING_INDEX(ip_net_client,'/', -1) DESC;"); } - if (!defined $sth) { die("Cannot prepare authorization statement in $function_name: $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare authorization statement in $function_name: $DBH->errstr", + "Internal 'prepare' server error") + } $sth->execute($service_type, $client_type); my ($an, $cidr, $receive_own, $cidr_list); my $correct_ip_source = 0; my %ret; - while(($an, $cidr, $receive_own) = $sth->fetchrow()) { my $cidr_list = Net::CIDR::Lite-> new -> add($cidr); @@ -137,15 +149,17 @@ sub authorizeClient # check if client is registered if ($sth->rows == 0) { - write2log ("err", "Unauthorized access to '$function_name' from: '$ip'; CN(AN): $alt_names; used service: '$service_type' - client is not registered"); - die("Access denied - client is not registered at warden server!"); + sendMsg("err", + "Unauthorized access to function '$function_name' from: '$ip'; CN(AN): $alt_names; used service: '$service_type' - client is not registered", + "Access denied - client is not registered at warden server"); return undef; } # check if client has IP from registered CIDR if (!$correct_ip_source) { - write2log ("err", "Unauthorized access to '$function_name' from: '$ip'; CN(AN): $alt_names; used service: '$service_type' - access from bad subnet: Registered subnet '" . $ret{'cidr'} . "'"); - die("Access denied - access from unauthorized subnet!"); + sendMsg ("err", + "Unauthorized access to function '$function_name' from: '$ip'; CN(AN): $alt_names; used service: '$service_type' - access from bad subnet: Registered subnet '$ret{'cidr'}'", + "Access denied - access from unauthorized subnet"); return undef; } @@ -191,16 +205,44 @@ sub saveNewEvent my %client = authorizeClient($alt_names, $ip, $service, $client_type, $function_name); if(defined %client) { - - # if validator is configured, check validity of event attributes - TYPE - if (!exists $VALID_STRINGS{'type'} or grep $type eq $_, @{$VALID_STRINGS{'type'}}) { + if (!(exists $VALID_STRINGS{'type'} && grep $type eq $_, @{$VALID_STRINGS{'type'}})) { + sendMsg("err", + "Unknown event type - client from: '$ip'; CN(AN): $alt_names; used type: '$type'", + "Unknown event type '$type'"); + } elsif (!(exists $VALID_STRINGS{'source_type'} && grep $source_type eq $_, @{$VALID_STRINGS{'source_type'}})) { + sendMsg("err", + "Unknown source type - client from: '$ip'; CN(AN): $alt_names; used source_type: '$source_type'", + "Unknown source type '$source_type'"); + # http://my.safaribooksonline.com/book/programming/regular-expressions/9780596802837/4dot-validation-and-formatting/id2983571 + } elsif ($detected !~ /^((?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?/) { + sendMsg("err", + "Unknown detected time format - client from: '$ip'; CN(AN): $alt_names; used detected: '$detected'", + "Unknown detected time format '$detected'"); + } elsif ($target_port !~ /^\d+\z/ && defined $target_port) { + sendMsg("err", + "Unknown target port - client from: '$ip'; CN(AN): $alt_names; used target_port: '$target_port'", + "Unknown target port '$target_port'"); + } elsif ($attack_scale !~ /^\d+\z/ && defined $attack_scale) { + sendMsg("err", + "Unknown attack scale - client from: '$ip'; CN(AN): $alt_names; used attack_scale: '$attack_scale'", + "Unknown attack scale '$attack_scale'"); + } elsif ($priority !~ /^\d+\z/ && defined $priority) { + sendMsg("err", + "Unknown priority - client from: '$ip'; CN(AN): $alt_names; used priority: '$priority'", + "Unknown priority '$priority'"); + } elsif ($timeout !~ /^\d+\z/ && defined $timeout) { + sendMsg("err", + "Unknown timeout - client from: '$ip'; CN(AN): $alt_names; used timeout: '$timeout'", + "Unknown timeout '$timeout'"); + } else { $sth=$DBH->prepare("INSERT INTO events VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"); - if (!defined $sth) { die("Cannot do insert statement in $function_name: $DBH->errstr\n") } + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute(undef, $client{'dns'}, $service, $detected, $received, $type, $source_type, $source, $target_proto, $target_port, $attack_scale, $note, $priority, $timeout, $valid); return 1; - } else { - write2log ("err", "Unknown event type - client from: '$ip'; CN(AN): $alt_names; used type: '$type'"); - die("Unknown event type - client sent event with unknown type '$type'!"); } } } # END of saveNewEvent @@ -241,23 +283,39 @@ sub getNewEvents if ($client{'receive_own'} eq 't') { if ($requested_type eq '_any_') { $sth = $DBH->prepare("SELECT * FROM events WHERE type != 'test' AND id > ? AND valid = 't' ORDER BY id ASC LIMIT ?;"); - if (!defined $sth) {die("Cannot prepare ROE-ANY statement in $function_name: $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare ROE-ANY statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($last_id, $used_limit); } else { $sth = $DBH->prepare("SELECT * FROM events WHERE type != 'test' AND id > ? AND type = ? AND valid = 't' ORDER BY id ASC LIMIT ?;"); - if (!defined $sth) {die("Cannot prepare ROE statement in $function_name: $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare ROE statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($last_id, $requested_type, $used_limit); } } else { if ($requested_type eq '_any_') { $sth = $DBH->prepare("SELECT * FROM events WHERE type != 'test' AND id > ? AND valid = 't' AND hostname NOT LIKE ? ORDER BY id ASC LIMIT ?;"); - if (!defined $sth) {die("Cannot prepare ANY statement in $function_name: $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare ANY statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } my ($domain) = $cn =~ /([^\.]+\.[^\.]+)$/; $domain = '\%' . $domain; $sth->execute($last_id, $domain, $used_limit); } else { $sth = $DBH->prepare("SELECT * FROM events WHERE type != 'test' AND id > ? AND type = ? AND valid = 't' AND hostname NOT LIKE ? ORDER BY id ASC LIMIT ?;"); - if (!defined $sth) {die("Cannot prepare statement in $function_name: $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr\n", + "Internal 'prepare' server error"); + } my ($domain) = $cn =~ /([^\.]+\.[^\.]+)$/; $domain = '\%' . $domain; $sth->execute($last_id, $requested_type, $domain, $used_limit); @@ -303,9 +361,13 @@ sub getNewEvents # log sent ID of events if (scalar @events != 0) { if (scalar @ids == 1) { - write2log("info", "Sent 1 event [#$ids[0]] to '$ip' (CN(AN): $alt_names) with client limit '$max_rcv_events_limit' events"); + sendMsg("info", + "Sent 1 event [#$ids[0]] to '$ip' (CN(AN): $alt_names) with client limit '$max_rcv_events_limit' events", + undef); } else { - write2log("info", "Sent " . scalar @ids . " events [#$ids[0] - #$ids[-1]] to '$ip' (CN(AN): $alt_names) with client limit '$max_rcv_events_limit' events"); + sendMsg("info", + "Sent " . scalar @ids . " events [#$ids[0] - #$ids[-1]] to '$ip' (CN(AN): $alt_names) with client limit '$max_rcv_events_limit' events", + undef); } } return @events; @@ -322,7 +384,11 @@ sub getLastId my $function_name = 'getLastId'; my $sth = $DBH->prepare("SELECT max(id) FROM events;"); - if ( !defined $sth ) { die("Cannot prepare statement in '$function_name': $DBH->errstr\n") } + if ( !defined $sth ) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; my $result = $sth->fetchrow(); @@ -346,8 +412,9 @@ sub registerSender my $function_name = 'registerSender'; if ($local_ip ne $ip) { - write2log ("err", "Unauthorized access to '$function_name' from: '$ip' ('$cn') - access allowed only from localhost"); - die("Access denied - access allowed only from localhost!"); + sendMsg("err", + "Unauthorized access to function '$function_name' from: '$ip' ('$cn') - access allowed only from localhost", + "Access denied - access allowed only from localhost"); } else { # defined variables by method my $client_type = "s"; @@ -364,28 +431,39 @@ sub registerSender # check if sender has been already registered $sth = $DBH->prepare("SELECT registered FROM clients WHERE hostname = ? AND requestor = ? AND service = ? AND client_type = ? AND type = ? AND receive_own_events = ? AND description_tags = ? AND ip_net_client = ? LIMIT 1;"); - if (!defined $sth) {die("Cannot prepare check statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($hostname, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client); my $result = $sth->fetchrow(); # register new sender if (defined $result) { - write2log ("err", "Attempt to re-register the sender"); - die("Error - sender has already been registered at '$result'"); + sendMsg("err", + "Attempt to re-register the sender '$hostname', '$requestor', '$service', '$client_type', '$type', '$receive_own_events', '$description_tags', '$ip_net_client'", + "Sender has been already registered at '$result'"); } else { $sth = $DBH->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?);"); - if (!defined $sth) {die("Cannot do statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client); - write2log("info", "New sender '$hostname' (service: '$service', cidr: '$ip_net_client') was registered"); + sendMsg("info", + "New sender '$hostname' (service: '$service', cidr: '$ip_net_client') was registered", + undef); return 1; } } } # END of registerSender -##----------------------------------------------------------------------------- -## registerReceiver - register new receiver -##----------------------------------------------------------------------------- +#----------------------------------------------------------------------------- +# registerReceiver - register new receiver +#----------------------------------------------------------------------------- sub registerReceiver { my ($class, $data) = @_; @@ -399,8 +477,9 @@ sub registerReceiver my $function_name = 'registerReceiver'; if ($local_ip ne $ip) { - write2log ("err", "Unauthorized access to '$function_name' from: '$ip' ('$cn') - access allowed only from localhost"); - die("Access denied - access allowed only from localhost!"); + sendMsg("err", + "Unauthorized access to function '$function_name' from: '$ip' ('$cn') - access allowed only from localhost", + "Access denied - access allowed only from localhost"); } else { # variables defined by method my $client_type = "r"; @@ -417,19 +496,30 @@ sub registerReceiver # check if receiver has been already registered $sth = $DBH->prepare("SELECT registered FROM clients WHERE hostname = ? AND requestor = ? AND service = ? AND client_type = ? AND type = ? AND receive_own_events = ? AND description_tags = ? AND ip_net_client = ? LIMIT 1;"); - if (!defined $sth) {die("Cannot prepare check statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($hostname, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client); my $result = $sth->fetchrow(); # register new receiver if (defined $result) { - write2log ("err", "Attempt to re-register the receiver"); - die("Error - receiver has already been registered at '$result'"); + sendMsg("err", + "Attempt to re-register the receiver '$hostname', '$requestor', '$service', '$client_type', '$type', '$receive_own_events', '$description_tags', '$ip_net_client'", + "Receiver has already been registered at '$result'"); } else { $sth = $DBH->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?);"); - if (!defined($sth)) {die("Cannot do statement in '$function_name': $DBH->errstr\n")} + if (!defined($sth)) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client); - write2log("info", "New receiver '$hostname' (type: '$type', cidr: '$ip_net_client', receive_own_events: '$receive_own_events') was registered"); + sendMsg("info", + "New receiver '$hostname' (type: '$type', cidr: '$ip_net_client', receive_own_events: '$receive_own_events') was registered", + undef); return 1; } } @@ -452,40 +542,60 @@ sub unregisterClient my $function_name = 'unregisterClient'; if ($local_ip ne $ip) { - write2log ("err", "Unauthorized access to '$function_name' from: '$ip' ('$cn') - access allowed only from localhost"); - die("Access denied - access allowed only from localhost!"); + sendMsg("err", + "Unauthorized access to function '$function_name' from: '$ip' ('$cn') - access allowed only from localhost", + "Access denied - access allowed only from localhost"); } else { # parse SOAP data oject my $client_id = $data->{'CLIENT_ID'}; # check if receiver has been already registered $sth = $DBH->prepare("SELECT client_id, hostname, service, client_type FROM clients WHERE client_id = ? LIMIT 1;"); - if (!defined $sth) {die("Cannot prepare check statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($client_id); my ($id, $hostname, $service, $client_type) = $sth->fetchrow(); # delete registered client if (!defined $id) { - write2log ("err", "Attempt to delete unregister client"); - die("Error - client (#$client_id) is not registered"); + sendMsg("err", + "Attempt to delete unregister client '$id', '$hostname', '$service', '$client_type'", + "Client (#$client_id) is not registered"); } else { if ($client_type eq 's') { $sth = $DBH->prepare("DELETE FROM clients WHERE client_id = ?;"); - if (!defined $sth) {die("Cannot do delete statement of sender in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($client_id); $sth = $DBH->prepare("UPDATE events SET valid = 'f' where hostname = ? AND service = ?;"); - if (!defined $sth) {die("Cannot do unvalidation statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($hostname, $service); - - write2log("info", "Sender '$hostname' (client_id: '$client_id', service: '$service') was deleted and its data were invalidated" ); + sendMsg("info", + "Sender '$hostname' (client_id: '$client_id', service: '$service') was deleted and its data were invalidated", + undef); return 1; } else { $sth = $DBH->prepare("DELETE FROM clients WHERE client_id = ?;"); - if (!defined $sth) {die("Cannot do delete statement of receiver in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute($client_id); - - write2log("info", "Receiver '$hostname' (client_id: '$client_id') was deleted" ); + sendMsg("info", + "Receiver '$hostname' (client_id: '$client_id') was deleted", + undef); return 1; } } @@ -508,13 +618,18 @@ sub getClients my $function_name = 'getClients'; if ($local_ip ne $ip) { - write2log ("err", "Unauthorized access to '$function_name' from: '$ip' ('$cn') - access allowed only from localhost"); - die("Access denied - access allowed only from localhost!"); + sendMsg("err", + "Unauthorized access to function '$function_name' from: '$ip' ('$cn') - access allowed only from localhost", + "Access denied - access allowed only from localhost"); } else { my (@clients, $client); my ($client_id, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client); my $sth = $DBH->prepare("SELECT * FROM clients ORDER BY client_id ASC;"); - if (!defined $sth) { die("Cannot prepare statement in '$function_name': $DBH->errstr\n") } + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; while ( my @result = $sth->fetchrow() ) { @@ -544,7 +659,9 @@ sub getClients push(@clients, $client); } my $sum = scalar @clients; - write2log("info", "Sending information about '$sum' registered clients"); + sendMsg("info", + "Sending information about '$sum' registered clients", + undef); return @clients; } } # END of getClients @@ -565,8 +682,9 @@ sub getStatus my $function_name = 'getStatus'; if ($local_ip ne $ip) { - write2log ("err", "Unauthorized access to '$function_name' from: '$ip' ('$cn') - access allowed only from localhost"); - die("Access denied - access allowed only from localhost!"); + sendMsg("err", + "Unauthorized access to function '$function_name' from: '$ip' ('$cn') - access allowed only from localhost", + "Access denied - access allowed only from localhost"); } else { my ($sth, @status); @@ -587,35 +705,55 @@ sub getStatus # sum of records in table events $sth = $DBH->prepare("SELECT count(*) FROM events WHERE valid = 't';"); - if (!defined $sth) { die("Cannot prepare statement in '$function_name': $DBH->errstr\n") } + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; my $events_sum = $sth->fetchrow(); if (!defined $events_sum) { $events_sum = "none" } # id of last record in table events $sth = $DBH->prepare("SELECT max(id) FROM events;"); - if (!defined $sth) { die("Cannot prepare statement in '$function_name': $DBH->errstr\n") } + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; my $events_last_id = $sth->fetchrow(); if (!defined $events_last_id) { $events_last_id = "none" } # timestamp of first record in table events $sth = $DBH->prepare("SELECT received FROM events WHERE id = (SELECT min(id) FROM events);"); - if (!defined $sth) { die("Cannot prepare statement in '$function_name': $DBH->errstr\n") } + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; my $events_first_timestamp = $sth->fetchrow(); if (!defined $events_first_timestamp) { $events_first_timestamp = "none" } # timestamp of last record in table events $sth = $DBH->prepare("SELECT received FROM events WHERE id = (SELECT max(id) FROM events);"); - if (!defined $sth) { die("Cannot prepare statement in '$function_name': $DBH->errstr\n") } + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; my $events_last_timestamp = $sth->fetchrow(); if (!defined $events_last_timestamp) { $events_last_timestamp = "none" } # sum of records in table clients $sth = $DBH->prepare("SELECT count(*) FROM clients;"); - if (!defined $sth) { die("Cannot prepare statement in '$function_name': $DBH->errstr\n") } + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; my $clients_sum = $sth->fetchrow(); if (!defined $clients_sum) { $clients_sum = "none" } @@ -641,7 +779,11 @@ sub getStatus # statistics of senders if ($clients_sum != 0) { $sth = $DBH->prepare("SELECT client_id, hostname, service FROM clients WHERE client_type = 's' ORDER BY client_id ASC;"); - if (!defined $sth) {die("Cannot prepare statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth->execute; my ($client_id, $hostname, $service); my $client_status; @@ -649,16 +791,26 @@ sub getStatus my $sth2; # sum of stored events $sth2 = $DBH->prepare("SELECT count(*) FROM events WHERE hostname = ? AND service = ?;"); - if (!defined $sth2) {die("Cannot prepare statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth2) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr", + "Internal 'prepare' server error"); + } $sth2->execute($hostname, $service); my $count = $sth2->fetchrow(); if (!defined $count) {$count = "none"} + # timestamp of last stored event $sth2 = $DBH->prepare("SELECT max(received) FROM events WHERE hostname = ? AND service = ?;"); - if (!defined $sth2) {die("Cannot prepare statement in '$function_name': $DBH->errstr\n")} + if (!defined $sth2) { + sendMsg("err", + "Cannot prepare statement in function '$function_name': $DBH->errstr\n", + "Internal 'prepare' server error"); + } $sth2->execute($hostname, $service); my $timestamp = $sth2->fetchrow(); if (!defined $timestamp) {$timestamp = "none"} + # create SOAP data object $client_status = SOAP::Data->name(client_status => \SOAP::Data->value( SOAP::Data->name(CLIENT_ID => $client_id), @@ -670,7 +822,9 @@ sub getStatus push(@status, $client_status); } } - write2log("info", "Sent of warden server status info"); + sendMsg("info", + "Sent warden server status info", + undef); return @status; } } # END of getStatus