Code

--- complete --- bus mac address handling
[gosa.git] / gosa-si / gosa-si-server
index 195ec65e1e824ceb5bcaa61b3415c9923902ce9e..bc7d4f52f3576d1f2ce6305491252ac8e8015f43 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 ) {
@@ -829,8 +831,13 @@ sub client_input {
                     # 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