diff --git a/gosa-si/gosa-si-client b/gosa-si/gosa-si-client
index 9f945819e39c650c51ab7666334623fd786d73d1..52ad1818a61f2e2289b3d54eb629b06ec5e2e429 100755 (executable)
--- a/gosa-si/gosa-si-client
+++ b/gosa-si/gosa-si-client
use XML::Simple;
use Net::DNS;
use File::Basename;
+use File::Spec;
my $event_dir = "/usr/lib/gosa-si/client/events";
use lib "/usr/lib/gosa-si/client/events";
# all x seconds the client reports logged_in users to gosa-si-server
my $trigger_logged_in_users_report_delay = 600;
+# directory where all log files from installation are stored
+my $fai_log_dir = "/tmp/fai";
+
%cfg_defaults = (
"general" =>
{"log-file" => [\$log_file, "/var/run/".$prg.".log"],
chomp($string);
- open(FILE, ">> $file");
- print FILE $string."\n";
- close(FILE);
+ if (open(FILE, ">> $file")){
+ print FILE $string."\n";
+ close(FILE);
+ }
}
return;
eval{ require $event; };
if( $@ ) {
daemon_log("ERROR: import of event module '$event' failed", 1);
- daemon_log("$@", 8);
+ daemon_log("$@", 1);
next;
}
return;
}
+
sub fifo_got_record {
my $file_record = $_[ARG0];
my $header;
my $content = "";
+ daemon_log("DEBUG: fifo got record: $file_record", 7);
$file_record =~ /^(\S+)[ ]?([\s\S]+)?$/;
if( defined $1 ) {
&add_content2xml_hash($clmsg_hash, "macaddress", $client_mac_address);
my $clmsg = &create_xml_string($clmsg_hash);
&send_msg_to_target($clmsg, $server_address, $server_key, "CLMSG_$header");
+
+ # if installation finished, save all log files
+ if ($file_record eq "TASKBEGIN finish") {
+ &save_fai_log($fai_log_dir);
+ }
+
return;
}
+sub save_fai_log {
+ my ($fai_log_dir) = @_ ;
+ my $FAI_DIR;
+
+ opendir($FAI_DIR, $fai_log_dir);
+ if (not defined $FAI_DIR) {
+ daemon_log("ERROR: can not open directory $fai_log_dir: $!", 1);
+ return;
+ }
+
+ my @log_files = readdir($FAI_DIR);
+ closedir($FAI_DIR);
+ my @log_list;
+
+ foreach my $log_file (@log_files) {
+ if( $log_file eq "." || $log_file eq ".." ) { next; }
+ my $log = "log_file:$log_file\n";
+ $log_file = File::Spec->catfile( $fai_log_dir, $log_file );
+ open(my $FILE, "<$log_file");
+ if (not defined $FILE ) {
+ daemon_log("ERROR: can not open '$log_file': $!", 1);
+ next;
+ }
+ my @lines = <$FILE>;
+ my $log_string = join("", @lines);
+ $log .= &encode_base64($log_string);
+ push(@log_list, $log);
+ close ($FILE);
+ }
+
+ my $all_log_string = join("\n", @log_list);
+ my $msg_hash = &create_xml_hash("CLMSG_save_fai_log", $client_address, $server_address, $all_log_string);
+ &add_content2xml_hash($msg_hash, "macaddress", $client_mac_address);
+ my $msg = &create_xml_string($msg_hash);
+ &send_msg_to_target($msg, $server_address, $server_key, "CLMSG_save_fai_log");
+
+}
+
+
sub _start {
my ($kernel, $heap) = @_[KERNEL, HEAP];
$kernel->alias_set('client_session');
$REGISTERED = 1;
}
else {
- &send_msg_to_target($answer, $server_address, $server_key);
+ $answer =~ /<header>(\S+)<\/header>/;
+ &send_msg_to_target($answer, $server_address, $server_key, $1);
}
# postprocessing
# forward error messages to logfile
if ( ! $foreground ) {
- open STDIN, '/dev/null' or die "Can’t read /dev/null: $!";
- open STDOUT, '>>/dev/null' or die "Can't write to /dev/null: $!";
- open STDERR, '>>/dev/null' or die "Can't write to /dev/null: $!";
+ open( STDIN, '+>/dev/null' );
+ open( STDOUT, '+>&STDIN' );
+ open( STDERR, '+>&STDIN' );
}
# Just fork, if we are not in foreground mode