Code

wrong if-clause
[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     #&main::daemon_log("$sql",1);     
377     $res = $main::known_clients_db->exec_statement($sql);
378     #&main::daemon_log(Dumper($res), 1);    
379     my $host_name = @{@$res[0]}[0];
380     $out_msg =~ s/<target>\S+<\/target>/<target>$host_name<\/target>/;
381     $out_msg =~ s/<source>\S+<\/source>/<source>$main::server_address<\/source>/;
382     $out_msg =~ s/<\/xml>/<session_id>$session_id<\/session_id><\/xml>/; 
383     my $host_key = @{@$res[0]}[2];
385     my $error = &main::send_msg_to_target($out_msg, $host_name, $host_key, $header, $session_id);
386     #if ($error != 0) {}
388     my $message_id;
389     while (1) {
390         $sql = "SELECT * FROM $main::incoming_tn WHERE headertag='answer_$session_id'";
391         $res = $main::incoming_db->exec_statement($sql);
392         if (ref @$res[0] eq "ARRAY") { 
393             $message_id = @{@$res[0]}[0];
394             last;
395         }
396         usleep(100000);
397     }
398     my $answer_xml = @{@$res[0]}[3];
399     my %data = ( 'answer_xml'  => 'bin noch da' );
400     my $answer_msg = &build_msg("got_ping", "$main::server_address", "GOSA", \%data);
402     $sql = "DELETE FROM $main::incoming_tn WHERE id=$message_id"; 
403     $res = $main::incoming_db->exec_statement($sql);
406     my @answer_msg_l = ( $answer_msg );
407     return @answer_msg_l;
412 sub gen_smb_hash {
413      my ($msg, $msg_hash, $session_id) = @_ ;
414      my $source = @{$msg_hash->{source}}[0];
415      my $target = @{$msg_hash->{target}}[0];
416      my $password = @{$msg_hash->{password}}[0];
418      my %data= ('hash' => join(q[:], ntlmgen $password));
419      my $out_msg = &build_msg("gen_smb_hash", $target, 'GOSA', \%data );
420      return ( $out_msg );
424 sub network_completition {
425      my ($msg, $msg_hash, $session_id) = @_ ;
426      my $source = @{$msg_hash->{source}}[0];
427      my $target = @{$msg_hash->{target}}[0];
428      my $name = @{$msg_hash->{hostname}}[0];
430      # Can we resolv the name?
431      my %data;
432      if (inet_aton($name)){
433              my $address = inet_ntoa(inet_aton($name));
434              my $p = Net::Ping->new('tcp');
435              my $mac= "";
436              if ($p->ping($address, 1)){
437                $mac = Net::ARP::arp_lookup("", $address);
438              }
440              %data= ('ip' => $address, 'mac' => $mac);
441      } else {
442              %data= ('ip' => '', 'mac' => '');
443      }
445      my $out_msg = &build_msg("network_completition", $target, 'GOSA', \%data );
446     
447      return ( $out_msg );
451 sub detect_hardware {
452     my ($msg, $msg_hash, $session_id) = @_ ;
453     # just forward msg to client, but dont forget to split off 'gosa_' in header
454     my $source = @{$msg_hash->{source}}[0];
455     my $target = @{$msg_hash->{target}}[0];
456     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
457     if( defined $jobdb_id) {
458         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
459         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
460         my $res = $main::job_db->exec_statement($sql_statement);
461     }
463     my $out_hash = &create_xml_hash("detect_hardware", $source, $target);
464     if( defined $jobdb_id ) { 
465         &add_content2xml_hash($out_hash, 'jobdb_id', $jobdb_id); 
466     }
467     my $out_msg = &create_xml_string($out_hash);
469     my @out_msg_l = ( $out_msg );
470     return @out_msg_l;
475 sub trigger_reload_ldap_config {
476     my ($msg, $msg_hash, $session_id) = @_ ;
477     my $target = @{$msg_hash->{target}}[0];
479     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
480     if( defined $jobdb_id) {
481         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
482         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
483         my $res = $main::job_db->exec_statement($sql_statement);
484     }
486         my $out_msg = &ClientPackages::new_ldap_config($target, $session_id);
487         my @out_msg_l = ( $out_msg );
489     return @out_msg_l;
493 sub set_activated_for_installation {
494     my ($msg, $msg_hash, $session_id) = @_;
495     my $header = @{$msg_hash->{header}}[0];
496     my $source = @{$msg_hash->{source}}[0];
497     my $target = @{$msg_hash->{target}}[0];
498         my @out_msg_l;
500         # update status of job 
501     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
502     if( defined $jobdb_id) {
503         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
504         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
505         my $res = $main::job_db->exec_statement($sql_statement);
506     }
508         # create set_activated_for_installation message for delivery
509     my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $target);
510     if( defined $jobdb_id ) { 
511         &add_content2xml_hash($out_hash, 'jobdb_id', $jobdb_id); 
512     }
513     my $out_msg = &create_xml_string($out_hash);
514         push(@out_msg_l, $out_msg); 
516     return @out_msg_l;
520 sub trigger_action_faireboot {
521     my ($msg, $msg_hash, $session_id) = @_;
522     my $macaddress = @{$msg_hash->{target}}[0];
523     my $source = @{$msg_hash->{source}}[0];
525     my @out_msg_l;
526     $msg =~ s/<header>gosa_trigger_action_faireboot<\/header>/<header>trigger_action_faireboot<\/header>/;
527     push(@out_msg_l, $msg);
529     &main::change_goto_state('locked', \@{$msg_hash->{target}}, $session_id);
530         &main::change_fai_state('install', \@{$msg_hash->{target}}, $session_id); 
532     # delete all jobs from jobqueue which correspond to fai
533     my $sql_statement = "DELETE FROM $main::job_queue_tn WHERE (macaddress='$macaddress' AND ".
534         "status='processing')";
535     $main::job_db->del_dbentry($sql_statement ); 
536                                              
537     return @out_msg_l;
541 sub trigger_action_lock {
542     my ($msg, $msg_hash, $session_id) = @_;
543     my $macaddress = @{$msg_hash->{target}}[0];
544     my $source = @{$msg_hash->{source}}[0];
546     &main::change_goto_state('locked', \@{$msg_hash->{target}}, $session_id);
547     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
548     if( defined $jobdb_id) {
549         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
550         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
551         my $res = $main::job_db->exec_statement($sql_statement);
552     }
553                                              
554     my @out_msg_l;
555     return @out_msg_l;
559 sub trigger_action_activate {
560     my ($msg, $msg_hash, $session_id) = @_;
561     my $macaddress = @{$msg_hash->{target}}[0];
562     my $source = @{$msg_hash->{source}}[0];
564     &main::change_goto_state('active', \@{$msg_hash->{target}}, $session_id);
565     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
566     if( defined $jobdb_id) {
567         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
568         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
569         my $res = $main::job_db->exec_statement($sql_statement);
570     }
571                                              
572     my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $macaddress);
573     if( exists $msg_hash->{'jobdb_id'} ) { 
574         &add_content2xml_hash($out_hash, 'jobdb_id', @{$msg_hash->{'jobdb_id'}}[0]); 
575     }
576     my $out_msg = &create_xml_string($out_hash);
578     return ( $out_msg );
582 sub trigger_action_localboot {
583     my ($msg, $msg_hash, $session_id) = @_;
584     $msg =~ s/<header>gosa_trigger_action_localboot<\/header>/<header>trigger_action_localboot<\/header>/;
585     &main::change_fai_state('localboot', \@{$msg_hash->{target}}, $session_id);
586     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
587     if( defined $jobdb_id) {
588         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
589         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
590         my $res = $main::job_db->exec_statement($sql_statement);
591     }
593     my @out_msg_l = ($msg);  
594     return @out_msg_l;
598 sub trigger_action_halt {
599     my ($msg, $msg_hash, $session_id) = @_;
600     $msg =~ s/<header>gosa_trigger_action_halt<\/header>/<header>trigger_action_halt<\/header>/;
602     &main::change_fai_state('halt', \@{$msg_hash->{target}}, $session_id);
603     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
604     if( defined $jobdb_id) {
605         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
606         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
607         my $res = $main::job_db->exec_statement($sql_statement);
608     }
610     my @out_msg_l = ($msg);  
611     return @out_msg_l;
615 sub trigger_action_reboot {
616     my ($msg, $msg_hash, $session_id) = @_;
617     $msg =~ s/<header>gosa_trigger_action_reboot<\/header>/<header>trigger_action_reboot<\/header>/;
619     &main::change_fai_state('reboot', \@{$msg_hash->{target}}, $session_id);
620     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
621     if( defined $jobdb_id) {
622         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
623         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
624         my $res = $main::job_db->exec_statement($sql_statement);
625     }
627     my @out_msg_l = ($msg);  
628     return @out_msg_l;
632 sub trigger_action_memcheck {
633     my ($msg, $msg_hash, $session_id) = @_ ;
634     $msg =~ s/<header>gosa_trigger_action_memcheck<\/header>/<header>trigger_action_memcheck<\/header>/;
636     &main::change_fai_state('memcheck', \@{$msg_hash->{target}}, $session_id);
637     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
638     if( defined $jobdb_id) {
639         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
640         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
641         my $res = $main::job_db->exec_statement($sql_statement);
642     }
644     my @out_msg_l = ($msg);  
645     return @out_msg_l;
649 sub trigger_action_reinstall {
650     my ($msg, $msg_hash, $session_id) = @_;
651     $msg =~ s/<header>gosa_trigger_action_reinstall<\/header>/<header>trigger_action_reinstall<\/header>/;
653     &main::change_fai_state('reinstall', \@{$msg_hash->{target}}, $session_id);
655     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
656     my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
657     my @out_msg_l = ($wake_msg, $msg);  
658     return @out_msg_l;
662 sub trigger_action_update {
663     my ($msg, $msg_hash, $session_id) = @_;
664     $msg =~ s/<header>gosa_trigger_action_update<\/header>/<header>trigger_action_update<\/header>/;
666     &main::change_fai_state('update', \@{$msg_hash->{target}}, $session_id);
668     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
669     my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
670     my @out_msg_l = ($wake_msg, $msg);  
671     return @out_msg_l;
675 sub trigger_action_instant_update {
676     my ($msg, $msg_hash, $session_id) = @_;
677     $msg =~ s/<header>gosa_trigger_action_instant_update<\/header>/<header>trigger_action_instant_update<\/header>/;
679     &main::change_fai_state('update', \@{$msg_hash->{target}}, $session_id);
681     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
682     if( defined $jobdb_id) {
683         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
684         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
685         my $res = $main::job_db->exec_statement($sql_statement);
686     }
688     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
689     my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
690     my @out_msg_l = ($wake_msg, $msg);  
691     return @out_msg_l;
695 sub trigger_action_sysinfo {
696     my ($msg, $msg_hash, $session_id) = @_;
697     $msg =~ s/<header>gosa_trigger_action_sysinfo<\/header>/<header>trigger_action_sysinfo<\/header>/;
699     &main::change_fai_state('sysinfo', \@{$msg_hash->{target}}, $session_id);
700     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
701     if( defined $jobdb_id) {
702         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
703         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
704         my $res = $main::job_db->exec_statement($sql_statement);
705     }
707     my @out_msg_l = ($msg);  
708     return @out_msg_l;
712 sub new_key_for_client {
713     my ($msg, $msg_hash, $session_id) = @_;
715     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
716     if( defined $jobdb_id) {
717         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
718         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
719         my $res = $main::job_db->exec_statement($sql_statement);
720     }
721     
722     $msg =~ s/<header>gosa_new_key_for_client<\/header>/<header>new_key<\/header>/;
723     my @out_msg_l = ($msg);  
724     return @out_msg_l;
728 sub trigger_action_rescan {
729     my ($msg, $msg_hash, $session_id) = @_;
731     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
732     if( defined $jobdb_id) {
733         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
734         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
735         my $res = $main::job_db->exec_statement($sql_statement);
736     }
739     $msg =~ s/<header>gosa_trigger_action_rescan<\/header>/<header>trigger_action_rescan<\/header>/;
740     my @out_msg_l = ($msg);  
741     return @out_msg_l;
745 sub trigger_action_wake {
746     my ($msg, $msg_hash, $session_id) = @_;
748     my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
749     if( defined $jobdb_id) {
750         my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id=jobdb_id";
751         &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
752         my $res = $main::job_db->exec_statement($sql_statement);
753     }
756     my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
757     my $out_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
758     my @out_msg_l = ($out_msg);  
759     return @out_msg_l;
763 sub get_available_kernel {
764         my ($msg, $msg_hash, $session_id) = @_;
766         my $source = @{$msg_hash->{'source'}}[0];
767         my $target = @{$msg_hash->{'target'}}[0];
768         my $release= @{$msg_hash->{'release'}}[0];
770         my @kernel;
771         # Get Kernel packages for release
772         my $sql_statement = "SELECT * FROM $main::packages_list_tn WHERE distribution='$release' AND package LIKE 'linux\-image\-%'";
773         my $res_hash = $main::packages_list_db->select_dbentry($sql_statement);
774         my %data;
775         my $i=1;
777         foreach my $package (keys %{$res_hash}) {
778                 $data{"answer".$i++}= $data{"answer".$i++}= ${$res_hash}{$package}->{'package'};
779         }
780         $data{"answer".$i++}= "default";
782         my $out_msg = &build_msg("get_available_kernel", $target, "GOSA", \%data);
783         return ( $out_msg );
787 1;