diff --git a/gosa-si/gosa-si-server b/gosa-si/gosa-si-server
index 195ec65e1e824ceb5bcaa61b3415c9923902ce9e..bc7d4f52f3576d1f2ce6305491252ac8e8015f43 100755 (executable)
--- a/gosa-si/gosa-si-server
+++ b/gosa-si/gosa-si-server
# for each answer in answer list
foreach my $answer ( @{$answer_l} ) {
- my $error = 0;
- # check answer if gosa-si envelope conform
- my $answer_hash = $xml->XMLin($answer, ForceArray=>1);
- $answer_header = @{$answer_hash->{'header'}}[0];
- @answer_target_l = @{$answer_hash->{'target'}};
- $answer_source = @{$answer_hash->{'source'}}[0];
- if( !$answer_header ) {
- daemon_log('ERROR: module answer is not gosa-si envelope conform: no header', 1);
- daemon_log("\n$answer", 8);
- $error++;
- }
- if( 0 == length @answer_target_l ) {
- daemon_log('ERROR: module answer is not gosa-si envelope conform: no targets', 1);
- daemon_log("\n$answer", 8);
- $error++;
- }
- if( !$answer_source ) {
- daemon_log('ERROR: module answer is not gosa-si envelope conform: no source', 1);
- daemon_log("\n$answer", 8);
- $error++;
- }
-
- if( $error != 0 ) {
- next;
- }
+ my $error = 0;
+ # check answer if gosa-si envelope conform
+ if(defined($answer)) {
+ my $answer_hash = $xml->XMLin($answer, ForceArray=>1);
+ $answer_header = @{$answer_hash->{'header'}}[0];
+ @answer_target_l = @{$answer_hash->{'target'}};
+ $answer_source = @{$answer_hash->{'source'}}[0];
+ if( !$answer_header ) {
+ daemon_log('ERROR: module answer is not gosa-si envelope conform: no header', 1);
+ daemon_log("\n$answer", 8);
+ $error++;
+ }
+ if( 0 == length @answer_target_l ) {
+ daemon_log('ERROR: module answer is not gosa-si envelope conform: no targets', 1);
+ daemon_log("\n$answer", 8);
+ $error++;
+ }
+ if( !$answer_source ) {
+ daemon_log('ERROR: module answer is not gosa-si envelope conform: no source', 1);
+ daemon_log("\n$answer", 8);
+ $error++;
+ }
+
+ if( $error != 0 ) {
+ next;
+ }
+ }
# deliver msg to all targets
foreach my $answer_target ( @answer_target_l ) {
# get encrypt_key
my $encrypt_key = &get_encrypt_key($answer_target);
if( !$encrypt_key ) {
- daemon_log("ERROR: no encrypt key found in known_clients or known_server for target '$answer_target'", 1);
- daemon_log("\n$answer", 8);
+ # unknown target, forward msg to bus
+ daemon_log("WARNING: unknown target '$answer_target', forward msg to bus", 3);
+ my $sql_statement = "SELECT * FROM known_server WHERE status='bus'";
+ my $query_res = $known_server_db->select_dbentry( $sql_statement );
+ my $bus_address = $query_res->{1}->{hostname};
+ my $bus_key = $query_res->{1}->{hostkey};
+ &send_msg_to_target($answer, $bus_address, $bus_key, $answer_header);
next;
}
# send_msg