summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: fbbd747)
raw | patch | inline | side by side (parent: fbbd747)
author | janw <janw@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 30 May 2008 14:04:38 +0000 (14:04 +0000) | ||
committer | janw <janw@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 30 May 2008 14:04:38 +0000 (14:04 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@11127 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-si/server/events/gosaTriggered.pm | patch | blob | history |
index f5035dc2b0d10a3fcbbff85e3ab6e1ba0f8d0eeb..fba518cdaa9cbea499d5cf26076b2a499b6a4c23 100644 (file)
my $ldap_handle = &main::get_ldap_handle();
my $ldap_entry;
my $ogroup_entry;
+ my $changed_attributes_counter = 0;
+
+ eval {
- # build the base, use optional base parameter or take it from ogroup
- if(!(defined($base) && (length($base) > 0))) {
my $ldap_mesg= $ldap_handle->search(
base => $main::ldap_base,
scope => 'sub',
);
if($ldap_mesg->count == 1) {
$ogroup_entry= $ldap_mesg->pop_entry();
-
- # Subtract the ObjectGroup cn
- $base = $1 if $ogroup_entry->dn =~ /cn=$ogroup,ou=groups,(.*)$/;
} elsif ($ldap_mesg->count == 0) {
&main::daemon_log("ERROR: A GosaGroupOfNames with cn '$ogroup' was not found in base '".$main::ldap_base."'!", 1);
} else {
&main::daemon_log("ERROR: More than one ObjectGroups with cn '$ogroup' was found in base '".$main::ldap_base."'!", 1);
}
- }
- # prepend ou=systems
- $base = "ou=systems,".$base;
+ # build the base, use optional base parameter or take it from ogroup
+ if(!(defined($base) && (length($base) > 0))) {
+ # Subtract the ObjectGroup cn
+ $base = $1 if $ogroup_entry->dn =~ /cn=$ogroup,ou=groups,(.*)$/;
+ }
+
+ # prepend ou=systems
+ $base = "ou=systems,".$base;
- # Search for an existing entry (should be in ou=incoming)
- my $ldap_mesg= $ldap_handle->search(
- base => $main::ldap_base,
- scope => 'sub',
- filter => "(&(objectClass=GOhard)(|(macAddress=$mac)(dhcpHWaddress=$mac)))",
- );
+ # Search for an existing entry (should be in ou=incoming)
+ my $ldap_mesg= $ldap_handle->search(
+ base => $main::ldap_base,
+ scope => 'sub',
+ filter => "(&(objectClass=GOhard)(|(macAddress=$mac)(dhcpHWaddress=$mac)))",
+ );
- # TODO: Find a way to guess an ip address for hosts with no ldap entry (MAC->ARP->IP)
+ # TODO: Find a way to guess an ip address for hosts with no ldap entry (MAC->ARP->IP)
- if($ldap_mesg->count == 1) {
- &main::daemon_log("NOTICE: One system with mac address '$mac' was found in base '".$main::ldap_base."'!", 1);
- # Get the entry from LDAP
- $ldap_entry= $ldap_mesg->pop_entry();
+ if($ldap_mesg->count == 1) {
+ &main::daemon_log("DEBUG: One system with mac address '$mac' was found in base '".$main::ldap_base."'!", 6);
+ # Get the entry from LDAP
+ $ldap_entry= $ldap_mesg->pop_entry();
- if(!($ldap_entry->dn() eq "cn=".$ldap_entry->get_value('cn').",$base")) {
+ if(!($ldap_entry->dn() eq "cn=".$ldap_entry->get_value('cn').",$base")) {
# Move the entry to the new ou
$ldap_entry->changetype('moddn');
$ldap_entry->add(
- 'newrdn' => "cn=".$ldap_entry->get_value('cn'),
- 'deleteoldrdn' => "1",
- 'newsuperior' => $base,
+ newrdn => "cn=".$ldap_entry->get_value('cn'),
+ deleteoldrdn => 1,
+ newsuperior => $base,
);
- my $mesg = $ldap_entry->update($ldap_handle);
- if($mesg->code() != 0) {
- &main::daemon_log("ERROR: Updating the dn for system with mac address '$mac' failed (code ".$mesg->code().") with '".$mesg->{'errorMessage'}."'!", 1);
+ }
+
+ }
+
+ $ldap_mesg= $ldap_handle->search(
+ base => $main::ldap_base,
+ scope => 'sub',
+ filter => "(&(objectClass=GOhard)(|(macAddress=$mac)(dhcpHWaddress=$mac)))",
+ );
+
+ # TODO: Find a way to guess an ip address for hosts with no ldap entry (MAC->ARP->IP)
+
+ if($ldap_mesg->count == 1) {
+ $ldap_entry= $ldap_mesg->pop_entry();
+ # Check for needed objectClasses
+ my $oclasses = $ldap_entry->get_value('objectClass', asref => 1);
+ foreach my $oclass ("FAIobject", "GOhard") {
+ if(!(scalar grep $_ eq $oclass, map {$_ => 1} @$oclasses)) {
+ &main::daemon_log("Adding objectClass $oclass", 1);
+ $ldap_entry->add(
+ objectClass => $oclass,
+ );
+ my $oclass_result = $ldap_entry->update($ldap_handle);
}
}
- # Check for needed objectClasses
- my $oclasses = $ldap_entry->get_value('objectClass', asref => 1);
- foreach my $oclass ("FAIobject", "GOhard") {
- if(!(scalar grep $_ eq $oclass, map {$_ => 1} @$oclasses)) {
+
+ # Set FAIstate
+ if(defined($ldap_entry->get_value('FAIstate'))) {
+ if(!($ldap_entry->get_value('FAIstate') eq 'install')) {
+ $ldap_entry->changetype('modify');
+ $ldap_entry->replace(
+ 'FAIstate' => 'install'
+ );
+ my $replace_result = $ldap_entry->update($ldap_handle);
+ }
+ } else {
+ $ldap_entry->changetype('add');
$ldap_entry->add(
- objectClass => $oclass,
+ 'FAIstate' => 'install'
);
+ my $add_result = $ldap_entry->update($ldap_handle);
+ }
+
+
+ } elsif ($ldap_mesg->count == 0) {
+ # TODO: Create a new entry
+ # $ldap_entry = Net::LDAP::Entry->new();
+ # $ldap_entry->dn("cn=$mac,$base");
+ &main::daemon_log("WARNING: No System with mac address '$mac' was found in base '".$main::ldap_base."'! Re-queuing job.", 4);
+ $main::job_db->exec_statement("UPDATE jobs SET status = 'waiting', timestamp = '".&get_time()."' WHERE id = $jobdb_id");
+ } else {
+ &main::daemon_log("ERROR: More than one system with mac address '$mac' was found in base '".$main::ldap_base."'!", 1);
+ }
+
+ # Add to ObjectGroup
+ if(!(scalar grep $_, map {$_ => 1} $ogroup_entry->get_value('member', asref => 1))) {
+ $ogroup_entry->add (
+ 'member' => $ldap_entry->dn(),
+ );
+ my $ogroup_result = $ogroup_entry->update($ldap_handle);
+ if ($ogroup_result->code() != 0) {
+ &main::daemon_log("ERROR: Updating the ObjectGroup '$ogroup' failed (code '".$ogroup_result->code()."') with '".$ogroup_result->{'errorMessage'}."'!", 1);
}
}
- # Set FAIstate
- if(defined($ldap_entry->get_value('FAIstate'))) {
- if(!($ldap_entry->get_value('FAIstate') eq 'install')) {
+ # Finally set gotoMode to active
+ if(defined($ldap_entry->get_value('gotoMode'))) {
+ if(!($ldap_entry->get_value('gotoMode') eq 'active')) {
$ldap_entry->replace(
- 'FAIstate' => 'install'
+ 'gotoMode' => 'active'
);
- my $faistate_mesg = $ldap_entry->update($ldap_handle);
- if ($faistate_mesg->code() != 0) {
- &main::daemon_log("ERROR: Updating the FAIstate for '".$ldap_entry->dn()."' failed (code '".$faistate_mesg->code()."') with '$@'!", 1);
+ my $activate_result = $ldap_entry->update($ldap_handle);
+ if ($activate_result->code() != 0) {
+ &main::daemon_log("ERROR: Activating system '".$ldap_entry->dn()."' failed (code '".$activate_result->code()."') with '".$activate_result->{'errorMessage'}."'!", 1);
}
}
} else {
$ldap_entry->add(
- 'FAIstate' => 'install'
- );
- my $faistate_mesg = $ldap_entry->update($ldap_handle);
- if ($faistate_mesg->code() != 0) {
- &main::daemon_log("ERROR: Updating the FAIstate for '".$ldap_entry->dn()."' failed (code '".$faistate_mesg->code()."') with '$@'!", 1);
- }
- }
-
-
- } elsif ($ldap_mesg->count == 0) {
- # TODO: Create a new entry
- # $ldap_entry = Net::LDAP::Entry->new();
- # $ldap_entry->dn("cn=$mac,$base");
- &main::daemon_log("WARNING: No System with mac address '$mac' was found in base '".$main::ldap_base."'! Re-queuing job.", 4);
- $main::job_db->select_dbentry("UPDATE jobs SET state = 'waiting', timestamp = '".&get_time()."' WHERE header = 'trigger_activate_new' AND mac_address LIKE '$mac'");
- } else {
- &main::daemon_log("ERROR: More than one system with mac address '$mac' was found in base '".$main::ldap_base."'!", 1);
- }
-
- my $update_mesg = $ldap_entry->update($ldap_handle);
- if ($update_mesg->code() != 0) {
- &main::daemon_log("ERROR: Updating attributes for '".$ldap_entry->dn()."' failed (code '".$update_mesg->code()."') with '".$update_mesg->{'errorMessage'}."'!", 1);
- }
-
- # Add to ObjectGroup
- if(!(scalar grep $_, map {$_ => 1} $ogroup_entry->get_value('member', asref => 1))) {
- $ogroup_entry->add (
- 'member' => $ldap_entry->dn(),
- );
- my $ogroup_result = $ogroup_entry->update($ldap_handle);
- if ($ogroup_result->code() != 0) {
- &main::daemon_log("ERROR: Updating the ObjectGroup '$ogroup' failed (code '".$ogroup_result->code()."') with '".$ogroup_result->{'errorMessage'}."'!", 1);
- }
- }
-
- # Finally set gotoMode to active
- if(defined($ldap_entry->get_value('gotoMode'))) {
- if(!($ldap_entry->get_value('gotoMode') eq 'active')) {
- $ldap_entry->replace(
'gotoMode' => 'active'
);
+ my $activate_result = $ldap_entry->update($ldap_handle);
+ if ($activate_result->code() != 0) {
+ &main::daemon_log("ERROR: Activating system '".$ldap_entry->dn()."' failed (code '".$activate_result->code()."') with '".$activate_result->{'errorMessage'}."'!", 1);
+ }
}
- } else {
- $ldap_entry->add(
- 'gotoMode' => 'active'
- );
- }
- my $activate_result = $ldap_entry->update($ldap_handle);
- if ($activate_result->code() != 0) {
- &main::daemon_log("ERROR: Activating system '".$ldap_entry->dn()."' failed (code '".$activate_result->code()."') with '".$activate_result->{'errorMessage'}."'!", 1);
+ };
+ if($@) {
+ &main::daemon_log("ERROR: activate_new failed with '$@'!", 1);
}
+ # Delete job
+ $main::job_db->exec_statement("DELETE FROM jobs WHERE id = $jobdb_id");
my %data;
my $out_msg = &build_msg("activate_new", $target, $source, \%data);