Code

removed images.
[gosa.git] / gosa-si / modules / ServerPackages.pm
index 8e64273455bd42db862ec0c3152ba0a807dd6769..d50cdea1600645fa4ed259ffee29409123523ab4 100644 (file)
@@ -8,14 +8,7 @@ use Exporter;
 use strict;
 use warnings;
 use GOSA::GosaSupportDaemon;
-
-#use IO::Socket::INET;
-#use XML::Simple;
-#use Data::Dumper;
-#use NetAddr::IP;
-#use Net::LDAP;
-#use Socket;
-#use Net::hostent;
+use Data::Dumper;
 
 my $event_dir = "/usr/lib/gosa-si/server/ServerPackages";
 use lib "/usr/lib/gosa-si/server/ServerPackages";
@@ -28,12 +21,10 @@ END {}
 
 # import local events
 my ($error, $result, $event_hash) = &import_events($event_dir);
-if ($error == 0) {
-    foreach my $log_line (@$result) {
+foreach my $log_line (@$result) {
+    if ($log_line =~ / succeed: /) {
         &main::daemon_log("0 DEBUG: ServerPackages - $log_line", 7);
-    }
-} else {
-    foreach my $log_line (@$result) {
+    } else {
         &main::daemon_log("0 ERROR: ServerPackages - $log_line", 1);
     }
 }
@@ -42,7 +33,7 @@ if ($error == 0) {
 
 sub get_module_info {
     my @info = ($main::server_address,
-            $main::foreign_server_key,            
+            $main::ServerPackages_key,         
             );
     return \@info;
 }
@@ -51,10 +42,17 @@ sub process_incoming_msg {
     my ($msg, $msg_hash, $session_id) = @_ ;
     my $header = @{$msg_hash->{header}}[0];
     my $source = @{$msg_hash->{source}}[0]; 
-    my @target_l = @{$msg_hash->{target}};
+    my $target = @{$msg_hash->{target}}[0];
+    my $sql_events;
 
     my @msg_l;
-    my @out_msg_l;
+    my @out_msg_l = ( 'nohandler' );
+
+
+    # if message is being forwarded from another server, strip of header prefixes
+    $header =~ s/^gosa_|^job_//;
+    $msg =~ s/<header>gosa_(\w+)<\/header>|<header>job_(\w+)<\/header>/<header>$1<\/header>/;
+    
 
     &main::daemon_log("$session_id DEBUG: ServerPackages: msg to process '$header'", 7);
     if( exists $event_hash->{$header} ) {
@@ -62,12 +60,51 @@ sub process_incoming_msg {
         &main::daemon_log("$session_id INFO: found event '$header' at event-module '".$event_hash->{$header}."'", 5);
         no strict 'refs';
         @out_msg_l = &{$event_hash->{$header}."::$header"}($msg, $msg_hash, $session_id);
+
     } else {
-        &main::daemon_Log("$session_id ERROR: ServerPackages: no event handler defined for '$header'", 1);
-        @out_msg_l = ();
+        $sql_events = "SELECT * FROM $main::known_clients_tn WHERE ( (macaddress LIKE '$target') OR (hostname='$target') )"; 
+        my $res = $main::known_clients_db->select_dbentry( $sql_events );
+        my $l = keys(%$res);
+
+
+# TODO
+# $l == 1, knownclienterror wird eigentlich nicht gebraucht. hier soll nohandler anspringen
+        # set error if no or more than 1 hits are found for sql query
+        if ( $l != 1) {
+            @out_msg_l = ('knownclienterror');
+        
+        # found exact 1 hit in db
+        } else {
+            my $client_events = $res->{'1'}->{'events'};
+
+            # client is registered for this event, deliver this message to client
+            if ($client_events =~ /,$header,/) {
+                $msg =~ s/<header>gosa_/<header>/;
+                @out_msg_l = ( $msg );
+
+            # client is not registered for this event, set error
+            } else {
+                @out_msg_l = ('noeventerror');
+            }
+        }
     }
 
-    return @out_msg_l;
+    # if delivery not possible raise error and return 
+    if (not defined $out_msg_l[0]) {
+        @out_msg_l = ();
+    } elsif ($out_msg_l[0] eq 'nohandler') {
+        &main::daemon_log("$session_id ERROR: ServerPackages: no event handler defined for '$header'", 1);
+        @out_msg_l = ();
+    } elsif ($out_msg_l[0] eq 'knownclienterror') {
+        &main::daemon_log("$session_id ERROR: no or more than 1 hits are found at known_clients_db with sql query: '$sql_events'", 1);
+        &main::daemon_log("$session_id WARNING: processing is aborted and message will not be forwarded", 3);
+        @out_msg_l = ();
+    } elsif ($out_msg_l[0] eq 'noeventerror') {
+        &main::daemon_log("$session_id WARNING: client '$target' is not registered for event '$header', processing is aborted", 3); 
+        @out_msg_l = ();
+    }
+      
+    return \@out_msg_l;
 }
 
 1;