Code

* gosa-si-server-nobus
[gosa.git] / gosa-si / server / events / gosaTriggered.pm
1 package gosaTriggered;
2 use Exporter;
3 @ISA = qw(Exporter);
4 my @events = (
5     "get_events", 
6     "get_login_usr_for_client",
7     "get_client_for_login_usr",
8     "gen_smb_hash",
9     "trigger_reload_ldap_config",
10     "ping",
11     "new_ping",
12     "network_completition",
13     "set_activated_for_installation",
14     "new_key_for_client",
15     "detect_hardware",
16     "get_login_usr",
17     "get_login_client",
18     "trigger_action_localboot",
19     "trigger_action_faireboot",
20     "trigger_action_reboot",
21     "trigger_action_activate",
22     "trigger_action_lock",
23     "trigger_action_halt",
24     "trigger_action_update", 
25     "trigger_action_reinstall",
26     "trigger_action_memcheck", 
27     "trigger_action_sysinfo",
28     "trigger_action_instant_update",
29     "trigger_action_rescan",
30     "trigger_action_wake",
31     "recreate_fai_server_db",
32     "recreate_fai_release_db",
33     "recreate_packages_list_db",
34     "send_user_msg", 
35     "get_available_kernel",
36     );
37 @EXPORT = @events;
39 use strict;
40 use warnings;
41 use GOSA::GosaSupportDaemon;
42 use Data::Dumper;
43 use Crypt::SmbHash;
44 use Net::ARP;
45 use Net::Ping;
46 use Socket;
47 use Time::HiRes qw( usleep);
49 BEGIN {}
51 END {}
53 ### Start ######################################################################
55 #&main::read_configfile($main::cfg_file, %cfg_defaults);
57 sub get_events {
58     return \@events;
59 }
61 sub send_user_msg {
63 # msg from gosa
64 # <xml><header>gosa_send_user_msg</header><source>GOSA</source><target>GOSA</target>
65 # <timestamp>20080429151605</timestamp>
66 # <users>andreas.rettenberger</users>
67 # <subject>hallo</subject>
68 # <message>test</message>
69 # <macaddress>GOSA</macaddress>
70 # </xml>
72     my ($msg, $msg_hash, $session_id) = @_ ;
73     my $header = @{$msg_hash->{'header'}}[0];
74     my $source = @{$msg_hash->{'source'}}[0];
75     my $target = @{$msg_hash->{'target'}}[0];
77     #my $subject = &decode_base64(@{$msg_hash->{'subject'}}[0]);
78     my $subject = @{$msg_hash->{'subject'}}[0];
79     my $from = @{$msg_hash->{'from'}}[0];
80     my @users = @{$msg_hash->{'users'}};
81         my @groups = @{$msg_hash->{'groups'}}[0];
82     my $delivery_time = @{$msg_hash->{'delivery_time'}}[0];
83     #my $message = &decode_base64(@{$msg_hash->{'message'}}[0]);
84     my $message = @{$msg_hash->{'message'}}[0];
85     
86     # keep job queue uptodate if necessary 
87     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
88     if( defined $jobdb_id) {
89         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
90         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
91         my $res = $main::job_db->exec_statement($sql_statement);
92     }
94     # error handling
95     if (not $delivery_time =~ /^\d{14}$/) {
96         my $error_string = "delivery_time '$delivery_time' is not a valid timestamp, please use format 'yyyymmddhhmmss'";
97         &main::daemon_log("$session_id ERROR: $error_string", 1);
98         return &create_xml_string(&create_xml_hash($header, $target, $source, $error_string));
99     }
101     # add incoming message to messaging_db
102     my $new_msg_id = 1;
103         my $new_msg_id_sql = "SELECT MAX(CAST(id AS INTEGER)) FROM $main::messaging_tn";
104     my $new_msg_id_res = $main::messaging_db->exec_statement($new_msg_id_sql);
105     if (defined @{@{$new_msg_id_res}[0]}[0] ) {
106         $new_msg_id = int(@{@{$new_msg_id_res}[0]}[0]);
107         $new_msg_id += 1;
108     }
110         # highlight user name and group name
111         my @receiver_l;
112         @users = map(push(@receiver_l, "u_$_"), @users);
113         #@groups = map(push(@receiver_l, "g_$_"), @groups);
114 # TODO
115 # handling, was passiert wenn in einer liste nix drin steht
116 # handling von groups hinzufügen
117         
119     my $func_dic = {table=>$main::messaging_tn,
120         primkey=>[],
121         id=>$new_msg_id,
122         subject=>$subject,
123         message_from=>$from,
124         message_to=>join(",", @receiver_l),
125         flag=>"n",
126         direction=>"in",
127         delivery_time=>$delivery_time,
128         message=>$message,
129         timestamp=>&get_time(),
130     };
131     my $res = $main::messaging_db->add_dbentry($func_dic);
132     if (not $res == 0) {
133         &main::daemon_log("$session_id ERROR: gosaTriggered.pm: cannot add message to message_db: $res", 1);
134     } else {
135         &main::daemon_log("$session_id INFO: gosaTriggered.pm: message with subject '$subject' successfully added to message_db", 5);
136     }
138     return;
141 sub send_user_msg_OLD {
142     my ($msg, $msg_hash, $session_id) = @_ ;
143     my @out_msg_l;
144     my @user_list;
145     my @group_list;
147     my $header = @{$msg_hash->{'header'}}[0];
148     my $source = @{$msg_hash->{'source'}}[0];
149     my $target = @{$msg_hash->{'target'}}[0];
150     my $message = @{$msg_hash->{'message'}}[0];
151     if( exists $msg_hash->{'user'} ) { @user_list = @{$msg_hash->{'user'}}; }
152     if( exists $msg_hash->{'group'} ) { @group_list = @{$msg_hash->{'group'}}; }
154     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
155     if( defined $jobdb_id) {
156         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
157         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
158         my $res = $main::job_db->exec_statement($sql_statement);
159     }
161     # error handling
162     if( not @user_list && not @group_list ) {
163         &main::daemon_log("$session_id WARNING: no user-tag or a group-tag specified in 'send_user_msg'", 3); 
164         return ("<xml><header>$header</header><source>GOSA</source><target>GOSA</target>".
165                 "<error_string>no user-tag or a group-tag specified in 'send_user_msg'</error_string></xml>");
166     }
167     if( not defined $message ) {
168         &main::daemon_log("$session_id WARNING: no message-tag specified in 'send_user_msg'", 3); 
169         return ("<xml><header>$header</header><source>GOSA</source><target>GOSA</target>".
170                 "<error_string>no message-tag specified in 'send_user_msg'</error_string></xml>");
172     }
174     # resolve groups to users
175     my $ldap_handle = &main::get_ldap_handle($session_id);
176     if( @group_list ) {
177         if( not defined $ldap_handle ) {
178             &main::daemon_log("$session_id ERROR: cannot connect to ldap", 1);
179             return ();
180         } 
181         foreach my $group (@group_list) {   # Perform search
182             my $mesg = $ldap_handle->search( 
183                     base => $main::ldap_base,
184                     scope => 'sub',
185                     attrs => ['memberUid'],
186                     filter => "(&(objectClass=posixGroup)(cn=$group)(memberUid=*))");
187             if($mesg->code) {
188                 &main::daemon_log($mesg->error, 1);
189                 return ();
190             }
191             my $entry= $mesg->entry(0);
192             my @users= $entry->get_value("memberUid");
193             foreach my $user (@users) { push(@user_list, $user); }
194         }
195     }
197     # drop multiple users in @user_list
198     my %seen = ();
199     foreach my $user (@user_list) {
200         $seen{$user}++;
201     }
202     @user_list = keys %seen;
204     # build xml messages sended to client where user is logged in
205     foreach my $user (@user_list) {
206         my $sql_statement = "SELECT * FROM $main::login_users_tn WHERE user='$user'"; 
207         my $db_res = $main::login_users_db->select_dbentry($sql_statement);
209         if(0 == keys(%{$db_res})) {
211         } else {
212             while( my($hit, $content) = each %{$db_res} ) {
213                 my $out_hash = &create_xml_hash('send_user_msg', $main::server_address, $content->{'client'});
214                 &add_content2xml_hash($out_hash, 'message', $message);
215                 &add_content2xml_hash($out_hash, 'user', $user);
216                 if( exists $msg_hash->{'jobdb_id'} ) { 
217                     &add_content2xml_hash($out_hash, 'jobdb_id', @{$msg_hash->{'jobdb_id'}}[0]); 
218                 }
219                 my $out_msg = &create_xml_string($out_hash);
220                 push(@out_msg_l, $out_msg);
221             }
222         }
223     }
225     return @out_msg_l;
229 sub recreate_fai_server_db {
230     my ($msg, $msg_hash, $session_id) = @_ ;
231     my $out_msg;
233     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
234     if( defined $jobdb_id) {
235         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
236         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
237         my $res = $main::job_db->exec_statement($sql_statement);
238     }
240     $main::fai_server_db->create_table("new_fai_server", \@main::fai_server_col_names);
241     &main::create_fai_server_db("new_fai_server",undef,"dont", $session_id);
242     $main::fai_server_db->move_table("new_fai_server", $main::fai_server_tn);
244     my @out_msg_l = ( $out_msg );
245     return @out_msg_l;
249 sub recreate_fai_release_db {
250     my ($msg, $msg_hash, $session_id) = @_ ;
251     my $out_msg;
253     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
254     if( defined $jobdb_id) {
255         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
256         &main::daemon_log("$session_id DEBUG: $sql_statement", 7);
257         my $res = $main::job_db->exec_statement($sql_statement);
258     }
260     $main::fai_release_db->create_table("new_fai_release", \@main::fai_release_col_names);
261     &main::create_fai_release_db("new_fai_release", $session_id);
262     $main::fai_release_db->move_table("new_fai_release", $main::fai_release_tn);
264     my @out_msg_l = ( $out_msg );
265     return @out_msg_l;
269 sub recreate_packages_list_db {
270         my ($msg, $msg_hash, $session_id) = @_ ;
271         my $out_msg;
273         my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
274         if( defined $jobdb_id) {
275                 my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
276                 &main::daemon_log("$session_id DEBUG: $sql_statement", 7);
277                 my $res = $main::job_db->exec_statement($sql_statement);
278         }
280         &main::create_packages_list_db;
282         my @out_msg_l = ( $out_msg );
283         return @out_msg_l;
287 sub get_login_usr_for_client {
288     my ($msg, $msg_hash, $session_id) = @_ ;
289     my $header = @{$msg_hash->{'header'}}[0];
290     my $source = @{$msg_hash->{'source'}}[0];
291     my $target = @{$msg_hash->{'target'}}[0];
292     my $client = @{$msg_hash->{'client'}}[0];
294     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
295     if( defined $jobdb_id) {
296         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
297         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
298         my $res = $main::job_db->exec_statement($sql_statement);
299     }
301     $header =~ s/^gosa_//;
303     my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$client' OR macaddress LIKE '$client'";
304     my $res = $main::known_clients_db->select_dbentry($sql_statement);
306     my $out_msg = "<xml><header>$header</header><source>$target</source><target>$source</target>";
307     $out_msg .= &db_res2xml($res);
308     $out_msg .= "</xml>";
310     my @out_msg_l = ( $out_msg );
311     return @out_msg_l;
315 sub get_client_for_login_usr {
316     my ($msg, $msg_hash, $session_id) = @_ ;
317     my $header = @{$msg_hash->{'header'}}[0];
318     my $source = @{$msg_hash->{'source'}}[0];
319     my $target = @{$msg_hash->{'target'}}[0];
321     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
322     if( defined $jobdb_id) {
323         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
324         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
325         my $res = $main::job_db->exec_statement($sql_statement);
326     }
328     my $usr = @{$msg_hash->{'usr'}}[0];
329     $header =~ s/^gosa_//;
331     my $sql_statement = "SELECT * FROM known_clients WHERE login LIKE '%$usr%'";
332     my $res = $main::known_clients_db->select_dbentry($sql_statement);
334     my $out_msg = "<xml><header>$header</header><source>$target</source><target>$source</target>";
335     $out_msg .= &db_res2xml($res);
336     $out_msg .= "</xml>";
337     my @out_msg_l = ( $out_msg );
338     return @out_msg_l;
343 sub ping {
344     my ($msg, $msg_hash, $session_id) = @_ ;
345     my $out_msg = $msg;
346     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
347     if( defined $jobdb_id) {
348         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
349         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
350         my $res = $main::job_db->exec_statement($sql_statement);
351     }
353     $out_msg =~ s/<header>gosa_/<header>/;
355     my @out_msg_l = ( $out_msg );
356     return @out_msg_l;
358 sub new_ping {
359     my ($msg, $msg_hash, $session_id) = @_ ;
360     my ($sql, $res);
361     my $out_msg = $msg;
362     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
363     if( defined $jobdb_id) {
364         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
365         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
366         my $res = $main::job_db->exec_statement($sql_statement);
367     }
369     $out_msg =~ s/<header>gosa_/<header>/;
371     # send message
372     my $header = @{$msg_hash->{header}}[0];
373     my $target = @{$msg_hash->{target}}[0];
375     $sql = "SELECT * FROM $main::known_clients_tn WHERE ((hostname='$target') || (macaddress LIKE '$target'))"; 
376     $res = $main::known_clients_db->exec_statement($sql);
377     my $host_name = @{@$res[0]}[0];
378     $out_msg =~ s/<target>\S+<\/target>/<target>$host_name<\/target>/;
379     $out_msg =~ s/<source>\S+<\/source>/<source>$main::server_address<\/source>/;
380     $out_msg =~ s/<\/xml>/<session_id>$session_id<\/session_id><\/xml>/; 
381     my $host_key = @{@$res[0]}[2];
383     my $error = &main::send_msg_to_target($out_msg, $host_name, $host_key, $header, $session_id);
384     #if ($error != 0) {}
386     my $message_id;
387     while (1) {
388         $sql = "SELECT * FROM $main::incoming_tn WHERE headertag='answer_$session_id'";
389         $res = $main::incoming_db->exec_statement($sql);
390         if (ref @$res[0] eq "ARRAY") { 
391             $message_id = @{@$res[0]}[0];
392             last;
393         }
394         usleep(100000);
395     }
396     my $answer_xml = @{@$res[0]}[3];
397     my %data = ( 'answer_xml'  => 'bin noch da' );
398     my $answer_msg = &build_msg("got_new_ping", "$main::server_address", "GOSA", \%data);
400     $sql = "DELETE FROM $main::incoming_tn WHERE id=$message_id"; 
401     $res = $main::incoming_db->exec_statement($sql);
404     my @answer_msg_l = ( $answer_msg );
405     return @answer_msg_l;
410 sub gen_smb_hash {
411      my ($msg, $msg_hash, $session_id) = @_ ;
412      my $source = @{$msg_hash->{source}}[0];
413      my $target = @{$msg_hash->{target}}[0];
414      my $password = @{$msg_hash->{password}}[0];
416      my %data= ('hash' => join(q[:], ntlmgen $password));
417      my $out_msg = &build_msg("gen_smb_hash", $target, 'GOSA', \%data );
418      return ( $out_msg );
422 sub network_completition {
423      my ($msg, $msg_hash, $session_id) = @_ ;
424      my $source = @{$msg_hash->{source}}[0];
425      my $target = @{$msg_hash->{target}}[0];
426      my $name = @{$msg_hash->{hostname}}[0];
428      # Can we resolv the name?
429      my %data;
430      if (inet_aton($name)){
431              my $address = inet_ntoa(inet_aton($name));
432              my $p = Net::Ping->new('tcp');
433              my $mac= "";
434              if ($p->ping($address, 1)){
435                $mac = Net::ARP::arp_lookup("", $address);
436              }
438              %data= ('ip' => $address, 'mac' => $mac);
439      } else {
440              %data= ('ip' => '', 'mac' => '');
441      }
443      my $out_msg = &build_msg("network_completition", $target, 'GOSA', \%data );
444     
445      return ( $out_msg );
449 sub detect_hardware {
450     my ($msg, $msg_hash, $session_id) = @_ ;
451     # just forward msg to client, but dont forget to split off 'gosa_' in header
452     my $source = @{$msg_hash->{source}}[0];
453     my $target = @{$msg_hash->{target}}[0];
454     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
455     if( defined $jobdb_id) {
456         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
457         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
458         my $res = $main::job_db->exec_statement($sql_statement);
459     }
461     my $out_hash = &create_xml_hash("detect_hardware", $source, $target);
462     if( defined $jobdb_id ) { 
463         &add_content2xml_hash($out_hash, 'jobdb_id', $jobdb_id); 
464     }
465     my $out_msg = &create_xml_string($out_hash);
467     my @out_msg_l = ( $out_msg );
468     return @out_msg_l;
473 sub trigger_reload_ldap_config {
474     my ($msg, $msg_hash, $session_id) = @_ ;
475     my $target = @{$msg_hash->{target}}[0];
477     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
478     if( defined $jobdb_id) {
479         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
480         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
481         my $res = $main::job_db->exec_statement($sql_statement);
482     }
484         my $out_msg = &ClientPackages::new_ldap_config($target, $session_id);
485         my @out_msg_l = ( $out_msg );
487     return @out_msg_l;
491 sub set_activated_for_installation {
492     my ($msg, $msg_hash, $session_id) = @_;
493     my $header = @{$msg_hash->{header}}[0];
494     my $source = @{$msg_hash->{source}}[0];
495     my $target = @{$msg_hash->{target}}[0];
496         my @out_msg_l;
498         # update status of job 
499     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
500     if( defined $jobdb_id) {
501         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
502         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
503         my $res = $main::job_db->exec_statement($sql_statement);
504     }
506         # create set_activated_for_installation message for delivery
507     my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $target);
508     if( defined $jobdb_id ) { 
509         &add_content2xml_hash($out_hash, 'jobdb_id', $jobdb_id); 
510     }
511     my $out_msg = &create_xml_string($out_hash);
512         push(@out_msg_l, $out_msg); 
514     return @out_msg_l;
518 sub trigger_action_faireboot {
519     my ($msg, $msg_hash, $session_id) = @_;
520     my $macaddress = @{$msg_hash->{target}}[0];
521     my $source = @{$msg_hash->{source}}[0];
523     my @out_msg_l;
524     $msg =~ s/<header>gosa_trigger_action_faireboot<\/header>/<header>trigger_action_faireboot<\/header>/;
525     push(@out_msg_l, $msg);
527     &main::change_goto_state('locked', \@{$msg_hash->{target}}, $session_id);
528         &main::change_fai_state('install', \@{$msg_hash->{target}}, $session_id); 
530     # delete all jobs from jobqueue which correspond to fai
531     my $sql_statement = "DELETE FROM $main::job_queue_tn WHERE (macaddress='$macaddress' AND ".
532         "status='processing')";
533     $main::job_db->del_dbentry($sql_statement ); 
534                                              
535     return @out_msg_l;
539 sub trigger_action_lock {
540     my ($msg, $msg_hash, $session_id) = @_;
541     my $macaddress = @{$msg_hash->{target}}[0];
542     my $source = @{$msg_hash->{source}}[0];
544     &main::change_goto_state('locked', \@{$msg_hash->{target}}, $session_id);
545     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
546     if( defined $jobdb_id) {
547         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
548         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
549         my $res = $main::job_db->exec_statement($sql_statement);
550     }
551                                              
552     my @out_msg_l;
553     return @out_msg_l;
557 sub trigger_action_activate {
558     my ($msg, $msg_hash, $session_id) = @_;
559     my $macaddress = @{$msg_hash->{target}}[0];
560     my $source = @{$msg_hash->{source}}[0];
562     &main::change_goto_state('active', \@{$msg_hash->{target}}, $session_id);
563     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
564     if( defined $jobdb_id) {
565         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
566         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
567         my $res = $main::job_db->exec_statement($sql_statement);
568     }
569                                              
570     my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $macaddress);
571     if( exists $msg_hash->{'jobdb_id'} ) { 
572         &add_content2xml_hash($out_hash, 'jobdb_id', @{$msg_hash->{'jobdb_id'}}[0]); 
573     }
574     my $out_msg = &create_xml_string($out_hash);
576     return ( $out_msg );
580 sub trigger_action_localboot {
581     my ($msg, $msg_hash, $session_id) = @_;
582     $msg =~ s/<header>gosa_trigger_action_localboot<\/header>/<header>trigger_action_localboot<\/header>/;
583     &main::change_fai_state('localboot', \@{$msg_hash->{target}}, $session_id);
584     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
585     if( defined $jobdb_id) {
586         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
587         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
588         my $res = $main::job_db->exec_statement($sql_statement);
589     }
591     my @out_msg_l = ($msg);  
592     return @out_msg_l;
596 sub trigger_action_halt {
597     my ($msg, $msg_hash, $session_id) = @_;
598     $msg =~ s/<header>gosa_trigger_action_halt<\/header>/<header>trigger_action_halt<\/header>/;
600     &main::change_fai_state('halt', \@{$msg_hash->{target}}, $session_id);
601     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
602     if( defined $jobdb_id) {
603         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
604         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
605         my $res = $main::job_db->exec_statement($sql_statement);
606     }
608     my @out_msg_l = ($msg);  
609     return @out_msg_l;
613 sub trigger_action_reboot {
614     my ($msg, $msg_hash, $session_id) = @_;
615     $msg =~ s/<header>gosa_trigger_action_reboot<\/header>/<header>trigger_action_reboot<\/header>/;
617     &main::change_fai_state('reboot', \@{$msg_hash->{target}}, $session_id);
618     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
619     if( defined $jobdb_id) {
620         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
621         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
622         my $res = $main::job_db->exec_statement($sql_statement);
623     }
625     my @out_msg_l = ($msg);  
626     return @out_msg_l;
630 sub trigger_action_memcheck {
631     my ($msg, $msg_hash, $session_id) = @_ ;
632     $msg =~ s/<header>gosa_trigger_action_memcheck<\/header>/<header>trigger_action_memcheck<\/header>/;
634     &main::change_fai_state('memcheck', \@{$msg_hash->{target}}, $session_id);
635     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
636     if( defined $jobdb_id) {
637         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
638         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
639         my $res = $main::job_db->exec_statement($sql_statement);
640     }
642     my @out_msg_l = ($msg);  
643     return @out_msg_l;
647 sub trigger_action_reinstall {
648     my ($msg, $msg_hash, $session_id) = @_;
649     $msg =~ s/<header>gosa_trigger_action_reinstall<\/header>/<header>trigger_action_reinstall<\/header>/;
651     &main::change_fai_state('reinstall', \@{$msg_hash->{target}}, $session_id);
653     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
654     my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
655     my @out_msg_l = ($wake_msg, $msg);  
656     return @out_msg_l;
660 sub trigger_action_update {
661     my ($msg, $msg_hash, $session_id) = @_;
662     $msg =~ s/<header>gosa_trigger_action_update<\/header>/<header>trigger_action_update<\/header>/;
664     &main::change_fai_state('update', \@{$msg_hash->{target}}, $session_id);
666     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
667     my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
668     my @out_msg_l = ($wake_msg, $msg);  
669     return @out_msg_l;
673 sub trigger_action_instant_update {
674     my ($msg, $msg_hash, $session_id) = @_;
675     $msg =~ s/<header>gosa_trigger_action_instant_update<\/header>/<header>trigger_action_instant_update<\/header>/;
677     &main::change_fai_state('update', \@{$msg_hash->{target}}, $session_id);
679     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
680     if( defined $jobdb_id) {
681         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
682         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
683         my $res = $main::job_db->exec_statement($sql_statement);
684     }
686     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
687     my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
688     my @out_msg_l = ($wake_msg, $msg);  
689     return @out_msg_l;
693 sub trigger_action_sysinfo {
694     my ($msg, $msg_hash, $session_id) = @_;
695     $msg =~ s/<header>gosa_trigger_action_sysinfo<\/header>/<header>trigger_action_sysinfo<\/header>/;
697     &main::change_fai_state('sysinfo', \@{$msg_hash->{target}}, $session_id);
698     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
699     if( defined $jobdb_id) {
700         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
701         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
702         my $res = $main::job_db->exec_statement($sql_statement);
703     }
705     my @out_msg_l = ($msg);  
706     return @out_msg_l;
710 sub new_key_for_client {
711     my ($msg, $msg_hash, $session_id) = @_;
713     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
714     if( defined $jobdb_id) {
715         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
716         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
717         my $res = $main::job_db->exec_statement($sql_statement);
718     }
719     
720     $msg =~ s/<header>gosa_new_key_for_client<\/header>/<header>new_key<\/header>/;
721     my @out_msg_l = ($msg);  
722     return @out_msg_l;
726 sub trigger_action_rescan {
727     my ($msg, $msg_hash, $session_id) = @_;
729     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
730     if( defined $jobdb_id) {
731         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
732         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
733         my $res = $main::job_db->exec_statement($sql_statement);
734     }
737     $msg =~ s/<header>gosa_trigger_action_rescan<\/header>/<header>trigger_action_rescan<\/header>/;
738     my @out_msg_l = ($msg);  
739     return @out_msg_l;
743 sub trigger_action_wake {
744     my ($msg, $msg_hash, $session_id) = @_;
746     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
747     if( defined $jobdb_id) {
748         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
749         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
750         my $res = $main::job_db->exec_statement($sql_statement);
751     }
754     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
755     my $out_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
756     my @out_msg_l = ($out_msg);  
757     return @out_msg_l;
761 sub get_available_kernel {
762         my ($msg, $msg_hash, $session_id) = @_;
764         my $source = @{$msg_hash->{'source'}}[0];
765         my $target = @{$msg_hash->{'target'}}[0];
766         my $release= @{$msg_hash->{'release'}}[0];
768         my @kernel;
769         # Get Kernel packages for release
770         my $sql_statement = "SELECT * FROM $main::packages_list_tn WHERE distribution='$release' AND package LIKE 'linux\-image\-%'";
771         my $res_hash = $main::packages_list_db->select_dbentry($sql_statement);
772         my %data;
773         my $i=1;
775         foreach my $package (keys %{$res_hash}) {
776                 $data{"answer".$i++}= $data{"answer".$i++}= ${$res_hash}{$package}->{'package'};
777         }
778         $data{"answer".$i++}= "default";
780         my $out_msg = &build_msg("get_available_kernel", $target, "GOSA", \%data);
781         return ( $out_msg );
785 1;