X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fmodules%2FArpHandler.pm;h=3bc46cfd05861f2cd89c61a5bc51aba0bb9cf017;hb=1bf6d6303fb62f5b51b9ebff12524f7631a02bc7;hp=9a4b6657a07ea15af431a7288dedd4f1d7fc493a;hpb=37f357737fc9d056974c59bd6e346a85f938f68b;p=gosa.git diff --git a/gosa-si/modules/ArpHandler.pm b/gosa-si/modules/ArpHandler.pm index 9a4b6657a..3bc46cfd0 100644 --- a/gosa-si/modules/ArpHandler.pm +++ b/gosa-si/modules/ArpHandler.pm @@ -14,7 +14,7 @@ use Net::LDAP::Entry; use Net::DNS; use Switch; use Data::Dumper; -use utf8; +use Socket; # Don't start if some of the modules are missing my $start_service=1; @@ -36,7 +36,6 @@ END{} my ($timeout, $mailto, $mailfrom, $user, $group); my ($arp_enabled, $arp_interface, $ldap_uri, $ldap_base, $ldap_admin_dn, $ldap_admin_password); my $hosts_database={}; -my $resolver=Net::DNS::Resolver->new; my $ldap; my %cfg_defaults = @@ -95,15 +94,13 @@ sub get_module_info { &main::daemon_log("Loading OUI cache file suceeded!", 6); } } + my $ldap_handle = &main::get_ldap_handle(); if(defined($ldap_uri) && length($ldap_uri)>0) { - $ldap = Net::LDAP->new($ldap_uri); - if (!$ldap) { + if (!$ldap_handle) { &main::daemon_log("Could not connect to LDAP Server at $ldap_uri!\n$@", 1); - } else { - $ldap->bind($ldap_admin_dn, password => $ldap_admin_password); } } else { - $ldap=undef; + $ldap_handle= undef; } # When interface is not configured (or 'all'), start arpwatch on all possible interfaces @@ -124,8 +121,6 @@ sub get_module_info { &start(@_,$device); }, _stop => sub { - $ldap->unbind if (defined($ldap)); - $ldap->disconnect if (defined($ldap)); $_[KERNEL]->post( sprintf("arp_watch_$device") => 'shutdown' ) }, got_packet => \&got_packet, @@ -142,8 +137,6 @@ sub get_module_info { &start(@_,$device); }, _stop => sub { - $ldap->unbind if (defined($ldap)); - $ldap->disconnect if (defined($ldap)); $_[KERNEL]->post( sprintf("arp_watch_$device") => 'shutdown' ) }, got_packet => \&got_packet, @@ -184,9 +177,9 @@ sub got_packet { my $capture_device = sprintf "%s", $kernel->alias_list($sender) =~ /^arp_watch_(.*)$/; - if(!exists($hosts_database->{$packet->{source_haddr}})) { - my $dnsresult= $resolver->search($packet->{source_ipaddr}); - my $dnsname= (defined($dnsresult))?$dnsresult->{answer}[0]->{ptrdname}:$packet->{source_ipaddr}; + my $ldap_handle = &main::get_ldap_handle(); + if(!exists($hosts_database->{$packet->{source_haddr}})) { + my $dnsname= gethostbyaddr(inet_aton($packet->{source_ipaddr}), AF_INET) || $packet->{source_ipaddr}; my $ldap_result=&get_host_from_ldap($packet->{source_haddr}); if(exists($ldap_result->{dn})) { $hosts_database->{$packet->{source_haddr}}=$ldap_result; @@ -217,7 +210,7 @@ sub got_packet { ": ".$hosts_database->{$packet->{source_haddr}}->{ipHostNumber}. "/".$hosts_database->{$packet->{source_haddr}}->{macAddress},4); &add_ldap_entry( - $ldap, + $ldap_handle, $ldap_base, $hosts_database->{$packet->{source_haddr}}->{macAddress}, 'new-system', @@ -234,7 +227,7 @@ sub got_packet { "->".$packet->{source_ipaddr}, 4); $hosts_database->{$packet->{source_haddr}}->{ipHostNumber}= $packet->{source_ipaddr}; &change_ldap_entry( - $ldap, + $ldap_handle, $ldap_base, $hosts_database->{$packet->{source_haddr}}->{macAddress}, 'ip-changed', @@ -250,9 +243,10 @@ sub get_host_from_ldap { my $mac=shift; my $result={}; - if(defined($ldap)) { + my $ldap_handle = &get_ldap_handle(); + if(defined($ldap_handle)) { my $ldap_result= &search_ldap_entry( - $ldap, + $ldap_handle, $ldap_base, "(|(macAddress=$mac)(dhcpHWAddress=ethernet $mac))" ); @@ -448,7 +442,7 @@ sub change_ldap_entry { if (defined($ip)) { $replace->{'ipHostNumber'} = $ip; } - my $result = $ldap->modify( $dn, replace => $replace ); + my $result = $ldap_tree->modify( $dn, replace => $replace ); # for $result->code constants please look at Net::LDAP::Constant if($result->code == 32) { # entry doesnt exists