Code

a7487a3e1fb3e6d7550015a68daf810456a90ae8
[gosa.git] / gosa-si / server / events / clMessages.pm
1 package clMessages;
2 use Exporter;
3 @ISA = qw(Exporter);
4 my @events = (
5     "PROGRESS",
6     "FAIREBOOT",
7     "TASKSKIP",
8     "TASKBEGIN",
9     "TASKEND",
10     "TASKERROR",
11     "HOOK",
12     "GOTOACTIVATION",
13     "LOGIN",
14     "LOGOUT",
15     );
16 @EXPORT = @events;
18 use strict;
19 use warnings;
20 use Data::Dumper;
21 use GOSA::GosaSupportDaemon;
22 use utf8;
25 BEGIN {}
27 END {}
29 ### Start ######################################################################
31 my $ldap_uri;
32 my $ldap_base;
33 my $ldap_admin_dn;
34 my $ldap_admin_password;
36 my %cfg_defaults = (
37 "server" => {
38    "ldap-uri" => [\$ldap_uri, ""],
39    "ldap-base" => [\$ldap_base, ""],
40    "ldap-admin-dn" => [\$ldap_admin_dn, ""],
41    "ldap-admin-password" => [\$ldap_admin_password, ""],
42    },
43 );
44 &read_configfile($main::cfg_file, %cfg_defaults);
47 sub get_events {
48     return \@events;
49 }
52 sub read_configfile {
53     my ($cfg_file, %cfg_defaults) = @_;
54     my $cfg;
56     if( defined( $cfg_file) && ( length($cfg_file) > 0 )) {
57         if( -r $cfg_file ) {
58             $cfg = Config::IniFiles->new( -file => $cfg_file );
59         } else {
60             &main::daemon_log("ERROR: clMessages.pm couldn't read config file!", 1);
61         }
62     } else {
63         $cfg = Config::IniFiles->new() ;
64     }
65     foreach my $section (keys %cfg_defaults) {
66         foreach my $param (keys %{$cfg_defaults{ $section }}) {
67             my $pinfo = $cfg_defaults{ $section }{ $param };
68             ${@$pinfo[0]} = $cfg->val( $section, $param, @$pinfo[1] );
69         }
70     }
71 }
74 sub LOGIN {
75     my ($msg, $msg_hash, $session_id) = @_;
76     my $header = @{$msg_hash->{'header'}}[0];
77     my $source = @{$msg_hash->{'source'}}[0];
78     my $login = @{$msg_hash->{$header}}[0];
80     my %add_hash = ( table=>$main::login_users_tn, 
81         primkey=> ['client', 'user'],
82         client=>$source,
83         user=>$login,
84         timestamp=>&get_time,
85     ); 
86     my ($res, $error_str) = $main::login_users_db->add_dbentry( \%add_hash );
87     if ($res != 0)  {
88         &main::daemon_log("ERROR: cannot add entry to known_clients: $error_str");
89         return;
90     }
92     return;   
93 }
96 sub LOGOUT {
97     my ($msg, $msg_hash, $session_id) = @_;
98     my $header = @{$msg_hash->{'header'}}[0];
99     my $source = @{$msg_hash->{'source'}}[0];
100     my $login = @{$msg_hash->{$header}}[0];
102     my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$source'";
103     my $res = $main::known_clients_db->select_dbentry($sql_statement);
104     if( 1 != keys(%$res) ) {
105         &main::daemon_log("DEBUG: clMessages.pm: LOGOUT: no or more hits found in known_clients_db for host '$source'");
106         return;
107     }
109     my $act_login = $res->{'1'}->{'login'};
110     $act_login =~ s/$login,?//gi;
112     if( $act_login eq "" ){ $act_login = "nobody"; }
114     $sql_statement = "UPDATE known_clients ".
115                 "SET login='$act_login' ".
116                 "WHERE hostname='$source'";
117     $res = $main::known_clients_db->update_dbentry($sql_statement);
118     
119     return;
123 sub GOTOACTIVATION {
124     my ($msg, $msg_hash, $session_id) = @_;
125     my $out_msg = &build_result_update_msg($msg_hash);
126     my @out_msg_l = ($out_msg);  
127     return @out_msg_l; 
131 sub PROGRESS {
132     my ($msg, $msg_hash, $session_id) = @_;
133     my $out_msg = &build_progress_update_msg($msg_hash);
134     my @out_msg_l = ($out_msg);  
135     return @out_msg_l; 
139 sub FAIREBOOT {
140     my ($msg, $msg_hash, $session_id) = @_;
141     my $out_msg = &build_status_result_update_msg($msg_hash);
142     my @out_msg_l = ($out_msg);  
143     return @out_msg_l; 
147 sub TASKSKIP {
148     my ($msg, $msg_hash, $session_id) = @_;
149     my $out_msg = &build_status_result_update_msg($msg_hash);
150     my @out_msg_l = ($out_msg);  
151     return @out_msg_l; 
156 sub TASKBEGIN {
157     my ($msg, $msg_hash, $session_id) = @_;
158     my $out_msg = &build_status_result_update_msg($msg_hash);
159     my @out_msg_l = ($out_msg);  
161 # -----------------------> Update hier
162 #  <CLMSG_TASKBEGIN>finish</CLMSG_TASKBEGIN>
163 #  <header>CLMSG_TASKBEGIN</header>
164 # macaddress auslesen, Client im LDAP lokalisieren
165 # FAIstate auf "localboot" setzen, wenn FAIstate "install" oder "softupdate" war
167     return @out_msg_l; 
171 sub TASKEND {
172     my ($msg, $msg_hash, $session_id) = @_;
173     my $out_msg = &build_status_result_update_msg($msg_hash);
174     my @out_msg_l = ($out_msg);  
176 # -----------------------> Update hier
177 #  <CLMSG_TASKBEGIN>finish</CLMSG_TASKBEGIN>
178 #  <header>CLMSG_TASKBEGIN</header>
179 # macaddress auslesen, Client im LDAP lokalisieren
180 # FAIstate auf "error" setzen
182     return @out_msg_l; 
186 sub TASKERROR {
187     my ($msg, $msg_hash, $session_id) = @_;
188     my $out_msg = &build_status_result_update_msg($msg_hash);
189     my @out_msg_l = ($out_msg);  
191 # -----------------------> Update hier
192 #  <CLMSG_TASKBEGIN>finish</CLMSG_TASKBEGIN>
193 #  <header>CLMSG_TASKBEGIN</header>
194 # macaddress auslesen, Client im LDAP lokalisieren
195 # FAIstate auf "error" setzen
197     return @out_msg_l; 
201 sub HOOK {
202     my ($msg, $msg_hash, $session_id) = @_;
203     my $out_msg = &build_status_result_update_msg($msg_hash);
204     my @out_msg_l = ($out_msg);  
205     return @out_msg_l; 
209 sub build_status_result_update_msg {
210     my ($msg_hash) = @_;
212     my $header = @{$msg_hash->{'header'}}[0];
213     my $source = @{$msg_hash->{'target'}}[0];
214     my $target = @{$msg_hash->{'target'}}[0];
215     my $macaddress = @{$msg_hash->{'macaddress'}}[0];
217     # test whether content is an empty hash or a string which is required
218     my $content = @{$msg_hash->{$header}}[0];
219     eval{
220         if( 0 == keys(%$content) ) {
221             $content = "";
222         }
223     };
224     if( $@ ) {
225         $content = " $content";
226     }
228     $header =~ s/CLMSG_//g;
229     my $out_msg = sprintf("<xml> ".  
230         "<header>gosa_update_status_jobdb_entry</header> ".
231         "<source>%s</source> ".
232         "<target>%s</target>".
233         "<where> ".
234             "<clause> ".
235                 "<phrase> ".
236                     "<status>processing</status> ".
237                     "<macaddress>%s</macaddress> ".
238                 "</phrase> ".
239             "</clause> ".
240         "</where> ".
241         "<update> ".
242             "<status>processing</status> ".
243             "<result>%s</result> ".
244         "</update> ".
245         "</xml>", $source, "JOBDB", $macaddress, $header.$content);
246     return $out_msg;
247 }   
250 sub build_progress_update_msg {
251     my ($msg_hash) = @_;
253     my $header = @{$msg_hash->{'header'}}[0];
254     my $source = @{$msg_hash->{'target'}}[0];
255     my $target = @{$msg_hash->{'target'}}[0];
256     my $macaddress = @{$msg_hash->{'macaddress'}}[0];
258     # test whether content is an empty hash or a string which is required
259     my $content = @{$msg_hash->{$header}}[0];
260     eval{
261         if( 0 == keys(%$content) ) {
262             $content = "";
263         }
264     };
265     if( $@ ) {
266         $content = "$content";
267     }
269     $header =~ s/CLMSG_//g;
270     my $out_msg = sprintf("<xml> ".  
271         "<header>gosa_update_status_jobdb_entry</header> ".
272         "<source>%s</source> ".
273         "<target>%s</target>".
274         "<where> ".
275             "<clause> ".
276                 "<phrase> ".
277                     "<status>processing</status> ".
278                     "<macaddress>%s</macaddress> ".
279                 "</phrase> ".
280             "</clause> ".
281         "</where> ".
282         "<update> ".
283             "<progress>%s</progress> ".
284         "</update> ".
285         "</xml>", $source, "JOBDB", $macaddress, $content);
286     return $out_msg;
290 sub build_result_update_msg {
291     my ($msg_hash) = @_;
293     my $header = @{$msg_hash->{'header'}}[0];
294     my $source = @{$msg_hash->{'target'}}[0];
295     my $target = @{$msg_hash->{'target'}}[0];
296     my $macaddress = @{$msg_hash->{'macaddress'}}[0];
298     # test whether content is an empty hash or a string which is required
299     my $content = @{$msg_hash->{$header}}[0];
300     eval{
301         if( 0 == keys(%$content) ) {
302             $content = "";
303         }
304     };
305     if( $@ ) {
306         $content = " $content";
307     }
309     $header =~ s/CLMSG_//g;
310     my $out_msg = sprintf("<xml> ".  
311         "<header>gosa_update_status_jobdb_entry</header> ".
312         "<source>%s</source> ".
313         "<target>%s</target>".
314         "<where> ".
315             "<clause> ".
316                 "<phrase> ".
317                     "<status>processing</status> ".
318                     "<macaddress>%s</macaddress> ".
319                 "</phrase> ".
320             "</clause> ".
321         "</where> ".
322         "<update> ".
323             "<result>%s</result> ".
324         "</update> ".
325         "</xml>", $source, "JOBDB", $macaddress, $header.$content);
326     return $out_msg;
330 1;