summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d6c4ff5)
raw | patch | inline | side by side (parent: d6c4ff5)
author | janw <janw@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 5 May 2009 14:39:19 +0000 (14:39 +0000) | ||
committer | janw <janw@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 5 May 2009 14:39:19 +0000 (14:39 +0000) |
Removed unneeded ldap-handles.
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@13609 594d385d-05f5-0310-b6e9-bd551577e9d8
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@13609 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-si/gosa-si-server | patch | blob | history |
diff --git a/gosa-si/gosa-si-server b/gosa-si/gosa-si-server
index 2d3b7b3a043d6322534885ad3d4c4bdf41ee287c..ceb9572e283e4fb4918177d9fb4e317580792e3c 100755 (executable)
--- a/gosa-si/gosa-si-server
+++ b/gosa-si/gosa-si-server
use POE qw(Component::Server::TCP Wheel::Run Filter::Reference);
use Net::LDAP;
use Net::LDAP::Util qw(:escape);
-use ResourcePool;
-use ResourcePool::Factory::Net::LDAP;
# revision number of server and program name
my $server_headURL;
my ($gosa_server, $job_queue_timeout, $job_queue_loop_delay);
my ($messaging_db_loop_delay);
my ($procid, $pid);
-my ($arp_fifo, $ldap_pool, $ldap_factory);
+my $arp_fifo;
my ($xml);
my $sources_list;
my $max_clients;
our $no_arp;
our $forground;
our $cfg_file;
-our ($ldap_uri, $ldap_base, $ldap_admin_dn, $ldap_admin_password, $ldap_server_dn, $ldap_version, $max_ldap_handle, $precreate_ldap_handle);
+our ($ldap_uri, $ldap_base, $ldap_admin_dn, $ldap_admin_password, $ldap_server_dn, $ldap_version);
our ($mysql_username, $mysql_password, $mysql_database, $mysql_host);
our $known_modules;
our $root_uid;
# state is on is imported by "require 'file';"
#===============================================================================
sub import_modules {
- daemon_log(" ", 1);
-
if (not -e $modules_path) {
daemon_log("0 ERROR: cannot find directory or directory is not readable: $modules_path", 1);
}
opendir (DIR, $modules_path) or die "ERROR while loading modules from directory $modules_path : $!\n";
- my $ldap_handle = &get_ldap_handle;
while (defined (my $file = readdir (DIR))) {
if (not $file =~ /(\S*?).pm$/) {
next;
daemon_log("$@", 1);
exit;
} else {
- my $info = eval($mod_name.'::get_module_info($ldap_handle)');
+ my $info = eval($mod_name.'::get_module_info()');
# Only load module if get_module_info() returns a non-null object
if( $info ) {
my ($input_address, $input_key, $event_hash) = @{$info};
}
}
}
- &release_ldap_handle($ldap_handle);
close (DIR);
}
sub next_task {
- my ($session, $heap, $task, $ldap_handle) = @_[SESSION, HEAP, ARG0, ARG1];
+ my ($session, $heap, $task) = @_[SESSION, HEAP, ARG0, ARG1];
my $running_task = POE::Wheel::Run->new(
- Program => sub { process_task($session, $heap, $task, $ldap_handle) },
+ Program => sub { process_task($session, $heap, $task) },
StdioFilter => POE::Filter::Reference->new(),
StdoutEvent => "task_result",
StderrEvent => "task_debug",
CloseEvent => "task_done",
);
$heap->{task}->{ $running_task->ID } = $running_task;
- $heap->{ldap_handle}->{$running_task->ID} = $ldap_handle;
}
sub handle_task_result {
sub process_task {
no strict "refs";
#CHECK: Not @_[...]?
- my ($session, $heap, $task, $ldap_handle) = @_;
+ my ($session, $heap, $task) = @_;
my $error = 0;
my $answer_l;
my ($answer_header, @answer_target_l, $answer_source);
if( $error == 0) {
daemon_log("$session_id INFO: Incoming msg (session_id=$session_id) with header '".@{$msg_hash->{'header'}}[0]."'", 5);
daemon_log("$session_id DEBUG: Processing module ".$module, 7);
- $answer_l = &{ $module."::process_incoming_msg" }($msg, $msg_hash, $session_id, $ldap_handle);
+ $answer_l = &{ $module."::process_incoming_msg" }($msg, $msg_hash, $session_id);
if ( 0 < @{$answer_l} ) {
my $answer_str = join("\n", @{$answer_l});
attrs => ['memberUid'],
filter => "cn=$group_name",
);
- &release_ldap_handle($ldap_handle);
if ($mesg->count) {
my @entries = $mesg->entries;
foreach my $entry (@entries) {
if ($mesg->code) {
daemon_log("M ERROR: unable to translate group '$group_name' to user list for message delivery: $mesg->error", 1);
}
+ &release_ldap_handle($ldap_handle);
# ldap handle error ?
} else {
daemon_log("M ERROR: unable to translate group '$group_name' to user list for message delivery: no ldap handle available", 1);
my $session_id = $hit->{'sessionid'};
&daemon_log("$session_id DEBUG: start processing for message with incoming id: '$message_id'", 7);
- my $ldap_handle = &get_ldap_handle();
- if (not defined $ldap_handle) { next; }
- $kernel->yield('next_task', $hit, $ldap_handle);
+ $kernel->yield('next_task', $hit);
my $sql = "DELETE FROM $incoming_tn WHERE id=$message_id";
my $res = $incoming_db->exec_statement($sql);
if (not defined $session_id ) { $session_id = 0 };
if ($session_id =~ /[^0-9]*/) { $session_id = 0 };
- (my $package, my $file, my $row, my $subroutine, my $hasArgs, my $wantArray, my $evalText, my $isRequire) = caller(1);
- my $caller_text = "subroutin $subroutine";
+ my ($package, $file, $row, $subroutine, $hasArgs, $wantArray, $evalText, $isRequire) = caller(1);
+ my $caller_text = "subroutine $subroutine";
if ($subroutine eq "(eval)") {
$caller_text = "eval block within file '$file' for '$evalText'";
}
- daemon_log("$session_id INFO: new ldap handle for $caller_text required", 9);
-
- my $ldap_handle = $ldap_pool->get();
-
- if (not defined $ldap_handle) {
- daemon_log("$session_id ERROR: ldap handle for $caller_text not available", 1);
+ daemon_log("$session_id INFO: new ldap handle for '$caller_text' required!", 1);
+
+get_handle:
+ my $ldap_handle = Net::LDAP->new( $ldap_uri );
+ if (not ref $ldap_handle) {
+ daemon_log("$session_id ERROR: Connection to LDAP URI '$ldap_uri' failed! Retrying!", 1);
+ usleep(1000);
+ goto get_handle;
+ } else {
+ daemon_log("$session_id DEBUG: Connection to LDAP URI '$ldap_uri' established.", 6);
}
+
+ $ldap_handle->bind($ldap_admin_dn, password => $ldap_admin_password) or &daemon_log("$session_id ERROR: Could not bind as '$ldap_admin_dn' to LDAP URI '$ldap_uri'!", 1);
return $ldap_handle;
}
+
sub release_ldap_handle {
my ($ldap_handle) = @_ ;
- $ldap_pool->free($ldap_handle);
+ if(ref $ldap_handle) {
+ $ldap_handle->disconnect();
+ }
+ &main::daemon_log("0 DEBUG: Released a ldap handle!", 6);
return;
}
sub change_fai_state {
- my ($st, $targets, $session_id) = @_;
- $session_id = 0 if not defined $session_id;
- # Set FAI state to localboot
- my %mapActions= (
- reboot => '',
- update => 'softupdate',
- localboot => 'localboot',
- reinstall => 'install',
- rescan => '',
- wake => '',
- memcheck => 'memcheck',
- sysinfo => 'sysinfo',
- install => 'install',
- );
-
- # Return if this is unknown
- if (!exists $mapActions{ $st }){
- daemon_log("$session_id ERROR: unknown action '$st', can not translate ot FAIstate", 1);
- return;
- }
+ my ($st, $targets, $session_id) = @_;
+ $session_id = 0 if not defined $session_id;
+ # Set FAI state to localboot
+ my %mapActions= (
+ reboot => '',
+ update => 'softupdate',
+ localboot => 'localboot',
+ reinstall => 'install',
+ rescan => '',
+ wake => '',
+ memcheck => 'memcheck',
+ sysinfo => 'sysinfo',
+ install => 'install',
+ );
- my $state= $mapActions{ $st };
+ # Return if this is unknown
+ if (!exists $mapActions{ $st }){
+ daemon_log("$session_id ERROR: unknown action '$st', can not translate ot FAIstate", 1);
+ return;
+ }
- #if( defined($ldap_handle) ) {
+ my $state= $mapActions{ $st };
- # Build search filter for hosts
- my $search= "(&(objectClass=GOhard)";
- foreach (@{$targets}){
- $search.= "(macAddress=$_)";
- }
- $search.= ")";
+ # Build search filter for hosts
+ my $search= "(&(objectClass=GOhard)";
+ foreach (@{$targets}){
+ $search.= "(macAddress=$_)";
+ }
+ $search.= ")";
- # If there's any host inside of the search string, procress them
- if (!($search =~ /macAddress/)){
- daemon_log("$session_id ERROR: no macAddress found in filter statement for LDAP search: '$search'", 1);
- return;
- }
+ # If there's any host inside of the search string, procress them
+ if (!($search =~ /macAddress/)){
+ daemon_log("$session_id ERROR: no macAddress found in filter statement for LDAP search: '$search'", 1);
+ return;
+ }
my $ldap_handle = &get_ldap_handle($session_id);
- # Perform search for Unit Tag
- my $mesg = $ldap_handle->search(
- base => $ldap_base,
- scope => 'sub',
- attrs => ['dn', 'FAIstate', 'objectClass'],
- filter => "$search"
- );
+ # Perform search for Unit Tag
+ my $mesg = $ldap_handle->search(
+ base => $ldap_base,
+ scope => 'sub',
+ attrs => ['dn', 'FAIstate', 'objectClass'],
+ filter => "$search"
+ );
- if ($mesg->count) {
- my @entries = $mesg->entries;
- if (0 == @entries) {
- daemon_log("$session_id ERROR: ldap search failed: ldap_base=$ldap_base, filter=$search", 1);
- }
-
- foreach my $entry (@entries) {
- # Only modify entry if it is not set to '$state'
- if ($entry->get_value("FAIstate") ne "$state"){
- daemon_log("$session_id INFO: Setting FAIstate to '$state' for ".$entry->dn, 5);
- my $result;
- my %tmp = map { $_ => 1 } $entry->get_value("objectClass");
- if (exists $tmp{'FAIobject'}){
- if ($state eq ''){
- $result= $ldap_handle->modify($entry->dn, changes => [ delete => [ FAIstate => [] ] ]);
- } else {
- $result= $ldap_handle->modify($entry->dn, changes => [ replace => [ FAIstate => $state ] ]);
- }
- } elsif ($state ne ''){
- $result= $ldap_handle->modify($entry->dn, changes => [ add => [ objectClass => 'FAIobject' ], add => [ FAIstate => $state ] ]);
- }
-
- # Errors?
- if ($result->code){
- daemon_log("$session_id Error: Setting FAIstate to '$state' for ".$entry->dn. "failed: ".$result->error, 1);
- }
- } else {
- daemon_log("$session_id DEBUG FAIstate at host '".$entry->dn."' already at state '$st'", 7);
- }
- }
- } else {
- daemon_log("$session_id ERROR: LDAP search failed: ldap_base=$ldap_base, filter=$search", 1);
- }
- &release_ldap_handle($ldap_handle);
+ if ($mesg->count) {
+ my @entries = $mesg->entries;
+ if (0 == @entries) {
+ daemon_log("$session_id ERROR: ldap search failed: ldap_base=$ldap_base, filter=$search", 1);
+ }
- # if no ldap handle defined
- #} else {
- # daemon_log("$session_id ERROR: no LDAP handle defined for update FAIstate", 1);
- #}
+ foreach my $entry (@entries) {
+ # Only modify entry if it is not set to '$state'
+ if ($entry->get_value("FAIstate") ne "$state"){
+ daemon_log("$session_id INFO: Setting FAIstate to '$state' for ".$entry->dn, 5);
+ my $result;
+ my %tmp = map { $_ => 1 } $entry->get_value("objectClass");
+ if (exists $tmp{'FAIobject'}){
+ if ($state eq ''){
+ $result= $ldap_handle->modify($entry->dn, changes => [ delete => [ FAIstate => [] ] ]);
+ } else {
+ $result= $ldap_handle->modify($entry->dn, changes => [ replace => [ FAIstate => $state ] ]);
+ }
+ } elsif ($state ne ''){
+ $result= $ldap_handle->modify($entry->dn, changes => [ add => [ objectClass => 'FAIobject' ], add => [ FAIstate => $state ] ]);
+ }
+
+ # Errors?
+ if ($result->code){
+ daemon_log("$session_id Error: Setting FAIstate to '$state' for ".$entry->dn. "failed: ".$result->error, 1);
+ }
+ } else {
+ daemon_log("$session_id DEBUG FAIstate at host '".$entry->dn."' already at state '$st'", 7);
+ }
+ }
+ } else {
+ daemon_log("$session_id ERROR: LDAP search failed: ldap_base=$ldap_base, filter=$search", 1);
+ }
+ &release_ldap_handle($ldap_handle);
return;
}
# If there's any host inside of the search string, procress them
if (!($search =~ /macAddress/)){
+ &release_ldap_handle($ldap_handle);
return;
}
sub run_create_fai_server_db {
my ($kernel, $session, $heap, $table_name) = @_[KERNEL, SESSION, HEAP, ARG0];
my $session_id = $session->ID;
- my $ldap_handle = &get_ldap_handle();
- if (not defined $ldap_handle) {
- $kernel->delay_set('create_fai_server_db', 1, $table_name);
- return;
- }
my $task = POE::Wheel::Run->new(
- Program => sub { &create_fai_server_db($table_name,$kernel, undef, $session_id, $ldap_handle) },
+ Program => sub { &create_fai_server_db($table_name,$kernel, undef, $session_id) },
StdoutEvent => "session_run_result",
StderrEvent => "session_run_debug",
CloseEvent => "session_run_done",
);
$heap->{task}->{ $task->ID } = $task;
- $heap->{ldap_handle}->{$task->ID} = $ldap_handle;
return;
}
sub create_fai_server_db {
- my ($table_name, $kernel, $dont_create_packages_list, $session_id, $ldap_handle) = @_;
+ my ($table_name, $kernel, $dont_create_packages_list, $session_id) = @_;
my $result;
if (not defined $session_id) { $session_id = 0; }
+ my $ldap_handle = &get_ldap_handle($session_id);
if(defined($ldap_handle)) {
daemon_log("$session_id INFO: create_fai_server_db: start", 5);
my $mesg= $ldap_handle->search(
}
}
daemon_log("$session_id INFO: create_fai_server_db: finished", 5);
+ &release_ldap_handle($ldap_handle);
# TODO: Find a way to post the 'create_packages_list_db' event
if(not defined($dont_create_packages_list)) {
sub run_create_fai_release_db {
my ($kernel, $session, $heap, $table_name) = @_[KERNEL, SESSION, HEAP, ARG0];
my $session_id = $session->ID;
- my $ldap_handle = &get_ldap_handle();
- if (not defined $ldap_handle) {
- $kernel->delay_set('create_fai_release_db', 1, $table_name);
- return;
- }
my $task = POE::Wheel::Run->new(
- Program => sub { &create_fai_release_db($table_name, $session_id, $ldap_handle) },
+ Program => sub { &create_fai_release_db($table_name, $session_id) },
StdoutEvent => "session_run_result",
StderrEvent => "session_run_debug",
CloseEvent => "session_run_done",
);
$heap->{task}->{ $task->ID } = $task;
- $heap->{ldap_handle}->{$task->ID} = $ldap_handle;
return;
}
sub create_fai_release_db {
- my ($table_name, $session_id, $ldap_handle) = @_;
+ my ($table_name, $session_id) = @_;
my $result;
# used for logging
if (not defined $session_id) { $session_id = 0; }
- #my $ldap_handle = &get_ldap_handle();
+ my $ldap_handle = &get_ldap_handle($session_id);
if(defined($ldap_handle)) {
daemon_log("$session_id INFO: create_fai_release_db: start",5);
my $mesg= $ldap_handle->search(
}
daemon_log("$session_id DEBUG: create_fai_release_db: Inserting ".scalar @sql_list." entries to DB",8);
+ &release_ldap_handle($ldap_handle);
if(@sql_list) {
unshift @sql_list, "VACUUM";
unshift @sql_list, "DELETE FROM $table_name";
}
daemon_log("$session_id INFO: create_fai_release_db: finished",5);
}
- #&release_ldap_handle($ldap_handle);
return $result;
}
sub create_sources_list {
- my $session_id = shift;
+ my $session_id = shift || 0;
my $result="/tmp/gosa_si_tmp_sources_list";
# Remove old file
return undef;
}
if(defined($main::ldap_server_dn) and length($main::ldap_server_dn) > 0) {
- my $ldap_handle = &get_ldap_handle();
+ my $ldap_handle = &get_ldap_handle($session_id);
my $mesg=$ldap_handle->search(
base => $main::ldap_server_dn,
scope => 'base',
attrs => 'FAIrepository',
filter => 'objectClass=FAIrepositoryServer'
);
- &release_ldap_handle($ldap_handle);
if($mesg->count) {
foreach my $entry(@{$mesg->{'entries'}}) {
foreach my $value(@{$entry->get_value('FAIrepository', asref => 1)}) {
}
}
}
+ &release_ldap_handle($ldap_handle);
} else {
if (defined $main::ldap_server_dn){
&main::daemon_log("$session_id ERROR: something wrong with ldap_server_dn '$main::ldap_server_dn', abort create_sources_list", 1);
daemon_log("status: $server_status", 1);
daemon_log($server_status_hash->{$server_status}.": $server_revision", 1);
-# Create a pool of LDAP handles
-$ldap_factory = ResourcePool::Factory::Net::LDAP->new($ldap_uri, version => $ldap_version);
-$ldap_factory->bind($ldap_admin_dn, password=>$ldap_admin_password);
-$ldap_pool = ResourcePool->new($ldap_factory,
- Max => $max_ldap_handle,
- #MaxTry => 1,
- #SleepOnFail => [0, 0, 1, 1],
- PreCreate => $precreate_ldap_handle,
-);
-
-
# Buildup data bases
{
no strict "refs";