Code

Removed usePrototype flag, its activated always now.
[gosa.git] / gosa-si / server / events / server_server_com.pm
index 2fd0f7459c46968c3ce77b70992b862559655a86..98f11a5675ec325034860c88aaf62f1396de9123 100644 (file)
@@ -1,7 +1,18 @@
 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',
     'confirm_new_server',
     'new_foreign_client',
@@ -9,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 {}
 
@@ -30,6 +34,86 @@ sub get_events {
 }
 
 
+sub information_sharing {
+    my ($msg, $msg_hash, $session_id) = @_ ;
+    my $header = @{$msg_hash->{'header'}}[0];
+    my $source = @{$msg_hash->{'source'}}[0];
+    my $target = @{$msg_hash->{'target'}}[0];
+
+    # Handling of msg tag 'new_user'
+    if (exists $msg_hash->{'new_user'}) {
+        my $new_user_list = $msg_hash->{'new_user'};
+
+        # Sanity check of new_user_list
+        if (ref($new_user_list) eq 'HASH') {
+            &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);
+                my %add_hash = ( table=>$main::login_users_tn, 
+                        primkey=> ['client', 'user'],
+                        client=>$client,
+                        user=>$user,
+                        timestamp=>&get_time,
+                        regserver=>$source,
+                        ); 
+                my ($res, $error_str) = $main::login_users_db->add_dbentry( \%add_hash );
+                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);
+        }
+    }
+
+    # Handling of msg tag 'user_db'
+    if (exists $msg_hash->{'user_db'}) {
+        my $user_db_list = $msg_hash->{'user_db'};
+
+        # Sanity check of user_db_list
+        if (ref($user_db_list) eq 'HASH') {
+            &main::daemon_log("$session_id ERROR: 'user_db'-tag in incoming msg has no content!", 1);
+
+        } else {
+            # Delete all old login information
+            my $sql = "DELETE FROM $main::login_users_tn WHERE regserver='$source'"; 
+            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);
+                my %add_hash = ( table=>$main::login_users_tn, 
+                        primkey=> ['client', 'user'],
+                        client=>$client,
+                        user=>$user,
+                        timestamp=>&get_time,
+                        regserver=>$source,
+                        ); 
+                my ($res, $error_str) = $main::login_users_db->add_dbentry( \%add_hash );
+                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);
+        }
+    }
+
+    return;
+}
+
 sub foreign_job_updates {
     my ($msg, $msg_hash, $session_id) = @_ ;
     my $header = @{$msg_hash->{'header'}}[0];
@@ -82,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,
@@ -96,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) {
@@ -174,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);
 
@@ -189,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) {
@@ -278,7 +375,7 @@ sub new_foreign_client {
 sub trigger_wake {
     my ($msg, $msg_hash, $session_id) = @_ ;
 
-    foreach (@{$msg_hash->{macAddress}}){
+    foreach (@{$msg_hash->{'macaddress'}}){
         &main::daemon_log("$session_id INFO: trigger wake for $_", 5);
         my $host    = $_;
         my $ipaddr  = '255.255.255.255';