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