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 "network_completition",
12 "set_activated_for_installation",
13 "new_key_for_client",
14 "detect_hardware",
15 "get_login_usr",
16 "get_login_client",
17 "trigger_action_localboot",
18 "trigger_action_faireboot",
19 "trigger_action_reboot",
20 "trigger_action_halt",
21 "trigger_action_update",
22 "trigger_action_reinstall",
23 "trigger_action_memcheck",
24 "trigger_action_sysinfo",
25 "trigger_action_instant_update",
26 "trigger_action_rescan",
27 "trigger_action_wake",
28 "recreate_fai_server_db",
29 );
30 @EXPORT = @events;
32 use strict;
33 use warnings;
34 use GOSA::GosaSupportDaemon;
35 use Data::Dumper;
36 use Crypt::SmbHash;
37 use Net::ARP;
38 use Net::Ping;
39 use Socket;
40 use utf8;
42 BEGIN {}
44 END {}
46 ### Start ######################################################################
48 #&main::read_configfile($main::cfg_file, %cfg_defaults);
50 sub get_events {
51 return \@events;
52 }
55 sub recreate_fai_server_db {
56 my ($msg, $msg_hash, $session_id) = @_ ;
58 $main::fai_server_db->create_table("new_fai_server", \@main::fai_server_col_names);
59 &main::create_fai_server_db("new_fai_server");
60 $main::fai_server_db->move_table("new_fai_server", $main::fai_server_tn);
62 return;
63 }
66 sub get_login_usr_for_client {
67 my ($msg, $msg_hash, $session_id) = @_ ;
68 my $header = @{$msg_hash->{'header'}}[0];
69 my $source = @{$msg_hash->{'source'}}[0];
70 my $target = @{$msg_hash->{'target'}}[0];
71 my $client = @{$msg_hash->{'client'}}[0];
73 $header =~ s/^gosa_//;
75 my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$client' OR macaddress='$client'";
76 my $res = $main::known_clients_db->select_dbentry($sql_statement);
78 my $out_msg = "<xml><header>$header</header><source>$target</source><target>$source</target>";
79 $out_msg .= &db_res2xml($res);
80 $out_msg .= "</xml>";
82 my @out_msg_l = ( $out_msg );
83 return @out_msg_l;
84 }
87 sub get_client_for_login_usr {
88 my ($msg, $msg_hash, $session_id) = @_ ;
89 my $header = @{$msg_hash->{'header'}}[0];
90 my $source = @{$msg_hash->{'source'}}[0];
91 my $target = @{$msg_hash->{'target'}}[0];
92 my $usr = @{$msg_hash->{'usr'}}[0];
93 $header =~ s/^gosa_//;
95 my $sql_statement = "SELECT * FROM known_clients WHERE login LIKE '%$usr%'";
96 my $res = $main::known_clients_db->select_dbentry($sql_statement);
98 my $out_msg = "<xml><header>$header</header><source>$target</source><target>$source</target>";
99 $out_msg .= &db_res2xml($res);
100 $out_msg .= "</xml>";
101 my @out_msg_l = ( $out_msg );
102 return @out_msg_l;
104 }
107 sub ping {
108 my ($msg, $msg_hash, $session_id) = @_ ;
109 my $source = @{$msg_hash->{source}}[0];
110 my $target = @{$msg_hash->{target}}[0];
111 my $out_hash = &create_xml_hash("ping", $source, $target);
112 &add_content2xml_hash($out_hash, "session_id", $session_id);
113 my $out_msg = &create_xml_string($out_hash);
115 my @out_msg_l = ( $out_msg );
116 return @out_msg_l;
117 }
120 sub gen_smb_hash {
121 my ($msg, $msg_hash, $session_id) = @_ ;
122 my $source = @{$msg_hash->{source}}[0];
123 my $target = @{$msg_hash->{target}}[0];
124 my $password = @{$msg_hash->{password}}[0];
126 my %data= ('hash' => join(q[:], ntlmgen $password));
127 my $out_msg = &build_msg("gen_smb_hash", $target, 'GOSA', \%data );
128 return ( $out_msg );
129 }
132 sub network_completition {
133 my ($msg, $msg_hash, $session_id) = @_ ;
134 my $source = @{$msg_hash->{source}}[0];
135 my $target = @{$msg_hash->{target}}[0];
136 my $name = @{$msg_hash->{hostname}}[0];
138 # Can we resolv the name?
139 my %data;
140 if (inet_aton($name)){
141 my $address = inet_ntoa(inet_aton($name));
142 my $p = Net::Ping->new('tcp');
143 my $mac= "";
144 if ($p->ping($address, 1)){
145 $mac = Net::ARP::arp_lookup("", $address);
146 }
148 %data= ('ip' => $address, 'mac' => $mac);
149 } else {
150 %data= ('ip' => '', 'mac' => '');
151 }
153 my $out_msg = &build_msg("network_completition", $target, 'GOSA', \%data );
155 return ( $out_msg );
156 }
159 sub detect_hardware {
160 my ($msg, $msg_hash) = @_ ;
161 # just forward msg to client, but dont forget to split off 'gosa_' in header
162 my $source = @{$msg_hash->{source}}[0];
163 my $target = @{$msg_hash->{target}}[0];
165 my $out_hash = &create_xml_hash("detect_hardware", $source, $target);
166 my $out_msg = &create_xml_string($out_hash);
168 my @out_msg_l = ( $out_msg );
169 return @out_msg_l;
171 }
174 sub trigger_reload_ldap_config {
175 my ($msg, $msg_hash) = @_ ;
176 my $target = @{$msg_hash->{target}}[0];
178 my $out_hash = &create_xml_hash("reload_ldap_config", $main::server_address, $main::server_address, $target);
179 my $out_msg = &create_xml_string($out_hash);
180 my @out_msg_l;
181 push(@out_msg_l, $out_msg);
182 return @out_msg_l;
183 }
186 sub set_activated_for_installation {
187 my ($msg, $msg_hash) = @_;
189 my $header = @{$msg_hash->{header}}[0];
190 my $source = @{$msg_hash->{source}}[0];
191 my $target = @{$msg_hash->{target}}[0];
193 my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $target);
194 my $out_msg = &create_xml_string($out_hash);
196 my @out_msg_l = ( $out_msg );
197 return @out_msg_l;
198 }
201 sub trigger_action_faireboot {
202 my ($msg, $msg_hash) = @_;
203 $msg =~ s/<header>gosa_trigger_action_faireboot<\/header>/<header>trigger_action_faireboot<\/header>/;
204 my @out_msg_l = ($msg);
205 return @out_msg_l;
206 }
209 sub trigger_action_localboot {
210 my ($msg, $msg_hash) = @_;
211 $msg =~ s/<header>gosa_trigger_action_localboot<\/header>/<header>trigger_action_localboot<\/header>/;
212 my @out_msg_l = ($msg);
213 return @out_msg_l;
214 }
217 sub trigger_action_halt {
218 my ($msg, $msg_hash) = @_;
219 $msg =~ s/<header>gosa_trigger_action_halt<\/header>/<header>trigger_action_halt<\/header>/;
220 my @out_msg_l = ($msg);
221 return @out_msg_l;
222 }
225 sub trigger_action_reboot {
226 my ($msg, $msg_hash) = @_;
227 $msg =~ s/<header>gosa_trigger_action_reboot<\/header>/<header>trigger_action_reboot<\/header>/;
228 my @out_msg_l = ($msg);
229 return @out_msg_l;
230 }
233 sub trigger_action_memcheck {
234 my ($msg, $msg_hash) = @_ ;
235 $msg =~ s/<header>gosa_trigger_action_memcheck<\/header>/<header>trigger_action_memcheck<\/header>/;
236 my @out_msg_l = ($msg);
237 return @out_msg_l;
238 }
241 sub trigger_action_reinstall {
242 my ($msg, $msg_hash) = @_;
243 $msg =~ s/<header>gosa_trigger_action_reinstall<\/header>/<header>trigger_action_reinstall<\/header>/;
244 my @out_msg_l = ($msg);
245 return @out_msg_l;
246 }
249 sub trigger_action_update {
250 my ($msg, $msg_hash) = @_;
251 $msg =~ s/<header>gosa_trigger_action_update<\/header>/<header>trigger_action_update<\/header>/;
252 my @out_msg_l = ($msg);
253 return @out_msg_l;
254 }
257 sub trigger_action_instant_update {
258 my ($msg, $msg_hash) = @_;
259 $msg =~ s/<header>gosa_trigger_action_instant_update<\/header>/<header>trigger_action_instant_update<\/header>/;
260 my @out_msg_l = ($msg);
261 return @out_msg_l;
262 }
265 sub trigger_action_sysinfo {
266 my ($msg, $msg_hash) = @_;
267 $msg =~ s/<header>gosa_trigger_action_sysinfo<\/header>/<header>trigger_action_sysinfo<\/header>/;
268 my @out_msg_l = ($msg);
269 return @out_msg_l;
270 }
273 sub new_key_for_client {
274 my ($msg, $msg_hash) = @_;
275 $msg =~ s/<header>gosa_new_key_for_client<\/header>/<header>new_key<\/header>/;
276 my @out_msg_l = ($msg);
277 return @out_msg_l;
278 }
281 sub trigger_action_rescan {
282 my ($msg, $msg_hash) = @_;
283 $msg =~ s/<header>gosa_trigger_action_rescan<\/header>/<header>trigger_action_rescan<\/header>/;
284 my @out_msg_l = ($msg);
285 return @out_msg_l;
286 }
289 sub trigger_action_wake {
290 my ($msg, $msg_hash) = @_;
291 my %data = ( 'macAddress' => \@{$msg_hash->{macAddress}} );
292 my $out_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
293 my @out_msg_l = ($out_msg);
294 return @out_msg_l;
295 }
297 1;