Code

Added sanity check to beware of broken ldap config on client.
[gosa.git] / gosa-si / gosa-si-server
index 8ce80bc1a4d7c6944b58f3ddb47bd9eeaae0089d..3dbb629bb0194f490551ba614c21797a03a57c1c 100755 (executable)
@@ -744,31 +744,33 @@ sub client_input {
         # 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 ) {
@@ -812,7 +814,16 @@ sub client_input {
                         $found_ip_flag++ ;
                     }   
                     if( $found_ip_flag == 0) {
-                        daemon_log("ERROR: no host found in known_clients with mac address '$answer_target', answer could not be send", 1);
+                        daemon_log("WARNING: no host found in known_clients with mac address '$answer_target', forward msg to bus", 1);
+                        my $sql_statement = "SELECT * FROM known_server WHERE status='bus'";
+                        my $query_res = $known_server_db->select_dbentry( $sql_statement );
+                        while( my ($hit_num, $hit) = each %{ $query_res } ) {    
+                            my $bus_address = $hit->{hostname};
+                            my $bus_key = $hit->{hostkey};
+                            &send_msg_to_target($answer, $bus_address, $bus_key, $answer_header);
+                            last;
+                        }
+
                     }
                 }
                 else {