index 62662fa3bdfacd99c460bb7a5e0d49ed00eed151..fb8aab830dd33adcc62e5226f235e304b16f934c 100644 (file)
foreach my $log_line (@$result) {
if ($log_line =~ / succeed: /) {
foreach my $log_line (@$result) {
if ($log_line =~ / succeed: /) {
- &main::daemon_log("0 DEBUG: ClientPackages - $log_line", 7);
+ &main::daemon_log("0 INFO: ClientPackages - $log_line", 5);
} else {
&main::daemon_log("0 ERROR: ClientPackages - $log_line", 1);
}
} else {
&main::daemon_log("0 ERROR: ClientPackages - $log_line", 1);
}
my $server_address = "$server_ip:$server_port";
$main::server_address = $server_address;
my $server_address = "$server_ip:$server_port";
$main::server_address = $server_address;
+{
+ # Check if ou=incoming exists
+ # TODO: This should be transferred to a module init-function
+ my $ldap_handle = &main::get_ldap_handle();
+ if( defined($ldap_handle) ) {
+ &main::daemon_log("0 INFO: Searching for ou=incoming container for new clients", 5);
+ # Perform search
+ my $mesg = $ldap_handle->search(
+ base => $ldap_base,
+ scope => 'one',
+ filter => "(&(ou=incoming)(objectClass=organizationalUnit))"
+ );
+ if(not defined($mesg->count) or $mesg->count == 0) {
+ my $incomingou = Net::LDAP::Entry->new();
+ $incomingou->dn('ou=incoming,'.$ldap_base);
+ $incomingou->add('objectClass' => 'organizationalUnit');
+ $incomingou->add('ou' => 'incoming');
+ my $result = $incomingou->update($ldap_handle);
+ if($result->code != 0) {
+ &main::daemon_log("0 ERROR: Problem adding ou=incoming: '".$result->error()."'!", 1);
+ }
+ }
+ }
+ &main::release_ldap_handle($ldap_handle);
+}
+
### functions #################################################################
### functions #################################################################
# skip PREFIX
$header =~ s/^CLMSG_//;
# skip PREFIX
$header =~ s/^CLMSG_//;
- &main::daemon_log("$session_id DEBUG: ClientPackages: msg to process: $header", 7);
+ &main::daemon_log("$session_id DEBUG: ClientPackages: msg to process: $header", 26);
if( 0 == length @target_l){
&main::daemon_log("$session_id ERROR: no target specified for msg $header", 1);
$error++;
} elsif( 1 == length @target_l) {
my $target = $target_l[0];
if( 0 == length @target_l){
&main::daemon_log("$session_id ERROR: no target specified for msg $header", 1);
$error++;
} elsif( 1 == length @target_l) {
my $target = $target_l[0];
- if(&server_matches($target)) {
+ if(&server_matches($target, $session_id)) {
if ($header eq 'new_key') {
@out_msg_l = &new_key($msg_hash)
} elsif ($header eq 'here_i_am') {
if ($header eq 'new_key') {
@out_msg_l = &new_key($msg_hash)
} elsif ($header eq 'here_i_am') {
} else {
# a event exists with the header as name
if( exists $event2module_hash->{$header} ) {
} else {
# a event exists with the header as name
if( exists $event2module_hash->{$header} ) {
- &main::daemon_log("$session_id INFO: found event '$header' at event-module '".$event2module_hash->{$header}."'", 5);
+ &main::daemon_log("$session_id DEBUG: found event '$header' at event-module '".$event2module_hash->{$header}."'", 26);
no strict 'refs';
@out_msg_l = &{$event2module_hash->{$header}."::$header"}($msg, $msg_hash, $session_id);
no strict 'refs';
@out_msg_l = &{$event2module_hash->{$header}."::$header"}($msg, $msg_hash, $session_id);
@out_msg_l = ();
}
} else {
@out_msg_l = ();
}
} else {
- &main::daemon_log("INFO: msg is not for gosa-si-server '$server_address', deliver it to target '$target'", 5);
+ &main::daemon_log("DEBUG: msg is not for gosa-si-server '$server_address', deliver it to target '$target'", 26);
push(@out_msg_l, $msg);
}
}
push(@out_msg_l, $msg);
}
}
my $db_res= $main::known_clients_db->select_dbentry( $sql_statement );
if ( 1 == keys %{$db_res} ) {
my $db_res= $main::known_clients_db->select_dbentry( $sql_statement );
if ( 1 == keys %{$db_res} ) {
- &main::daemon_log("$session_id WARNING: $source is already known as a client", 1);
- &main::daemon_log("$session_id WARNING: values for $source are being overwritten", 1);
+ &main::daemon_log("$session_id WARNING: $source is already known as a client", 3);
+ &main::daemon_log("$session_id WARNING: values for $source are being overwritten", 3);
$nu_clients --;
}
# number of current active clients
my $act_nu_clients = $nu_clients;
$nu_clients --;
}
# number of current active clients
my $act_nu_clients = $nu_clients;
- &main::daemon_log("$session_id INFO: number of current active clients: $act_nu_clients", 5);
- &main::daemon_log("$session_id INFO: number of maximal allowed clients: $max_clients", 5);
+ &main::daemon_log("$session_id DEBUG: number of current active clients: $act_nu_clients", 26);
+ &main::daemon_log("$session_id DEBUG: number of maximal allowed clients: $max_clients", 26);
if($max_clients <= $act_nu_clients) {
my $out_hash = &create_xml_hash("denied", $server_address, $source);
if($max_clients <= $act_nu_clients) {
my $out_hash = &create_xml_hash("denied", $server_address, $source);
} );
if ($res != 0) {
} );
if ($res != 0) {
- &main::daemon_log("$session_id ERROR: cannot add entry to known_clients: $res");
+ &main::daemon_log("$session_id ERROR: cannot add entry to known_clients: $res",1);
return;
}
# return acknowledgement to client
$out_hash = &create_xml_hash("registered", $server_address, $source);
return;
}
# return acknowledgement to client
$out_hash = &create_xml_hash("registered", $server_address, $source);
-
# 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, $session_id);
# 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, $session_id);
"SET status='error', result='$new_ldap_config_out' ".
"WHERE status='processing' AND macaddress LIKE '$mac_address'";
my $res = $main::job_db->update_dbentry($sql_statement);
"SET status='error', result='$new_ldap_config_out' ".
"WHERE status='processing' AND macaddress LIKE '$mac_address'";
my $res = $main::job_db->update_dbentry($sql_statement);
- &main::daemon_log("$session_id DEBUG: $sql_statement RESULT: $res", 7);
+ &main::daemon_log("$session_id DEBUG: $sql_statement RESULT: $res", 26);
}
my $register_out = &create_xml_string($out_hash);
push(@out_msg_l, $register_out);
}
my $register_out = &create_xml_string($out_hash);
push(@out_msg_l, $register_out);
push(@out_msg_l, $syslog_config_out);
}
push(@out_msg_l, $syslog_config_out);
}
+ # update ldap entry if exists
+ my $ldap_handle= &main::get_ldap_handle();
+ my $ldap_res= $ldap_handle->search(
+ base => $ldap_base,
+ scope => 'sub',
+ #attrs => ['ipHostNumber'],
+ filter => "(&(objectClass=GOhard)(macAddress=$mac_address))");
+ if($ldap_res->code) {
+ &main::daemon_log("$session_id ERROR: LDAP Entry for client with mac address $mac_address not found: ".$ldap_res->error, 1);
+ } elsif ($ldap_res->count != 1) {
+ &main::daemon_log("$session_id ERROR: client with mac address $mac_address not found/unique/active - not updating ldap entry".
+ "\n\tbase: $ldap_base".
+ "\n\tscope: sub".
+ "\n\tattrs: ipHostNumber".
+ "\n\tfilter: (&(objectClass=GOhard)(macaddress=$mac_address))", 1);
+ } else {
+ my $entry= $ldap_res->pop_entry();
+ my $ip_address= $entry->get_value('ipHostNumber');
+ my $source_ip= ($1) if $source =~ /^([0-9\.]*?):[0-9]*$/;
+ if(not defined($ip_address) and defined($source_ip)) {
+ $entry->add( 'ipHostNumber' => $source_ip );
+ my $mesg= $entry->update($ldap_handle);
+ $mesg->code && &main::daemon_log("$session_id ERROR: Updating IP Address for client with mac address $mac_address failed with '".$mesg->mesg()."'", 1);
+ } elsif(defined($source_ip) and not ($source_ip eq $ip_address)) {
+ $entry->replace( 'ipHostNumber' => $source_ip );
+ my $mesg= $entry->update($ldap_handle);
+ $mesg->code && &main::daemon_log("$session_id ERROR: Updating IP Address for client with mac address $mac_address failed with '".$mesg->mesg()."'", 1);
+ } elsif (not defined($source_ip)) {
+ &main::daemon_log("ERROR: Could not parse source value '$source' perhaps not an ip address?", 1);
+ }
+ }
+ &main::release_ldap_handle($ldap_handle);
+
# notify registered client to all other server
my %mydata = ( 'client' => $source, 'macaddress' => $mac_address);
my $mymsg = &build_msg('new_foreign_client', $main::server_address, "KNOWN_SERVER", \%mydata);
push(@out_msg_l, $mymsg);
# notify registered client to all other server
my %mydata = ( 'client' => $source, 'macaddress' => $mac_address);
my $mymsg = &build_msg('new_foreign_client', $main::server_address, "KNOWN_SERVER", \%mydata);
push(@out_msg_l, $mymsg);
- &main::daemon_log("$session_id INFO: register client $source ($mac_address)", 5);
- &main::daemon_log("$session_id INFO: client version: $client_status - $client_revision", 5);
+ &main::daemon_log("$session_id INFO: register client $source ($mac_address), $client_status - $client_revision", 5);
return @out_msg_l;
}
return @out_msg_l;
}
# what is your search pattern
my $search_pattern = @{$msg_hash->{who_has}}[0];
my $search_element = @{$msg_hash->{$search_pattern}}[0];
# what is your search pattern
my $search_pattern = @{$msg_hash->{who_has}}[0];
my $search_element = @{$msg_hash->{$search_pattern}}[0];
- &main::daemon_log("who_has-msg looking for $search_pattern $search_element", 7);
+ #&main::daemon_log("who_has-msg looking for $search_pattern $search_element", 7);
# scanning known_clients for search_pattern
my @host_addresses = keys %$main::known_clients;
# scanning known_clients for search_pattern
my @host_addresses = keys %$main::known_clients;
attrs => ['gotoSyslogServer'],
filter => "(&(objectClass=GOhard)(macaddress=$mac_address))");
if($ldap_res->code) {
attrs => ['gotoSyslogServer'],
filter => "(&(objectClass=GOhard)(macaddress=$mac_address))");
if($ldap_res->code) {
- &main::daemon_log("$session_id ".$ldap_res->error, 1);
+ &main::daemon_log("$session_id ERROR: new_syslog_config: ldap search: ".$ldap_res->error, 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
my $ldap_res = $ldap_handle->search( base => $ldap_base,
scope => 'sub',
attrs => ['gotoSyslogServer'],
my $ldap_res = $ldap_handle->search( base => $ldap_base,
scope => 'sub',
attrs => ['gotoSyslogServer'],
- filter => "(&(objectClass=gosaGroupOfNames)(member=$filter_dn))");
+ filter => "(&(gosaGroupObjects=[W])(objectClass=gosaGroupOfNames)(member=$filter_dn))");
if($ldap_res->code) {
if($ldap_res->code) {
- &main::daemon_log("$session_id ".$ldap_res->error, 1);
+ &main::daemon_log("$session_id ERROR: new_syslog_config: ldap search: ".$ldap_res->error, 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
"\n\tbase: $ldap_base".
"\n\tscope: sub".
"\n\tattrs: gotoSyslogServer".
"\n\tbase: $ldap_base".
"\n\tscope: sub".
"\n\tattrs: gotoSyslogServer".
- "\n\tfilter: (&(objectClass=gosaGroupOfNames)(member=$filter_dn))", 1);
+ "\n\tfilter: (&(gosaGroupObjects=[W])(objectClass=gosaGroupOfNames)(member=$filter_dn))", 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
attrs => ['gotoNtpServer'],
filter => "(&(objectClass=GOhard)(macaddress=$address))");
if($ldap_res->code) {
attrs => ['gotoNtpServer'],
filter => "(&(objectClass=GOhard)(macaddress=$address))");
if($ldap_res->code) {
- &main::daemon_log("$session_id ".$ldap_res->error, 1);
+ &main::daemon_log("$session_id ERROR: new_ntp_config: ldap search: ".$ldap_res->error, 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
my $ldap_res = $ldap_handle->search( base => $ldap_base,
scope => 'sub',
attrs => ['gotoNtpServer'],
my $ldap_res = $ldap_handle->search( base => $ldap_base,
scope => 'sub',
attrs => ['gotoNtpServer'],
- filter => "(&(objectClass=gosaGroupOfNames)(member=$filter_dn))");
+ filter => "(&(gosaGroupObjects=[W])(objectClass=gosaGroupOfNames)(member=$filter_dn))");
if($ldap_res->code) {
if($ldap_res->code) {
- &main::daemon_log("$session_id ".$ldap_res->error, 1);
+ &main::daemon_log("$session_id ERROR: new_ntp_config: ldap search: ".$ldap_res->error, 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
"\n\tbase: $ldap_base".
"\n\tscope: sub".
"\n\tattrs: gotoNtpServer".
"\n\tbase: $ldap_base".
"\n\tscope: sub".
"\n\tattrs: gotoNtpServer".
- "\n\tfilter: (&(objectClass=gosaGroupOfNames)(member=$filter_dn))", 1);
+ "\n\tfilter: (&(gosaGroupObjects=[W])(objectClass=gosaGroupOfNames)(member=$filter_dn))", 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
# check hit
my $hit_counter = keys %{$res};
if( not $hit_counter == 1 ) {
# check hit
my $hit_counter = keys %{$res};
if( not $hit_counter == 1 ) {
- &main::daemon_log("$session_id ERROR: more or no hit found in known_clients_db by query '$sql_statement'", 1);
+ &main::daemon_log("$session_id ERROR: new_ldap_config: more or no hit found in known_clients_db by query '$sql_statement'", 1);
return;
}
return;
}
my $hostkey = $res->{1}->{hostkey};
if (not defined $macaddress) {
my $hostkey = $res->{1}->{hostkey};
if (not defined $macaddress) {
- &main::daemon_log("$session_id ERROR: no mac address found for client $address", 1);
+ &main::daemon_log("$session_id ERROR: new_ldap_config: no mac address found for client $address", 1);
return;
}
return;
}
attrs => ['dn', 'gotoLdapServer', 'gosaUnitTag', 'FAIclass'],
filter => "(&(objectClass=GOhard)(macaddress=$macaddress))");
if($mesg->code) {
attrs => ['dn', 'gotoLdapServer', 'gosaUnitTag', 'FAIclass'],
filter => "(&(objectClass=GOhard)(macaddress=$macaddress))");
if($mesg->code) {
- &main::daemon_log("$session_id ".$mesg->error, 1);
+ &main::daemon_log("$session_id ERROR: new_ldap_config: ldap search: ".$mesg->error, 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
$mesg = $ldap_handle->search( base => $ldap_base,
scope => 'sub',
attrs => ['dn', 'gotoLdapServer', 'FAIclass'],
$mesg = $ldap_handle->search( base => $ldap_base,
scope => 'sub',
attrs => ['dn', 'gotoLdapServer', 'FAIclass'],
- filter => "(&(objectClass=gosaGroupOfNames)(member=$filter_dn))");
+ filter => "(&(gosaGroupObjects=[W])(objectClass=gosaGroupOfNames)(member=$filter_dn))");
if($mesg->code) {
if($mesg->code) {
- &main::daemon_log("$session_id ERROR: unable to search for '(&(objectClass=gosaGroupOfNames)(member=$filter_dn))': ".$mesg->error, 1);
+ &main::daemon_log("$session_id ERROR: new_ldap_config: unable to search for '(&(objectClass=gosaGroupOfNames)(member=$filter_dn))': ".$mesg->error, 1);
&main::release_ldap_handle($ldap_handle);
return;
}
# Sanity check
if ($mesg->count != 1) {
&main::release_ldap_handle($ldap_handle);
return;
}
# Sanity check
if ($mesg->count != 1) {
- &main::daemon_log("$session_id ERROR: client with mac address $macaddress not found/unique/active - not sending ldap config".
+ &main::daemon_log("$session_id ERROR: new_ldap_config: client with mac address $macaddress not found/unique/active - not sending ldap config".
"\n\tbase: $ldap_base".
"\n\tscope: sub".
"\n\tattrs: dn, gotoLdapServer, FAIclass".
"\n\tbase: $ldap_base".
"\n\tscope: sub".
"\n\tattrs: dn, gotoLdapServer, FAIclass".
- "\n\tfilter: (&(objectClass=gosaGroupOfNames)(member=$filter_dn))", 1);
+ "\n\tfilter: (&(gosaGroupObjects=[W])(objectClass=gosaGroupOfNames)(member=$filter_dn))", 1);
&main::release_ldap_handle($ldap_handle);
return;
}
&main::release_ldap_handle($ldap_handle);
return;
}
filter => "(&(objectClass=gosaAdministrativeUnit)(gosaUnitTag=$unit_tag))");
#$mesg->code && die $mesg->error;
if($mesg->code) {
filter => "(&(objectClass=gosaAdministrativeUnit)(gosaUnitTag=$unit_tag))");
#$mesg->code && die $mesg->error;
if($mesg->code) {
- &main::daemon_log($mesg->error, 1);
+ &main::daemon_log("$session_id ERROR: new_ldap_config: ldap search: ".$mesg->error, 1);
&main::release_ldap_handle($ldap_handle);
return "error-unit-tag-count-0";
}
# Sanity check
if ($mesg->count != 1) {
&main::release_ldap_handle($ldap_handle);
return "error-unit-tag-count-0";
}
# Sanity check
if ($mesg->count != 1) {
- &main::daemon_log("WARNING: cannot find administrative unit for client with tag $unit_tag", 1);
+ &main::daemon_log("WARNING: cannot find administrative unit for client with tag $unit_tag", 3);
&main::release_ldap_handle($ldap_handle);
return "error-unit-tag-count-".$mesg->count;
}
&main::release_ldap_handle($ldap_handle);
return "error-unit-tag-count-".$mesg->count;
}
# check hit
my $hit_counter = keys %{$res};
if( not $hit_counter == 1 ) {
# check hit
my $hit_counter = keys %{$res};
if( not $hit_counter == 1 ) {
- &main::daemon_log("$session_id ERROR: more or no hit found in known_clients_db by query by '$address'", 1);
+ &main::daemon_log("$session_id ERROR: hardware_config: 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) {
}
my $macaddress = $res->{1}->{macaddress};
my $hostkey = $res->{1}->{hostkey};
if (not defined $macaddress) {
- &main::daemon_log("$session_id ERROR: no mac address found for client $address", 1);
+ &main::daemon_log("$session_id ERROR: hardware_config: no mac address found for client $address", 1);
return;
}
return;
}
);
if($mesg->count() == 0) {
);
if($mesg->count() == 0) {
- &main::daemon_log("Host was not found in LDAP!", 1);
+ &main::daemon_log("$session_id INFO: Host was not found in LDAP!", 5);
# set status = hardware_detection at jobqueue if entry exists
# TODO
# set status = hardware_detection at jobqueue if entry exists
# TODO
} else {
my $entry= $mesg->entry(0);
if (defined($entry->get_value("gotoHardwareChecksum"))) {
} else {
my $entry= $mesg->entry(0);
if (defined($entry->get_value("gotoHardwareChecksum"))) {
- if (! $entry->get_value("gotoHardwareChecksum") eq $gotoHardwareChecksum) {
+ if (! ($entry->get_value("gotoHardwareChecksum") eq $gotoHardwareChecksum)) {
$entry->replace(gotoHardwareChecksum => $gotoHardwareChecksum);
if($entry->update($ldap_handle)) {
&main::daemon_log("$session_id INFO: Hardware changed! Detection triggered.", 5);
$entry->replace(gotoHardwareChecksum => $gotoHardwareChecksum);
if($entry->update($ldap_handle)) {
&main::daemon_log("$session_id INFO: Hardware changed! Detection triggered.", 5);
}
sub server_matches {
}
sub server_matches {
- my $target = shift;
+ my ($target, $session_id) = @_ ;
my $target_ip = ($1) if $target =~ /^([0-9\.]*?):.*$/;
if(!defined($target_ip) or length($target_ip) == 0) {
return;
my $target_ip = ($1) if $target =~ /^([0-9\.]*?):.*$/;
if(!defined($target_ip) or length($target_ip) == 0) {
return;
}
}
} else {
}
}
} else {
- &main::daemon_log("Target ip $target_ip does not match Server ip $server_ip",1);
+ &main::daemon_log("$session_id INFO: Target ip $target_ip does not match Server ip $server_ip",5);
}
return $result;
}
return $result;