Code

Apply fix for #6747
[gosa.git] / trunk / gosa-si / gosa-si-client
index 5ce0d368fc429a0d9661857f1952bbafb510f8e3..9ee49e936f764ea16fdd3dd501b6299d00869b87 100755 (executable)
@@ -76,8 +76,6 @@ our $client_force_hostname;
 our $server_key;
 our $opts_dnslookup;
 
-our $FIFO_FD = undef;
-
 # default variables
 our $REGISTERED = 0;
 our $REGISTRATION_IN_PROGRESS = 0;
@@ -246,18 +244,9 @@ sub sig_warn_handler
     return 1;
 }
        
-sub sig_die_handler
-{
-    my @loc = caller(0);
-    daemon_log( "SIGDIE line " . $loc[2] . ": " . $_[0], 1 );
-    clean_shutdown();
-    return 1;
-}
-
 $SIG{'INT'} = \&sig_int_or_term_handler;
 $SIG{'TERM'} = \&sig_int_or_term_handler;
 $SIG{'__WARN__'} = \&sig_warn_handler;
-$SIG{'__DIE__'} = \&sig_die_handler;
 $SIG{'USR1'} = 'IGNORE';
 $SIG{'USR2'} = 'IGNORE';
 
@@ -498,6 +487,7 @@ sub send_msg_to_target {
         if ($REGISTERED == 1) {
             $REGISTERED = 0;        # if server is not available, cause reregistering
             daemon_log("INFO: cause reregistering at gosa-si-server", 5); 
+            sleep(2);
             $global_kernel->post('client_session', 'register_at_gosa_si_server');
 
         }
@@ -597,6 +587,7 @@ sub register_at_gosa_si_server {
             # append shifted gosa-si-server at the end of @servers, so looking for servers never stop if
             # a registration never occured
             my $server = shift(@servers);
+            &main::daemon_log("INFO: Trying to register with server $server", 3);
             push(@servers, $server);
             ($server_ip = $server) =~ s/:.*$//;
             $server_address = $server;
@@ -649,8 +640,6 @@ sub register_at_gosa_si_server {
 
                        # if delivery of registration msg succeed
                        if(defined($res) and $res eq "0") {
-                       # reset try_to_register
-                               $REGISTRATION_TRIES = 0;
 
                        # Set fixed client address and mac address
                                $client_ip= &get_local_ip_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/));
@@ -660,15 +649,18 @@ sub register_at_gosa_si_server {
                 last;
 
                        # delivery of registration msg failed   
-                       } elsif($REGISTRATION_TRIES >= scalar(@servers)) {
+                       } elsif($REGISTRATION_TRIES > scalar(@servers)) {
                                last;
                        }
 
     } # end of while
        # one circle through all servers finished and no registration succeed
-       if ( $REGISTRATION_TRIES >= (scalar(@servers)) )  {
+       if ( $REGISTRATION_TRIES > (scalar(@servers)) )  {
+                       $REGISTRATION_TRIES = 0;
                        &write_to_file("gosa-si-no-server-available", $fai_logpath);
-                       $kernel->delay_set('register_at_gosa_si_server', $delay_set_time);
+                       daemon_log("WARNING: Could not register with any of the servers, waiting $delay_set_time seconds",3);
+                       sleep($delay_set_time);
+                       $kernel->post('client_session', 'register_at_gosa_si_server');
        
        # delivery of registraion msg succeed, waiting for server response
        } else {
@@ -691,6 +683,9 @@ sub check_key_and_xml_validity {
     my $msg_hash;
     eval{
         $msg = &decrypt_msg($crypted_msg, $module_key);
+        if ($msg  !~ /^<xml>/i ) {
+            die 'could not decrypt message';
+        }
         &main::daemon_log("decrypted_msg: \n$msg", 9);
 
         $msg_hash = $xml->XMLin($msg, ForceArray=>1);
@@ -824,15 +819,14 @@ sub trigger_logged_in_users_report {
                        @logged_in_user_list = split(/\s/, $result);
                }
                
-       $FIFO_FD = undef
-           if (! defined $FIFO_FD && ! defined open($FIFO_FD, '>', $gosa_si_client_fifo));
-       if (! defined $FIFO_FD) {
+       if (!open(FIFO_FD, '>', $gosa_si_client_fifo)) {
            daemon_log("ERROR: unable to open fifo for writing: $!", 1);
            $kernel->delay_set('trigger_logged_in_users_report', 30);
        }
        else {
-           print($FIFO_FD 'CURRENTLY_LOGGED_IN ' . join(" ", @logged_in_user_list));
-        $kernel->delay_set('trigger_logged_in_users_report', $trigger_logged_in_users_report_delay);
+           printf(FIFO_FD "CURRENTLY_LOGGED_IN %s\n", join(" ", @logged_in_user_list));
+           close(FIFO_FD);
+           $kernel->delay_set('trigger_logged_in_users_report', $trigger_logged_in_users_report_delay);
        }
     } else {
         # try it in 10 sec again
@@ -920,7 +914,7 @@ sub fifo_got_record {
     my $file_record = $_[ARG0];
     my $header;
     my $content = "";
-    daemon_log("DEBUG: fifo got record: $file_record", 7); 
+    daemon_log("INFO: fifo got record: $file_record", 3); 
 
     $file_record =~ /^(\S+)[ ]?([\s\S]+)?$/;
     if( defined $1 ) {
@@ -1040,7 +1034,6 @@ sub _stop {
     $kernel->alias_remove($heap->{alias});
     $kernel->alarm_remove_all();
     $kernel->post($heap->{child_session}, '_stop');
-    close( $FIFO_FD ) if( defined $FIFO_FD );
 }
 
 
@@ -1055,12 +1048,18 @@ sub server_input {
     my $remote_ip = $heap->{'remote_ip'},
     my $error = 0;
     my $answer;
+    my $msg;
+    my $msg_hash;    
     
 
-    daemon_log("INFO: Incoming msg from '$remote_ip'", 5);
+    daemon_log("INFO: Incoming msg from '$remote_ip', server_ip: $server_ip", 5);
     daemon_log("DEBUG: Incoming msg:\n$input\n", 9);
 
-    my ($msg, $msg_hash) = &check_key_and_xml_validity($input, $server_key);
+    if (not "$remote_ip" eq "$server_ip" and "$server_ip" ne "127.0.0.1") {
+        daemon_log("INFO: Incoming msg not from server ($server_ip), ignoring", 5);
+        $error++;
+    } else {
+        ($msg, $msg_hash) = &check_key_and_xml_validity($input, $server_key);
     if( (!$msg) || (!$msg_hash) ) {
         daemon_log("WARNING: Deciphering of incoming msg failed", 3);
         if($server_address =~ /$remote_ip/) {
@@ -1082,12 +1081,13 @@ sub server_input {
                 }
                 $FAILED_CRYPTO++;
                                $REGISTERED = 0;
+                               sleep(2);
                                $kernel->post('client_session', 'register_at_gosa_si_server');
                        }
         }
         $error++;
     }
-
+    }
 
     ######################
     # process incoming msg
@@ -1125,6 +1125,10 @@ sub server_input {
                 # set registered flag to true to stop sending further registered msgs
                 $REGISTERED = 1;
                 $REGISTRATION_IN_PROGRESS = 0;
+                               if( $server_ip eq "127.0.0.1") {
+                                       $server_ip = $remote_ip;
+                                       daemon_log("INFO: Registered at localhost, setting server_ip to $server_ip",3);
+                               }
             } 
             else {
                 $answer =~ /<header>(\S+)<\/header>/;