X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fgosa-si-client;h=52ad1818a61f2e2289b3d54eb629b06ec5e2e429;hb=086d7aa447b6ead55219fd7021a7a5490b490979;hp=9f945819e39c650c51ab7666334623fd786d73d1;hpb=5422ac98bd4bde676297fd49079200ba424b11d9;p=gosa.git diff --git a/gosa-si/gosa-si-client b/gosa-si/gosa-si-client index 9f945819e..52ad1818a 100755 --- a/gosa-si/gosa-si-client +++ b/gosa-si/gosa-si-client @@ -37,6 +37,7 @@ use MIME::Base64; 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"; @@ -79,6 +80,9 @@ our $prg= basename($0); # 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"], @@ -647,9 +651,10 @@ sub write_to_file { chomp($string); - open(FILE, ">> $file"); - print FILE $string."\n"; - close(FILE); + if (open(FILE, ">> $file")){ + print FILE $string."\n"; + close(FILE); + } } return; @@ -899,7 +904,7 @@ sub import_events { eval{ require $event; }; if( $@ ) { daemon_log("ERROR: import of event module '$event' failed", 1); - daemon_log("$@", 8); + daemon_log("$@", 1); next; } @@ -977,10 +982,12 @@ sub generic_file_error { 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 ) { @@ -997,10 +1004,55 @@ sub fifo_got_record { &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'); @@ -1076,7 +1128,8 @@ sub server_input { $REGISTERED = 1; } else { - &send_msg_to_target($answer, $server_address, $server_key); + $answer =~ /
(\S+)<\/header>/; + &send_msg_to_target($answer, $server_address, $server_key, $1); } # postprocessing @@ -1111,9 +1164,9 @@ GetOptions("h|help" => \&usage, # 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