index 5ce0d368fc429a0d9661857f1952bbafb510f8e3..9ee49e936f764ea16fdd3dd501b6299d00869b87 100755 (executable)
our $server_key;
our $opts_dnslookup;
-our $FIFO_FD = undef;
-
# default variables
our $REGISTERED = 0;
our $REGISTRATION_IN_PROGRESS = 0;
return 1;
}
-sub sig_die_handler
-{
- my @loc = caller(0);
- daemon_log( "SIGDIE line " . $loc[2] . ": " . $_[0], 1 );
- clean_shutdown();
- return 1;
-}
-
$SIG{'INT'} = \&sig_int_or_term_handler;
$SIG{'TERM'} = \&sig_int_or_term_handler;
$SIG{'__WARN__'} = \&sig_warn_handler;
-$SIG{'__DIE__'} = \&sig_die_handler;
$SIG{'USR1'} = 'IGNORE';
$SIG{'USR2'} = 'IGNORE';
if ($REGISTERED == 1) {
$REGISTERED = 0; # if server is not available, cause reregistering
daemon_log("INFO: cause reregistering at gosa-si-server", 5);
+ sleep(2);
$global_kernel->post('client_session', 'register_at_gosa_si_server');
}
# append shifted gosa-si-server at the end of @servers, so looking for servers never stop if
# a registration never occured
my $server = shift(@servers);
+ &main::daemon_log("INFO: Trying to register with server $server", 3);
push(@servers, $server);
($server_ip = $server) =~ s/:.*$//;
$server_address = $server;
# if delivery of registration msg succeed
if(defined($res) and $res eq "0") {
- # reset try_to_register
- $REGISTRATION_TRIES = 0;
# Set fixed client address and mac address
$client_ip= &get_local_ip_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/));
last;
# delivery of registration msg failed
- } elsif($REGISTRATION_TRIES >= scalar(@servers)) {
+ } elsif($REGISTRATION_TRIES > scalar(@servers)) {
last;
}
} # end of while
# one circle through all servers finished and no registration succeed
- if ( $REGISTRATION_TRIES >= (scalar(@servers)) ) {
+ if ( $REGISTRATION_TRIES > (scalar(@servers)) ) {
+ $REGISTRATION_TRIES = 0;
&write_to_file("gosa-si-no-server-available", $fai_logpath);
- $kernel->delay_set('register_at_gosa_si_server', $delay_set_time);
+ daemon_log("WARNING: Could not register with any of the servers, waiting $delay_set_time seconds",3);
+ sleep($delay_set_time);
+ $kernel->post('client_session', 'register_at_gosa_si_server');
# delivery of registraion msg succeed, waiting for server response
} else {
my $msg_hash;
eval{
$msg = &decrypt_msg($crypted_msg, $module_key);
+ if ($msg !~ /^<xml>/i ) {
+ die 'could not decrypt message';
+ }
&main::daemon_log("decrypted_msg: \n$msg", 9);
$msg_hash = $xml->XMLin($msg, ForceArray=>1);
@logged_in_user_list = split(/\s/, $result);
}
- $FIFO_FD = undef
- if (! defined $FIFO_FD && ! defined open($FIFO_FD, '>', $gosa_si_client_fifo));
- if (! defined $FIFO_FD) {
+ if (!open(FIFO_FD, '>', $gosa_si_client_fifo)) {
daemon_log("ERROR: unable to open fifo for writing: $!", 1);
$kernel->delay_set('trigger_logged_in_users_report', 30);
}
else {
- print($FIFO_FD 'CURRENTLY_LOGGED_IN ' . join(" ", @logged_in_user_list));
- $kernel->delay_set('trigger_logged_in_users_report', $trigger_logged_in_users_report_delay);
+ printf(FIFO_FD "CURRENTLY_LOGGED_IN %s\n", join(" ", @logged_in_user_list));
+ close(FIFO_FD);
+ $kernel->delay_set('trigger_logged_in_users_report', $trigger_logged_in_users_report_delay);
}
} else {
# try it in 10 sec again
my $file_record = $_[ARG0];
my $header;
my $content = "";
- daemon_log("DEBUG: fifo got record: $file_record", 7);
+ daemon_log("INFO: fifo got record: $file_record", 3);
$file_record =~ /^(\S+)[ ]?([\s\S]+)?$/;
if( defined $1 ) {
$kernel->alias_remove($heap->{alias});
$kernel->alarm_remove_all();
$kernel->post($heap->{child_session}, '_stop');
- close( $FIFO_FD ) if( defined $FIFO_FD );
}
my $remote_ip = $heap->{'remote_ip'},
my $error = 0;
my $answer;
+ my $msg;
+ my $msg_hash;
- daemon_log("INFO: Incoming msg from '$remote_ip'", 5);
+ daemon_log("INFO: Incoming msg from '$remote_ip', server_ip: $server_ip", 5);
daemon_log("DEBUG: Incoming msg:\n$input\n", 9);
- my ($msg, $msg_hash) = &check_key_and_xml_validity($input, $server_key);
+ if (not "$remote_ip" eq "$server_ip" and "$server_ip" ne "127.0.0.1") {
+ daemon_log("INFO: Incoming msg not from server ($server_ip), ignoring", 5);
+ $error++;
+ } else {
+ ($msg, $msg_hash) = &check_key_and_xml_validity($input, $server_key);
if( (!$msg) || (!$msg_hash) ) {
daemon_log("WARNING: Deciphering of incoming msg failed", 3);
if($server_address =~ /$remote_ip/) {
}
$FAILED_CRYPTO++;
$REGISTERED = 0;
+ sleep(2);
$kernel->post('client_session', 'register_at_gosa_si_server');
}
}
$error++;
}
-
+ }
######################
# process incoming msg
# set registered flag to true to stop sending further registered msgs
$REGISTERED = 1;
$REGISTRATION_IN_PROGRESS = 0;
+ if( $server_ip eq "127.0.0.1") {
+ $server_ip = $remote_ip;
+ daemon_log("INFO: Registered at localhost, setting server_ip to $server_ip",3);
+ }
}
else {
$answer =~ /<header>(\S+)<\/header>/;