X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fgosa-si-client;h=b4d3a2e9f31fef10c9c73e1af6baff9d5dc3346f;hb=74f2a05d9b319365b44acce3230cf8e34d6e080d;hp=2647710d85fd9d88a444f02bb3fe1804fd11607b;hpb=1250b0b83f0029db59e4dc6dfa0d53b1b76e5f8f;p=gosa.git diff --git a/gosa-si/gosa-si-client b/gosa-si/gosa-si-client index 2647710d8..b4d3a2e9f 100755 --- a/gosa-si/gosa-si-client +++ b/gosa-si/gosa-si-client @@ -39,7 +39,7 @@ use Net::DNS; my $event_dir = "/usr/lib/gosa-si/client/events"; use lib "/usr/lib/gosa-si/client/events"; -my ($cfg_file, %cfg_defaults, $foreground, $verbose, $pid_file, $procid, $pid, $log_file); +my ($cfg_file, %cfg_defaults, $foreground, $verbose, $pid_file, $procid, $pid, $log_file, $fai_logpath); my ($server_ip, $server_port, $server_key, $server_timeout, $server_domain, $server_key_lifetime); my ($client_ip, $client_port, $client_mac_address, $ldap_enabled, $ldap_config, $pam_config, $nss_config); my $xml; @@ -59,25 +59,26 @@ our $REGISTERED_FLAG = 1; %cfg_defaults = ( "general" => - {"log_file" => [\$log_file, "/var/run/".$0.".log"], - "pid_file" => [\$pid_file, "/var/run/".$0.".pid"], + {"log_file" => [\$log_file, "/var/run/".$0.".log"], + "pid_file" => [\$pid_file, "/var/run/".$0.".pid"], + "fai_logpath" => [\$fai_logpath, "/var/log/fai/fai.log"], }, "client" => - {"client_port" => [\$client_port, "20083"], - "client_ip" => [\$client_ip, "0.0.0.0"], - "client_mac_address" => [\$client_mac_address, "00:00:00:00:00:00"], - "ldap" => [\$ldap_enabled, 1], - "ldap_config" => [\$ldap_config, "/etc/ldap/ldap.conf"], - "pam_config" => [\$pam_config, "/etc/pam_ldap.conf"], - "nss_config" => [\$nss_config, "/etc/libnss_ldap.conf"], + {"port" => [\$client_port, "20083"], + "ip" => [\$client_ip, "0.0.0.0"], + "mac_address" => [\$client_mac_address, "00:00:00:00:00:00"], + "server_domain" => [\$server_domain, ""], + "ldap" => [\$ldap_enabled, 1], + "ldap_config" => [\$ldap_config, "/etc/ldap/ldap.conf"], + "pam_config" => [\$pam_config, "/etc/pam_ldap.conf"], + "nss_config" => [\$nss_config, "/etc/libnss_ldap.conf"], }, -"server" => - {"server_ip" => [\$server_ip, "127.0.0.1"], - "server_port" => [\$server_port, "20081"], - "server_key" => [\$server_key, ""], - "server_timeout" => [\$server_timeout, 10], - "server_domain" => [\$server_domain, ""], - "server_key_lifetime" => [\$server_key_lifetime, 600], +"server" => { + "ip" => [\$server_ip, "127.0.0.1"], + "port" => [\$server_port, "20081"], + "key" => [\$server_key, ""], + "timeout" => [\$server_timeout, 10], + "key_lifetime" => [\$server_key_lifetime, 600], }, ); @@ -469,6 +470,7 @@ sub new_ldap_config { my $goto_secret; my $admin_base= ""; my $department= ""; + my $release= ""; my $unit_tag; # Transform input into array @@ -518,6 +520,10 @@ sub new_ldap_config { $unit_tag= $element; next; } + if ($key =~ /^release$/) { + $release= $element; + next; + } } } @@ -588,6 +594,7 @@ sub new_ldap_config { print file1 "LDAP_BASE=\"$ldap_base\"\n"; print file1 "ADMIN_BASE=\"$admin_base\"\n"; print file1 "DEPARTMENT=\"$department\"\n"; + print file1 "RELEASE=\"$release\"\n"; print file1 "UNIT_TAG=\"".(defined $unit_tag ? "$unit_tag" : "")."\"\n"; print file1 "UNIT_TAG_FILTER=\"".(defined $unit_tag ? "(gosaUnitTag=$unit_tag)" : "")."\"\n"; close(file1); @@ -735,40 +742,20 @@ sub get_server_addresses { #=== FUNCTION ================================================================ -# NAME: send_msg_hash2address +# NAME: send_msg_hash_to_target # PARAMETERS: msg_hash - hash - xml_hash created with function create_xml_hash # PeerAddr string - socket address to send msg # PeerPort string - socket port, if not included in socket address # RETURNS: nothing # DESCRIPTION: ???? #=============================================================================== -sub send_msg_hash2address { - my ($msg_hash, $address, $passwd) = @_ ; - - # fetch header for logging - my $header = @{$msg_hash->{header}}[0]; - - # generate xml string - my $msg_xml = &create_xml_string($msg_hash); - - # encrypt xml msg - my $crypted_msg = &encrypt_msg($msg_xml, $passwd); - - # opensocket - my $socket = &open_socket($address); - if(not defined $socket){ - daemon_log("cannot send '$header'-msg to $address , server not reachable", 5); - return 1; - } - - # send xml msg - print $socket $crypted_msg."\n"; +sub send_msg_hash_to_target { + my ($msg_hash, $address, $encrypt_key) = @_ ; + my $msg = &create_xml_string($msg_hash); + my $header = @{$msg_hash->{'header'}}[0]; + my $error = &send_msg_to_target($msg, $address, $encrypt_key, $header); - close $socket; - - daemon_log("send '$header'-msg to $address", 1); - daemon_log("message:\n$msg_xml", 8); - return 0; + return $error; } @@ -807,7 +794,7 @@ sub send_msg_to_target { close $socket; } - return; + return $error; } @@ -850,26 +837,44 @@ sub register_at_gosa_si_server { # fetch first gosa-si-server from @servers my $server = shift(@servers); - if( !$server ) { daemon_log("no gosa-si-server left in list of servers", 1); daemon_log("unable to register at a gosa-si-server, force shutdown", 1); exit(1); } + + # Check if our ip is resolvable - if not: don't try to register + my $ip= &get_local_ip_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/)); + my $resolver= Net::DNS::Resolver->new; + my $dnsresult= $resolver->search($ip); + if(!defined($dnsresult)) { + &write_to_file("goto-dns-error:Could not resolve hostname for ip $ip", $fai_logpath); + exit(1); + } # create registration msg - my $register_hash = &create_xml_hash("here_i_am", &get_local_ip_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/)).":".$client_port, $server); + my $local_ip = &get_local_ip_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/)); + my $local_mac = &get_local_mac_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/)); + my $register_hash = &create_xml_hash("here_i_am", $local_ip.":".$client_port, $server); &add_content2xml_hash($register_hash, "new_passwd", $server_key); - &add_content2xml_hash($register_hash, "mac_address", &get_local_mac_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/))); + &add_content2xml_hash($register_hash, "mac_address", $local_mac); &add_content2xml_hash($register_hash, "events", $events); &add_content2xml_hash($register_hash, "gotoHardwareChecksum", $gotoHardwareChecksum); # send xml hash to server with general server passwd - my $res = &send_msg_hash2address($register_hash, $server, $default_server_key); - last; + my $res = &send_msg_hash_to_target($register_hash, $server, $default_server_key); + if($res == 0) { + # Set fixed client address + $client_ip= &get_local_ip_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/)); + $client_address= "$client_ip:$client_port"; + last; + } else { + next; + } } daemon_log("waiting for msg 'register_at_gosa_si_server'",1); - $kernel->delay_set('register_at_gosa_si_server',2); +# $kernel->delay_set('register_at_gosa_si_server', 180); + $kernel->delay_set('register_at_gosa_si_server', 5); # clear old settings and set it again $kernel->delay_set('trigger_new_key', $server_key_lifetime); } @@ -942,7 +947,7 @@ sub import_events { eval{ require $event; }; if( $@ ) { - daemon_log("import of event module '$event' failed", 1); + daemon_log("ERROR: import of event module '$event' failed", 1); daemon_log("$@", 8); next; } @@ -988,6 +993,7 @@ sub server_input { $error++; } + ###################### # process incoming msg if( $error == 0 ) { @@ -999,7 +1005,10 @@ sub server_input { daemon_log("found event '$header' at event-module '".$event_hash->{$header}."'", 5); no strict 'refs'; $answer = &{$event_hash->{$header}."::$header"}($msg, $msg_hash); - } + } + else { + daemon_log("WARNING: no event '$header' found in event modules under $event_dir", 1); + } } ######## @@ -1074,12 +1083,8 @@ daemon_log("$0 started!", 1); # delete old DBsqlite lock files system('rm -f /tmp/gosa_si_lock*gosa-si-client*'); - -# complete client_address +# detect ip and mac address and complete host address $client_address = $client_ip.":".$client_port; - - -# detect own ip and mac address my $network_interface= &get_interface_for_ip($client_ip); $client_mac_address= &get_mac($network_interface); daemon_log("gosa-si-client ip address detected: $client_ip", 1); @@ -1112,19 +1117,26 @@ $xml = new XML::Simple(); $default_server_key = $server_key; -# find all possible gosa-si-servers in DNS -if (defined $server_domain) { +# add gosa-si-server address from config file at first position of server list +if (defined $server_address) { + unshift(@servers, $server_address); + my $servers_string = join(", ", @servers); + daemon_log("found servers in configuration file: $servers_string", 5); +} +else { + if ( !$server_domain) { + daemon_log("ERROR: please specify a gosa-si-server address or a domain in config file", 1); + exit( 1 ); + } my @tmp_servers = &get_server_addresses($server_domain); foreach my $server (@tmp_servers) { unshift(@servers, $server); } + my $servers_string = join(", ", @servers); + daemon_log("found servers in DNS: $servers_string", 5); } -# add gosa-si-server address from config file at first position of server list -if (defined $server_address) { - unshift(@servers, $server_address); -} -my $servers_string = join(", ", @servers); -daemon_log("found servers in configuration file and via DNS: $servers_string", 5); + + POE::Session->create(