index 297b91f1d6bb7d1d02e8d200dae7ef7a13e5de72..2ae7a78bd3e2d54881f4e9ab86a7c6c51c22c5e5 100644 (file)
my $ldap_base;
my $ldap_admin_dn;
my $ldap_admin_password;
+my $mesg;
my %cfg_defaults = (
"server" => {
my ($cfg_file, %cfg_defaults) = @_;
my $cfg;
- if( defined( $cfg_file) && ( length($cfg_file) > 0 )) {
+ if( defined( $cfg_file) && ( (-s $cfg_file) > 0 )) {
if( -r $cfg_file ) {
$cfg = Config::IniFiles->new( -file => $cfg_file );
} else {
my $header = @{$msg_hash->{header}}[0];
my $target = @{$msg_hash->{$header}}[0];
- my $out_msg = &SIPackages::new_ldap_config($target);
+ my $out_msg = &SIPackages::new_ldap_config($target, $session_id);
my @out_msg_l = ( $out_msg );
return @out_msg_l;
}
# 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);
return;
}
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
- my $ldap = Net::LDAP->new($ldap_uri);
- if( not defined $ldap ) {
- &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;
}
- # 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 = $ldap_handle->search(
base => $ldap_base,
scope => 'sub',
filter => "(&(objectClass=GOhard)(|(macAddress=$macaddress)(dhcpHWaddress=ethernet $macaddress)))"
# We need to create a base entry first (if not done from ArpHandler)
if($mesg->count == 0) {
- &main::daemon_log("INFO: Need to create a new LDAP Entry for client $address", 6);
- my $resolver=Net::DNS::Resolver->new;
+ &main::daemon_log("INFO: Need to create a new LDAP Entry for client $address", 4);
my $ipaddress= $1 if $address =~ /^([0-9\.]*?):.*$/;
- my $dnsname= gethostbyaddr(inet_aton($ipaddress), AF_INET) || $ipaddress;
+ my $dnsname;
+ if (defined($msg_hash->{'force-hostname'}) &&
+ defined($msg_hash->{'force-hostname'}[0]) &&
+ length($msg_hash->{'force-hostname'}[0]) > 0){
+ $dnsname= $msg_hash->{'force-hostname'}[0];
+ &main::daemon_log("INFO: Using forced hostname $dnsname for client $address", 4);
+ } else {
+ $dnsname= gethostbyaddr(inet_aton($ipaddress), AF_INET) || $ipaddress;
+ }
+
my $cn = (($dnsname =~ /^(\d){1,3}\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}/) ? $dnsname : sprintf "%s", $dnsname =~ /([^\.]+)\.?/);
my $dn = "cn=$cn,ou=incoming,$ldap_base";
&main::daemon_log("INFO: Creating entry for $dn",5);
$entry->add("objectClass" => "gosaAdministrativeUnitTag");
$entry->add("gosaUnitTag" => $main::gosa_unit_tag);
}
- my $res=$entry->update($ldap);
+ my $res=$entry->update($ldap_handle);
if(defined($res->{'errorMessage'}) &&
length($res->{'errorMessage'}) >0) {
&main::daemon_log("ERROR: can not add entries to LDAP: ".$res->{'errorMessage'}, 1);
return;
} else {
# Fill $mesg again
- $mesg = $ldap->search(
+ $mesg = $ldap_handle->search(
base => $ldap_base,
scope => 'sub',
filter => "(&(objectClass=GOhard)(|(macAddress=$macaddress)(dhcpHWaddress=ethernet $macaddress)))"
}
}
- my $res=$entry->update($ldap);
+ my $res=$entry->update($ldap_handle);
if(defined($res->{'errorMessage'}) &&
length($res->{'errorMessage'}) >0) {
&main::daemon_log("ERROR: can not add entries to LDAP: ".$res->{'errorMessage'}, 1);
my ($msg, $msg_hash, $session_id) = @_ ;
foreach (@{$msg_hash->{macAddress}}){
- &main::daemon_log("INFO: trigger wake for $_", 5);
- my $host = shift;
- my $ipaddr = shift || '255.255.255.255';
+ &main::daemon_log("$session_id INFO: trigger wake for $_", 5);
+ my $host = $_;
+ my $ipaddr = '255.255.255.255';
my $port = getservbyname('discard', 'udp');
my ($raddr, $them, $proto);
# get the hardware address (ethernet address)
$hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6);
if ($host =~ m/^$hwaddr_re$/) {
- $hwaddr = $host;
+ $hwaddr = $host;
} else {
- # $host is not a hardware address, try to resolve it
- my $ip_re = join('\.', ('([0-9]|[1-9][0-9]|1[0-9]{2}|2([0-4][0-9]|5[0-5]))') x 4);
- my $ip_addr;
- if ($host =~ m/^$ip_re$/) {
- $ip_addr = $host;
- } else {
- my $h;
- unless ($h = gethost($host)) {
- return undef;
- }
- $ip_addr = inet_ntoa($h->addr);
- }
+ &main::daemon_log("$session_id ERROR: trigger_wake called with non mac address", 1);
}
# Generate magic sequence
# Allocate socket and send packet
- $raddr = gethostbyname($ipaddr)->addr;
+ $raddr = gethostbyname($ipaddr);
$them = pack_sockaddr_in($port, $raddr);
$proto = getprotobyname('udp');