X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fgosa-si-client;h=c3608750a3458e474bd86618ef628b7a7bdce57b;hb=73aea7fc540b0b72e0177703fef3f47dd35d900f;hp=df75a81e132eb39d4bac2be1406c9428cf0a1f02;hpb=c52bd91ed538e20c86c2b23630aa38dc1fada6d0;p=gosa.git diff --git a/gosa-si/gosa-si-client b/gosa-si/gosa-si-client index df75a81e1..c3608750a 100755 --- a/gosa-si/gosa-si-client +++ b/gosa-si/gosa-si-client @@ -34,7 +34,6 @@ use GOSA::GosaSupportDaemon; use Digest::MD5 qw(md5_hex md5 md5_base64); use MIME::Base64; use XML::Simple; -#use Net::DNS; # no longer used because function moved to GosaSupportDaemon.pm : rettenbe : 16.05.2008 use File::Basename; use File::Spec; @@ -100,13 +99,13 @@ my $fai_log_dir = "/tmp/fai"; {"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, ""], + "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"], - "fai-logpath" => [\$fai_logpath, "/var/log/fai/fai.log"], - "force-hostname" => [\$client_force_hostname, "false"], + "fai-logpath" => [\$fai_logpath, "/var/log/fai/fai.log"], + "force-hostname" => [\$client_force_hostname, "false"], }, "server" => { "ip" => [\$server_ip, "127.0.0.1"], @@ -274,37 +273,6 @@ sub daemon_log { } -#=== FUNCTION ================================================================ -# NAME: get_interfaces -# PARAMETERS: none -# RETURNS: (list of interfaces) -# DESCRIPTION: Uses proc fs (/proc/net/dev) to get list of interfaces. -#=============================================================================== -sub get_interfaces { - my @result; - my $PROC_NET_DEV= ('/proc/net/dev'); - - open(PROC_NET_DEV, "<$PROC_NET_DEV") - or die "Could not open $PROC_NET_DEV"; - - my @ifs = ; - - close(PROC_NET_DEV); - - # Eat first two line - shift @ifs; - shift @ifs; - - chomp @ifs; - foreach my $line(@ifs) { - my $if= (split /:/, $line)[0]; - $if =~ s/^\s+//; - push @result, $if; - } - - return @result; -} - #=== FUNCTION ================================================================ # NAME: get_mac # PARAMETERS: interface name (i.e. eth0) @@ -352,61 +320,6 @@ sub get_mac { } -#=== FUNCTION ================================================================ -# NAME: get_interface_for_ip -# PARAMETERS: ip address (i.e. 192.168.0.1) -# RETURNS: array: list of interfaces if ip=0.0.0.0, matching interface if found, undef else -# DESCRIPTION: Uses proc fs (/proc/net/dev) to get list of interfaces. -#=============================================================================== -sub get_interface_for_ip { - my $result; - my $ip= shift; - if ($ip && length($ip) > 0) { - my @ifs= &get_interfaces(); - if($ip eq "0.0.0.0") { - $result = "all"; - } else { - foreach (@ifs) { - my $if=$_; - if(get_ip($if) eq $ip) { - $result = $if; - last; - } - } - } - } - return $result; -} - - -#=== FUNCTION ================================================================ -# NAME: get_ip -# PARAMETERS: interface name (i.e. eth0) -# RETURNS: (ip address) -# DESCRIPTION: Uses ioctl to get ip address directly from system. -#=============================================================================== -sub get_ip { - my $ifreq= shift; - my $result= ""; - my $SIOCGIFADDR= 0x8915; # man 2 ioctl_list - my $proto= getprotobyname('ip'); - - socket SOCKET, PF_INET, SOCK_DGRAM, $proto - or die "socket: $!"; - - if(ioctl SOCKET, $SIOCGIFADDR, $ifreq) { - my ($if, $sin) = unpack 'a16 a16', $ifreq; - my ($port, $addr) = sockaddr_in $sin; - my $ip = inet_ntoa $addr; - - if ($ip && length($ip) > 0) { - $result = $ip; - } - } - - return $result; -} - #=== FUNCTION ================================================================ # NAME: get_local_mac_for_remote_ip @@ -457,9 +370,11 @@ sub get_local_ip_for_remote_ip { my $result="0.0.0.0"; if($server_ip =~ /^(\d\d?\d?\.){3}\d\d?\d?$/) { - if($server_ip eq "127.0.0.1") { - $result="127.0.0.1"; - } else { + # client should always have a 'valid' ip-address, which is available from other hosts too, + # 127.0.0.1 says nothing to foreign host + #if($server_ip eq "127.0.0.1") { + # $result="127.0.0.1"; + #} else { my $PROC_NET_ROUTE= ('/proc/net/route'); open(PROC_NET_ROUTE, "<$PROC_NET_ROUTE") @@ -486,7 +401,7 @@ sub get_local_ip_for_remote_ip { last; } } - } + #} } else { daemon_log("get_local_ip_for_remote_ip was called with a non-ip parameter: $server_ip", 1); } @@ -503,17 +418,6 @@ sub generate_hw_digest { } -# moved to GosaSupportDaemon: rettenbe, 19.05.2008 -#sub create_passwd { -# my $new_passwd = ""; -# for(my $i=0; $i<31; $i++) { -# $new_passwd .= ("a".."z","A".."Z",0..9)[int(rand(62))] -# } -# -# return $new_passwd; -#} - - sub create_ciphering { my ($passwd) = @_; if((!defined($passwd)) || length($passwd)==0) { @@ -555,45 +459,6 @@ sub decrypt_msg { } -# moved to GosaSupportDaemon: rettenbe: 16.05.2008 -#sub get_server_addresses { -# my $domain= shift; -# my @result; -# -# my $error = 0; -# my $res = Net::DNS::Resolver->new; -# my $query = $res->send("_gosa-si._tcp.".$domain, "SRV"); -# my @hits; -# -# if ($query) { -# foreach my $rr ($query->answer) { -# push(@hits, $rr->target.":".$rr->port); -# } -# } -# else { -# #warn "query failed: ", $res->errorstring, "\n"; -# $error++; -# } -# -# if( $error == 0 ) { -# foreach my $hit (@hits) { -# my ($hit_name, $hit_port) = split(/:/, $hit); -# chomp($hit_name); -# chomp($hit_port); -# -# my $address_query = $res->send($hit_name); -# if( 1 == length($address_query->answer) ) { -# foreach my $rr ($address_query->answer) { -# push(@result, $rr->address.":".$hit_port); -# } -# } -# } -# } -# -# return @result; -#} - - #=== FUNCTION ================================================================ # NAME: send_msg_hash_to_target # PARAMETERS: msg_hash - hash - xml_hash created with function create_xml_hash @@ -745,8 +610,12 @@ sub register_at_gosa_si_server { my $ip= &get_local_ip_for_remote_ip(sprintf("%s", $server =~ /^([0-9\.]*?):.*$/)); my $dnsname= gethostbyaddr(inet_aton($ip), AF_INET); if(!defined($dnsname)) { - &write_to_file("goto-error-dns:$ip", $fai_logpath); - exit(1); + if( defined($client_force_hostname) && $client_force_hostname eq "true") { + $dnsname = `hostname`; + } else { + &write_to_file("goto-error-dns:$ip", $fai_logpath); + exit(1); + } } # create registration msg @@ -930,38 +799,6 @@ sub check_outgoing_xml_validity { } -#sub import_events { -# -# if (not -e $event_dir) { -# daemon_log("ERROR: cannot find directory or directory is not readable: $event_dir", 1); -# } -# opendir (DIR, $event_dir) or die "ERROR while loading gosa-si-events from directory $event_dir : $!\n"; -# -# while (defined (my $event = readdir (DIR))) { -# if( $event eq "." || $event eq ".." ) { next; } -# daemon_log("INFO: found event module: $event", 5); -# eval{ require $event; }; -# if( $@ ) { -# daemon_log("ERROR: import of event module '$event' failed", 1); -# daemon_log("$@", 1); -# next; -# } -# -# $event =~ /(\S*?).pm$/; -# my $event_module = $1; -# my $events_l = eval( $1."::get_events()") ; -# foreach my $event_name (@{$events_l}) { -# $event_hash->{$event_name} = $event_module; -# } -# -# } -# -# my @all_events = keys %$event_hash; -# my $all_events_string = join(", ", @all_events); -# -# daemon_log("INFO: imported events: $all_events_string", 5); -#} - sub trigger_new_key { my ($kernel) = $_[KERNEL] ; @@ -1077,11 +914,21 @@ sub save_fai_log { } +sub sig_handler { + my ($kernel, $signal) = @_[KERNEL, ARG0] ; + daemon_log("0 INFO got signal '$signal'", 1); + $kernel->sig_handled(); + return; +} + + sub _start { my ($kernel, $heap) = @_[KERNEL, HEAP]; $kernel->alias_set('client_session'); $global_kernel = $kernel; # this is used to throw events at each point of the skript - + + $kernel->sig(USR1 => "sig_handler"); + # force a registration at a gosa-si-server $kernel->yield('register_at_gosa_si_server'); @@ -1267,13 +1114,12 @@ daemon_log("INFO: gosa-si-client mac address detected: $client_mac_address", 1); # import events my ($error, $result, $tmp_hash) = &import_events($event_dir); $event_hash = $tmp_hash; -if ($error == 0) { - foreach my $log_line (@$result) { - daemon_log("DEBUG: $log_line", 7); - } -} else { - foreach my $log_line (@$result) { - daemon_log("ERROR: $log_line", 1); + +foreach my $log_line (@$result) { + if ($log_line =~ / succeed: /) { + &main::daemon_log("0 DEBUG: $log_line", 7); + } else { + &main::daemon_log("0 ERROR: $log_line", 1); } } @@ -1294,10 +1140,6 @@ daemon_log("INFO: start socket for incoming xml messages at port '$client_port' # prepare variables if( inet_aton($server_ip) ){ $server_ip = inet_ntoa(inet_aton($server_ip)); } -############################################################ -# to change -#if( $server_ip eq "127.0.1.1" ) { $server_ip = "127.0.0.1" } -############################################################ if (defined $server_ip && defined $server_port) { $server_address = $server_ip.":".$server_port; } @@ -1354,6 +1196,7 @@ POE::Session->create( inline_states => { _start => \&_start, _default => \&_default, + sig_handler => \&sig_handler, register_at_gosa_si_server => \®ister_at_gosa_si_server, # trigger periodical tasks