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];
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
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;
139 }
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;
226 }
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;
246 }
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;
266 }
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;
284 }
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;
312 }
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;
340 }
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;
357 }
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;
408 }
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 );
421 }
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 );
447 return ( $out_msg );
448 }
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;
472 }
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 = &SIPackages::new_ldap_config($target, $session_id);
487 my @out_msg_l = ( $out_msg );
489 return @out_msg_l;
490 }
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;
517 }
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 );
537 return @out_msg_l;
538 }
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 }
554 my @out_msg_l;
555 return @out_msg_l;
556 }
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 }
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 );
579 }
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;
595 }
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;
612 }
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;
629 }
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;
646 }
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;
659 }
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;
672 }
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;
692 }
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;
709 }
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 }
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;
725 }
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;
742 }
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;
760 }
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 );
784 }
787 1;