X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fmodules%2FSIPackages.pm;h=4f7bd8611dedec2cd1dae64768424fa369a409f7;hb=1bf6d6303fb62f5b51b9ebff12524f7631a02bc7;hp=83245316007fec667035780972e76137acc6c2f2;hpb=91ffadf333fe6010b730708dd231e74caec8559b;p=gosa.git diff --git a/gosa-si/modules/SIPackages.pm b/gosa-si/modules/SIPackages.pm index 832453160..4f7bd8611 100644 --- a/gosa-si/modules/SIPackages.pm +++ b/gosa-si/modules/SIPackages.pm @@ -70,11 +70,12 @@ $main::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 - &main::refresh_ldap_handle(); - if( defined($main::ldap_handle) ) { + + my $ldap_handle = &main::get_ldap_handle(); + if( defined($ldap_handle) ) { &main::daemon_log("INFO: Searching for servers gosaUnitTag with mac address $main::server_mac_address",5); # Perform search for Unit Tag - $mesg = $main::ldap_handle->search( + $mesg = $ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['gosaUnitTag'], @@ -94,7 +95,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 = $main::ldap_handle->search( + $mesg = $ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['gosaUnitTag'], @@ -113,7 +114,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 = $main::ldap_handle->search( + $mesg = $ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['gosaUnitTag'], @@ -354,7 +355,7 @@ sub register_at_bus { sub import_events { if (not -e $event_dir) { - &main::daemon_log("ERROR: cannot find directory or directory is not readable: $event_dir", 1); + &main::daemon_log("S 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"; @@ -376,7 +377,7 @@ sub import_events { $event_hash->{$event_name} = $event_module; } my $events_string = join( ", ", @{$events_l}); - &main::daemon_log("INFO: SIPackages imported events $events_string", 5); + &main::daemon_log("S DEBUG: SIPackages imported events $events_string", 8); } } @@ -416,7 +417,7 @@ sub process_incoming_msg { if ($header eq 'new_key') { @out_msg_l = &new_key($msg_hash) } elsif ($header eq 'here_i_am') { - @out_msg_l = &here_i_am($msg_hash, $session_id) + @out_msg_l = &here_i_am($msg, $msg_hash, $session_id) } else { if( exists $event_hash->{$header} ) { # a event exists with the header as name @@ -503,7 +504,7 @@ sub new_key { # DESCRIPTION: process this incoming message #=============================================================================== sub here_i_am { - my ($msg_hash, $session_id) = @_; + my ($msg, $msg_hash, $session_id) = @_; my @out_msg_l; my $out_hash; @@ -603,7 +604,7 @@ sub here_i_am { push(@out_msg_l, $new_ldap_config_out); } - my $hardware_config_out = &hardware_config($source, $gotoHardwareChecksum); + my $hardware_config_out = &hardware_config($msg, $msg_hash, $session_id); if( $hardware_config_out ) { push(@out_msg_l, $hardware_config_out); } @@ -689,14 +690,14 @@ sub new_ldap_config { } # Build LDAP connection - &main::refresh_ldap_handle(); - if( not defined $main::ldap_handle ) { + my $ldap_handle = &main::get_ldap_handle($session_id); + if( not defined $ldap_handle ) { &main::daemon_log("$session_id ERROR: cannot connect to ldap: $ldap_uri", 1); return; } # Perform search - $mesg = $main::ldap_handle->search( base => $ldap_base, + $mesg = $ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['dn', 'gotoLdapServer', 'gosaUnitTag', 'FAIclass'], filter => "(&(objectClass=GOhard)(macaddress=$macaddress)(gotoLdapServer=*))"); @@ -733,7 +734,7 @@ sub new_ldap_config { # Do we need to look at an object class? if (length(@servers) < 1){ - $mesg = $main::ldap_handle->search( base => $ldap_base, + $mesg = $ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['dn', 'gotoLdapServer', 'FAIclass'], filter => "(&(objectClass=gosaGroupOfNames)(member=$dn))"); @@ -796,7 +797,7 @@ sub new_ldap_config { if (defined $unit_tag){ # Find admin base and department name - $mesg = $main::ldap_handle->search( base => $ldap_base, + $mesg = $ldap_handle->search( base => $ldap_base, scope => 'sub', attrs => ['dn', 'ou'], filter => "(&(objectClass=gosaAdministrativeUnit)(gosaUnitTag=$unit_tag))"); @@ -832,7 +833,10 @@ sub new_ldap_config { # DESCRIPTION: #=============================================================================== sub hardware_config { - my ($address, $gotoHardwareChecksum) = @_ ; + my ($msg, $msg_hash, $session_id) = @_ ; + my $address = @{$msg_hash->{source}}[0]; + my $header = @{$msg_hash->{header}}[0]; + my $gotoHardwareChecksum = @{$msg_hash->{gotoHardwareChecksum}}[0]; my $sql_statement= "SELECT * FROM known_clients WHERE hostname='$address'"; my $res = $main::known_clients_db->select_dbentry( $sql_statement ); @@ -840,26 +844,25 @@ sub hardware_config { # check hit my $hit_counter = keys %{$res}; if( not $hit_counter == 1 ) { - &main::daemon_log("ERROR: more or no hit found in known_clients_db by query by '$address'", 1); + &main::daemon_log("$session_id ERROR: more or no hit found in known_clients_db by query by '$address'", 1); } - my $macaddress = $res->{1}->{macaddress}; my $hostkey = $res->{1}->{hostkey}; if (not defined $macaddress) { - &main::daemon_log("ERROR: no mac address found for client $address", 1); + &main::daemon_log("$session_id ERROR: no mac address found for client $address", 1); return; } # Build LDAP connection - &main::refresh_ldap_handle(); - if( not defined $main::ldap_handle ) { - &main::daemon_log("ERROR: cannot connect to ldap: $ldap_uri", 1); + my $ldap_handle = &main::get_ldap_handle($session_id); + if( not defined $ldap_handle ) { + &main::daemon_log("$session_id ERROR: cannot connect to ldap: $ldap_uri", 1); return; } # Perform search - $mesg = $main::ldap_handle->search( + $mesg = $ldap_handle->search( base => $ldap_base, scope => 'sub', filter => "(&(objectClass=GOhard)(|(macAddress=$macaddress)(dhcpHWaddress=ethernet $macaddress)))" @@ -867,20 +870,36 @@ sub hardware_config { if($mesg->count() == 0) { &main::daemon_log("Host was not found in LDAP!", 1); + + # set status = hardware_detection at jobqueue if entry exists + my $func_dic = {table=>$main::job_queue_tn, + primkey=>['id'], + timestamp=>&get_time, + status=>'processing', + result=>'none', + progress=>'hardware-detection', + headertag=>'trigger_action_reinstall', + targettag=>$address, + xmlmessage=>'none', + macaddress=>$macaddress, + }; + my $hd_res = $main::job_db->add_dbentry($func_dic); + &main::daemon_log("$session_id INFO: add '$macaddress' to job queue as an installing job", 5); + } else { my $entry= $mesg->entry(0); my $dn= $entry->dn; - if(defined($entry->get_value("gotoHardwareChecksum"))) { - if(! $entry->get_value("gotoHardwareChecksum") eq $gotoHardwareChecksum) { + if (defined($entry->get_value("gotoHardwareChecksum"))) { + if (! $entry->get_value("gotoHardwareChecksum") eq $gotoHardwareChecksum) { $entry->replace(gotoHardwareChecksum => $gotoHardwareChecksum); - if($entry->update($main::ldap_handle)) { - &main::daemon_log("Hardware changed! Detection triggered.", 4); + if($entry->update($ldap_handle)) { + &main::daemon_log("$session_id INFO: Hardware changed! Detection triggered.", 5); } } else { # Nothing to do return; } - } + } } # Assemble data package @@ -892,8 +911,6 @@ sub hardware_config { $data{'goto_secret'}= $goto_secret; } - &main::daemon_log("Send detect_hardware message to $address", 4); - # Send information return &build_msg("detect_hardware", $server_address, $address, \%data); }