Code

Removed usePrototype flag, its activated always now.
[gosa.git] / gosa-si / server / events / server_server_com.pm
index 06e87cf2ec4b5391f1bbdd64e7ba267476e83a0b..98f11a5675ec325034860c88aaf62f1396de9123 100644 (file)
@@ -1,6 +1,16 @@
 package server_server_com;
+
+use strict;
+use warnings;
+
 use Exporter;
-@ISA = qw(Exporter);
+use Data::Dumper;
+use GOSA::GosaSupportDaemon;
+use Time::HiRes qw( usleep);
+use Socket;
+
+our @ISA = qw(Exporter);
+
 my @events = (
     'information_sharing',
     'new_server',
@@ -10,15 +20,8 @@ my @events = (
     'foreign_job_updates',
     'confirm_usr_msg',
     );
-@EXPORT = @events;
-
-use strict;
-use warnings;
-use Data::Dumper;
-use GOSA::GosaSupportDaemon;
-use Time::HiRes qw( usleep);
-use Socket;
-
+    
+our @EXPORT = @events;
 
 BEGIN {}
 
@@ -46,10 +49,10 @@ sub information_sharing {
             &main::daemon_log("$session_id ERROR: 'new_user'-tag in incoming msg has no content!", 1);
 
         } else {
+                       my @user_list;
             # Add each user to login_users_db
             foreach my $new_user_info (@$new_user_list) {
                 my ($client, $user) = split(/;/, $new_user_info);
-                &main::daemon_log("$session_id INFO: server '$source' reports user '$user' is logged in at client '$client'", 5);
                 my %add_hash = ( table=>$main::login_users_tn, 
                         primkey=> ['client', 'user'],
                         client=>$client,
@@ -58,10 +61,16 @@ sub information_sharing {
                         regserver=>$source,
                         ); 
                 my ($res, $error_str) = $main::login_users_db->add_dbentry( \%add_hash );
-                if ($res != 0)  {
+                if ($res != 0)  
+                               {
                     &main::daemon_log("$session_id ERROR: cannot add entry to known_clients: $error_str", 1);
                 }
+                               else
+                               {
+                                       push(@user_list, "'$user' at '$client'");
+                               }
             }
+                       &main::daemon_log("$session_id INFO: server '$source' reports the following logged in user: ".join(", ", @user_list), 5);
         }
     }
 
@@ -79,9 +88,9 @@ sub information_sharing {
             my $res = $main::login_users_db->exec_statement($sql);
 
             # Add each user to login_users_db
+                       my @user_list;
             foreach my $user_db_info (@$user_db_list) {
                 my ($client, $user) = split(/;/, $user_db_info);
-                &main::daemon_log("$session_id INFO: server '$source' reports user '$user' is logged in at client '$client'", 5);
                 my %add_hash = ( table=>$main::login_users_tn, 
                         primkey=> ['client', 'user'],
                         client=>$client,
@@ -93,7 +102,12 @@ sub information_sharing {
                 if ($res != 0)  {
                     &main::daemon_log("$session_id ERROR: cannot add entry to known_clients: $error_str", 1);
                 }
+                               else
+                               {
+                                       push(@user_list, "'$user' at '$client'");
+                               }
             }
+                       &main::daemon_log("$session_id INFO: server '$source' reports the following logged in user: ".join(", ", @user_list), 5);
         }
     }
 
@@ -152,12 +166,23 @@ sub new_server {
     my @clients = exists $msg_hash->{'client'} ? @{$msg_hash->{'client'}} : qw();
     my @loaded_modules = exists $msg_hash->{'loaded_modules'} ? @{$msg_hash->{'loaded_modules'}} : qw();
 
-    # sanity check
+       # Ignor message if I'm already within a registration process for server $source
+       my $check_statement = "SELECT * FROM $main::known_server_tn WHERE status='new_server' AND hostname='$source'"; 
+       &main::daemon_log("$session_id DEBUG $check_statement", 7);
+       my $check_res = $main::known_server_db->select_dbentry($check_statement);
+       my $blocking_process = keys(%$check_res);
+       if ($blocking_process)
+       {
+               return;
+       }
+
+    # Sanity check
     if (ref $key eq 'HASH') {
         &main::daemon_log("$session_id ERROR: 'new_server'-message from host '$source' contains no key!", 1);
         return;
     }
-    # add foreign server to known_server_db
+    # Add foreign server to known_server_db
+       my $new_update_time = &calc_timestamp(&get_time(), 'plus', $main::foreign_servers_register_delay);
     my $func_dic = {table=>$main::known_server_tn,
         primkey=>['hostname'],
         hostname => $source,
@@ -166,6 +191,7 @@ sub new_server {
         hostkey => $key,
         loaded_modules => join(',', @loaded_modules),
         timestamp=>&get_time(),
+               update_time=>$new_update_time,
     };
     my $res = $main::known_server_db->add_dbentry($func_dic);
     if (not $res == 0) {
@@ -244,8 +270,9 @@ sub confirm_new_server {
     my @clients = exists $msg_hash->{'client'} ? @{$msg_hash->{'client'}} : qw();
     my @loaded_modules = exists $msg_hash->{'loaded_modules'} ? @{$msg_hash->{'loaded_modules'}} : qw();
 
+       my $new_update_time = &calc_timestamp(&get_time(), 'plus', $main::foreign_servers_register_delay);
     my $sql = "UPDATE $main::known_server_tn".
-        " SET status='$header', hostkey='$key', loaded_modules='".join(",",@loaded_modules)."', macaddress='$mac'".
+        " SET status='$header', hostkey='$key', loaded_modules='".join(",",@loaded_modules)."', macaddress='$mac', update_time='$new_update_time'".
         " WHERE hostname='$source'"; 
     my $res = $main::known_server_db->update_dbentry($sql);
 
@@ -259,10 +286,10 @@ sub confirm_new_server {
         push(@sql_list, $del_sql);
 
         my $sql = "INSERT INTO $main::foreign_clients_tn VALUES ("
-            ."'".$client_details[0]."',"   # hostname
-            ."'".$client_details[1]."',"   # macaddress
-            ."'".$source."',"              # regserver
-            ."'".&get_time()."')";         # timestamp
+            ."'".$client_details[0]."',"       # hostname
+            ."'".$client_details[1]."',"       # macaddress
+            ."'".$source."',"                  # regserver
+            ."'".&get_time()."')";                     # timestamp
         push(@sql_list, $sql);
     }
     if (@sql_list) {