X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fmodules%2FSIPackages.pm;h=cbd1026ad6201c2f275dd73198f9a1266ca83f58;hb=54c3f50d1005ca05082fa3efe2a37caa12cb50d5;hp=50efa409ccf4dc5a3330c11cab97751c81e83056;hpb=f93a084d4b164c8392f288581d982fef55049bb2;p=gosa.git diff --git a/gosa-si/modules/SIPackages.pm b/gosa-si/modules/SIPackages.pm index 50efa409c..cbd1026ad 100644 --- a/gosa-si/modules/SIPackages.pm +++ b/gosa-si/modules/SIPackages.pm @@ -16,7 +16,6 @@ use NetAddr::IP; use Net::LDAP; use Socket; use Net::hostent; -use Net::DNS; use utf8; my $event_dir = "/usr/lib/gosa-si/server/events"; @@ -32,6 +31,7 @@ my $event_hash; my $network_interface; my $no_bus; my (@ldap_cfg, @pam_cfg, @nss_cfg, $goto_admin, $goto_secret); +my $mesg; my %cfg_defaults = ( "bus" => { @@ -71,12 +71,11 @@ $server_mac_address= &get_mac($network_interface); # Unit tag can be defined in config if((not defined($main::gosa_unit_tag)) || length($main::gosa_unit_tag) == 0) { # Read gosaUnitTag from LDAP - my $tmp_ldap= Net::LDAP->new($ldap_uri); - if( defined($tmp_ldap) ) { + &main::refresh_ldap_handle(); + if( defined($main::ldap_handle) ) { &main::daemon_log("INFO: Searching for servers gosaUnitTag with mac address $server_mac_address",5); - my $mesg= $tmp_ldap->bind($ldap_admin_dn, password => $ldap_admin_password); # Perform search for Unit Tag - $mesg = $tmp_ldap->search( + $mesg = $main::ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['gosaUnitTag'], @@ -95,7 +94,7 @@ if((not defined($main::gosa_unit_tag)) || length($main::gosa_unit_tag) == 0) { my $hostname= `hostname -f`; chomp($hostname); &main::daemon_log("INFO: Searching for servers gosaUnitTag with hostname $hostname",5); - $mesg = $tmp_ldap->search( + $mesg = $main::ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['gosaUnitTag'], @@ -113,7 +112,7 @@ if((not defined($main::gosa_unit_tag)) || length($main::gosa_unit_tag) == 0) { $hostname= `hostname -s`; chomp($hostname); &main::daemon_log("INFO: Searching for servers gosaUnitTag with hostname $hostname",5); - $mesg = $tmp_ldap->search( + $mesg = $main::ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['gosaUnitTag'], @@ -131,7 +130,6 @@ if((not defined($main::gosa_unit_tag)) || length($main::gosa_unit_tag) == 0) { } } } - $tmp_ldap->unbind; } else { &main::daemon_log("INFO: Using gosaUnitTag from config-file: $main::gosa_unit_tag",5); } @@ -402,7 +400,6 @@ sub process_incoming_msg { $header =~ s/^CLMSG_//; &main::daemon_log("DEBUG: SIPackages: msg to process: $header", 7); - &main::daemon_log("$msg", 8); if( 0 == length @target_l){ &main::daemon_log("ERROR: no target specified for msg $header", 1); @@ -429,7 +426,7 @@ sub process_incoming_msg { # if delivery not possible raise error and return if( not @out_msg_l ) { - &main::daemon_log("WARNING: SIPackages got not answer from event handler '$header'", 3); + &main::daemon_log("WARNING: SIPackages got no answer from event handler '$header'", 3); } elsif( 0 == @out_msg_l) { &main::daemon_log("ERROR: SIPackages: no event handler or core function defined for '$header'", 1); } @@ -563,8 +560,6 @@ sub here_i_am { # return acknowledgement to client $out_hash = &create_xml_hash("registered", $server_address, $source); - my $register_out = &create_xml_string($out_hash); - push(@out_msg_l, $register_out); # notify registered client to bus if( $bus_activ eq "on") { @@ -579,13 +574,21 @@ sub here_i_am { &add_content2xml_hash($out_hash, "timestamp", $act_timestamp); my $new_client_out = &create_xml_string($out_hash); push(@out_msg_l, $new_client_out); - &main::daemon_log("INFO: send bus msg that client '$source' has registerd at server '$server_address'", 5); + &main::daemon_log("INFO: send bus msg that client '$source' has registered at server '$server_address'", 5); } # give the new client his ldap config + # Workaround: Send within the registration response, if the client will get an ldap config later my $new_ldap_config_out = &new_ldap_config($source); if( $new_ldap_config_out ) { - push(@out_msg_l, $new_ldap_config_out); + &add_content2xml_hash($out_hash, "ldap_available", "true"); + } + my $register_out = &create_xml_string($out_hash); + push(@out_msg_l, $register_out); + + # Really send the ldap config + if( $new_ldap_config_out ) { + push(@out_msg_l, $new_ldap_config_out); } my $hardware_config_out = &hardware_config($source, $gotoHardwareChecksum); @@ -645,10 +648,11 @@ sub who_has_i_do { print "\ngot msg $header:\nserver $source has client with $search_param $search_value\n"; } + #=== FUNCTION ================================================================ # NAME: new_ldap_config # PARAMETERS: address - string - ip address and port of a host -# RETURNS: nothing +# RETURNS: gosa-si conform message # DESCRIPTION: send to address the ldap configuration found for dn gotoLdapServer #=============================================================================== sub new_ldap_config { @@ -673,21 +677,17 @@ sub new_ldap_config { } # Build LDAP connection - my $ldap = Net::LDAP->new($ldap_uri); - if( not defined $ldap ) { + &main::refresh_ldap_handle(); + if( not defined $main::ldap_handle ) { &main::daemon_log("ERROR: cannot connect to ldap: $ldap_uri", 1); return; } - - # Bind to a directory with dn and password - my $mesg= $ldap->bind($ldap_admin_dn, password => $ldap_admin_password); - # Perform search - $mesg = $ldap->search( base => $ldap_base, + $mesg = $main::ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['dn', 'gotoLdapServer', 'gosaUnitTag', 'FAIclass'], - filter => "(&(objectClass=GOhard)(macaddress=$macaddress))"); + filter => "(&(objectClass=GOhard)(macaddress=$macaddress)(gotoLdapServer=*))"); #$mesg->code && die $mesg->error; if($mesg->code) { &main::daemon_log($mesg->error, 1); @@ -696,11 +696,11 @@ sub new_ldap_config { # Sanity check if ($mesg->count != 1) { - &main::daemon_log("WARNING: client mac address $macaddress not found/not unique in ldap search", 1); + &main::daemon_log("WARNING: client with mac address $macaddress not found/unique/active - not sending ldap config", 1); &main::daemon_log("\tbase: $ldap_base", 1); &main::daemon_log("\tscope: sub", 1); &main::daemon_log("\tattrs: dn, gotoLdapServer", 1); - &main::daemon_log("\tfilter: (&(objectClass=GOhard)(macaddress=$macaddress))", 1); + &main::daemon_log("\tfilter: (&(objectClass=GOhard)(macaddress=$macaddress)(gotoLdapServer=*))", 1); return; } @@ -721,7 +721,7 @@ sub new_ldap_config { # Do we need to look at an object class? if (length(@servers) < 1){ - $mesg = $ldap->search( base => $ldap_base, + $mesg = $main::ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['dn', 'gotoLdapServer', 'FAIclass'], filter => "(&(objectClass=gosaGroupOfNames)(member=$dn))"); @@ -754,8 +754,10 @@ sub new_ldap_config { foreach $server (@servers){ # Conversation for backward compatibility if (not $server =~ /^\d+:[^:]+:ldap[^:]*:\/\// ) { - if ($server =~ /^([^:]+):(.*)$/ ) { + if ($server =~ /^([^:]+):([^:]+)$/ ) { $server= "1:dummy:ldap://$1/$2"; + } elsif ($server =~ /^(\d+):([^:]+):(.*)$/ ) { + $server= "$1:dummy:ldap://$2/$3"; } } @@ -782,7 +784,7 @@ sub new_ldap_config { if (defined $unit_tag){ # Find admin base and department name - $mesg = $ldap->search( base => $ldap_base, + $mesg = $main::ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['dn', 'ou'], filter => "(&(objectClass=gosaAdministrativeUnit)(gosaUnitTag=$unit_tag))"); @@ -806,14 +808,6 @@ sub new_ldap_config { $data{'unit_tag'}= $unit_tag; } - - # Unbind - $mesg = $ldap->unbind; - if($mesg->code) { - &main::daemon_log($mesg->error, 1); - return; - } - # Send information return &build_msg("new_ldap_config", $server_address, $address, \%data); } @@ -846,17 +840,14 @@ sub hardware_config { } # Build LDAP connection - my $ldap = Net::LDAP->new($ldap_uri); - if( not defined $ldap ) { + &main::refresh_ldap_handle(); + if( not defined $main::ldap_handle ) { &main::daemon_log("ERROR: cannot connect to ldap: $ldap_uri", 1); return; } - # Bind to a directory with dn and password - my $mesg= $ldap->bind($ldap_admin_dn, password => $ldap_admin_password); - # Perform search - $mesg = $ldap->search( + $mesg = $main::ldap_handle->search( base => $ldap_base, scope => 'sub', filter => "(&(objectClass=GOhard)(|(macAddress=$macaddress)(dhcpHWaddress=ethernet $macaddress)))" @@ -870,7 +861,7 @@ sub hardware_config { if(defined($entry->get_value("gotoHardwareChecksum"))) { if(! $entry->get_value("gotoHardwareChecksum") eq $gotoHardwareChecksum) { $entry->replace(gotoHardwareChecksum => $gotoHardwareChecksum); - if($entry->update($ldap)) { + if($entry->update($main::ldap_handle)) { &main::daemon_log("Hardware changed! Detection triggered.", 4); } } else { @@ -889,9 +880,6 @@ sub hardware_config { $data{'goto_secret'}= $goto_secret; } - # Unbind - $mesg = $ldap->unbind; - &main::daemon_log("Send detect_hardware message to $address", 4); # Send information