diff --git a/gosa-si/gosa-si-client b/gosa-si/gosa-si-client
index 3b5cd8b7eae8e5ec28abba536e03f53cd3bd77cf..cf352ac42c86df9398af9bbd960aa18c2cfed2e2 100755 (executable)
--- a/gosa-si/gosa-si-client
+++ b/gosa-si/gosa-si-client
# REVISION: ---
#===============================================================================
+my $client_version = '$HeadURL$:$Rev$';
+
use strict;
use warnings;
use Getopt::Long;
use XML::Simple;
use File::Basename;
use File::Spec;
+use Fcntl;
# Workaround: need pure perl to make it work with UTF-8 :-(
$XML::Simple::PREFERRED_PARSER= "XML::SAX::PurePerl";
-my $client_version = '$HeadURL$:$Rev$';
my $client_headURL;
my $client_revision;
my $client_status;
my (%cfg_defaults, $foreground, $verbose, $pid_file, $procid, $pid, $log_file, $fai_logpath);
my ($server_ip, $server_port, $server_timeout, $server_domain, $server_key_lifetime);
my ($client_port, $ldap_enabled, $ldap_config, $pam_config, $nss_config);
+my ($root_uid, $adm_gid);
my $xml;
my $event_hash;
my $default_server_key;
if(not defined $msg) { return }
if(not defined $level) { $level = 1 }
if(defined $log_file){
- open(LOG_HANDLE, ">>$log_file");
- if(not defined open( LOG_HANDLE, ">>$log_file" )) {
- print STDERR "cannot open $log_file: $!";
- return
- }
+ my $open_log_fh = sysopen(LOG_HANDLE, $log_file, O_WRONLY | O_CREAT | O_APPEND , 0440);
+ if(not $open_log_fh) {
+ print STDERR "cannot open $log_file: $!";
+ return;
+ }
+ # check owner and group of log_file and update settings if necessary
+ my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($log_file);
+ if((not $uid eq $root_uid) || (not $gid eq $adm_gid)) {
+ chown($root_uid, $adm_gid, $log_file);
+ }
+
chomp($msg);
if($level <= $verbose){
my ($seconds, $minutes, $hours, $monthday, $month,
my ($fai_log_dir) = @_ ;
my $FAI_DIR;
+ # Directory for log files after a softupdate
my $log_dir = File::Spec->catdir($fai_log_dir, "localhost/last");
- if (not -r -d $log_dir) {
- daemon_log("ERROR: cannot open directory $log_dir", 1);
- return;
+ if (not -d $log_dir) {
+ # Directory for log files after a new installation
+ $log_dir = "/tmp/fai";
+ if (not -d $log_dir) {
+ daemon_log("ERROR: cannot open directory $log_dir", 1);
+ return;
+ }
}
opendir($FAI_DIR, "$log_dir");
my $log = "log_file:$log_file:";
$log_file = File::Spec->catfile( $log_dir, $log_file );
- if (not -r -f $log_file) {
+ if (not -f $log_file) {
daemon_log("ERROR: cannot read $log_file", 1);
next;
}
- if (-r -f $log_file) {
- open(FILE, "<$log_file");
- my @lines = <FILE> ;
- close (FILE);
- my $log_string = join("", @lines);
- $log .= &encode_base64($log_string);
- push(@log_list, $log);
- }
+ open(FILE, "<$log_file");
+ my @lines = <FILE> ;
+ close (FILE);
+ my $log_string = join("", @lines);
+ $log .= &encode_base64($log_string);
+ push(@log_list, $log);
}
my $all_log_string = join("\n", @log_list);
$client_status = "developmental" ;
}
-# Prepare log file
-my $root_uid = getpwnam('root');
-my $adm_gid = getgrnam('adm');
-chmod(0640, $log_file);
-chown($root_uid, $adm_gid, $log_file);
-
+# Determine root uid and adm gid, used for creating log files
+$root_uid = getpwnam('root');
+$adm_gid = getgrnam('adm');
+if(not defined $adm_gid){
+ $adm_gid = getgrnam('root');
+}
daemon_log(" ", 1);
daemon_log("$prg started!", 1);