index 50efa409ccf4dc5a3330c11cab97751c81e83056..cbd1026ad6201c2f275dd73198f9a1266ca83f58 100644 (file)
use Net::LDAP;
use Socket;
use Net::hostent;
-use Net::DNS;
use utf8;
my $event_dir = "/usr/lib/gosa-si/server/events";
my $network_interface;
my $no_bus;
my (@ldap_cfg, @pam_cfg, @nss_cfg, $goto_admin, $goto_secret);
+my $mesg;
my %cfg_defaults = (
"bus" => {
# 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'],
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'],
$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'],
}
}
}
- $tmp_ldap->unbind;
} else {
&main::daemon_log("INFO: Using gosaUnitTag from config-file: $main::gosa_unit_tag",5);
}
$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);
# 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);
}
# 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") {
&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);
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 {
}
# 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);
# 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;
}
# 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))");
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";
}
}
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))");
$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);
}
}
# 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)))"
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 {
$data{'goto_secret'}= $goto_secret;
}
- # Unbind
- $mesg = $ldap->unbind;
-
&main::daemon_log("Send detect_hardware message to $address", 4);
# Send information