Code

* gosa-si-server-nobus
[gosa.git] / gosa-si / modules / ServerPackages.pm
1 package ServerPackages;
3 use Exporter;
4 @ISA = ("Exporter");
6 # Each module has to have a function 'process_incoming_msg'. This function works as a interface to gosa-sd and receives the msg hash from gosa-sd. 'process_incoming_function checks, wether it has a function to process the incoming msg and forward the msg to it. 
8 use strict;
9 use warnings;
10 use GOSA::GosaSupportDaemon;
11 use Data::Dumper;
13 #use IO::Socket::INET;
14 #use XML::Simple;
15 #use Data::Dumper;
16 #use NetAddr::IP;
17 #use Net::LDAP;
18 #use Socket;
19 #use Net::hostent;
21 my $event_dir = "/usr/lib/gosa-si/server/ServerPackages";
22 use lib "/usr/lib/gosa-si/server/ServerPackages";
24 BEGIN{}
25 END {}
28 ### START #####################################################################
30 # import local events
31 my ($error, $result, $event_hash) = &import_events($event_dir);
32 if ($error == 0) {
33     foreach my $log_line (@$result) {
34         &main::daemon_log("0 DEBUG: ServerPackages - $log_line", 7);
35     }
36 } else {
37     foreach my $log_line (@$result) {
38         &main::daemon_log("0 ERROR: ServerPackages - $log_line", 1);
39     }
40 }
42 ### FUNCTIONS #####################################################################
44 sub get_module_info {
45     my @info = ($main::server_address,
46             $main::foreign_server_key,            
47             );
48     return \@info;
49 }
51 sub process_incoming_msg {
52     my ($msg, $msg_hash, $session_id) = @_ ;
53     my $header = @{$msg_hash->{header}}[0];
54     my $source = @{$msg_hash->{source}}[0]; 
55     my $target = @{$msg_hash->{target}}[0];
56     my $sql_events;
58     my @msg_l;
59     my @out_msg_l = ( 'nohandler' );
61     &main::daemon_log("$session_id DEBUG: ServerPackages: msg to process '$header'", 7);
62     if( exists $event_hash->{$header} ) {
63         # a event exists with the header as name
64         &main::daemon_log("$session_id INFO: found event '$header' at event-module '".$event_hash->{$header}."'", 5);
65         no strict 'refs';
66         @out_msg_l = &{$event_hash->{$header}."::$header"}($msg, $msg_hash, $session_id);
68     } else {
69         $sql_events = "SELECT * FROM $main::known_clients_tn WHERE ( (macaddress LIKE '$target') OR (hostname='$target') )"; 
70         my $res = $main::known_clients_db->select_dbentry( $sql_events );
71         my $l = keys(%$res);
74 # TODO
75 # $l == 1, knownclienterror wird eigentlich nicht gebraucht. hier soll nohandler anspringen
76         # set error if no or more than 1 hits are found for sql query
77         if ( $l != 1) {
78             @out_msg_l = ('knownclienterror');
79         
80         # found exact 1 hit in db
81         } else {
82             my $client_events = $res->{'1'}->{'events'};
84             # client is registered for this event, deliver this message to client
85             if ($client_events =~ /,$header,/) {
86                 $msg =~ s/<header>gosa_/<header>/;
87                 @out_msg_l = ( $msg );
89             # client is not registered for this event, set error
90             } else {
91                 @out_msg_l = ('noeventerror');
92             }
93         }
94     }
96     # if delivery not possible raise error and return 
97     if (not defined $out_msg_l[0]) {
98         @out_msg_l = ();
99     } elsif ($out_msg_l[0] eq 'nohandler') {
100         &main::daemon_log("$session_id ERROR: ServerPackages: no event handler defined for '$header'", 1);
101         @out_msg_l = ();
102     } elsif ($out_msg_l[0] eq 'knownclienterror') {
103         &main::daemon_log("$session_id ERROR: no or more than 1 hits are found at known_clients_db with sql query: '$sql_events'", 1);
104         &main::daemon_log("$session_id WARNING: processing is aborted and message will not be forwarded", 3);
105         @out_msg_l = ();
106     } elsif ($out_msg_l[0] eq 'noeventerror') {
107         &main::daemon_log("$session_id WARNING: client '$target' is not registered for event '$header', processing is aborted", 3); 
108         @out_msg_l = ();
109     }
110       
111     return \@out_msg_l;
114 1;