|
|
2536d6 |
From 957a39309fa2f8a85a6b8a0a2c5b1751a151cb8b Mon Sep 17 00:00:00 2001
|
|
|
2536d6 |
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
|
|
|
2536d6 |
Date: Tue, 16 Feb 2021 15:29:58 +0100
|
|
|
2536d6 |
Subject: [PATCH] Do not default IO::Socket::IP to AI_ADDRCONFIG flag
|
|
|
2536d6 |
MIME-Version: 1.0
|
|
|
2536d6 |
Content-Type: text/plain; charset=UTF-8
|
|
|
2536d6 |
Content-Transfer-Encoding: 8bit
|
|
|
2536d6 |
|
|
|
2536d6 |
t/40connect.t fails if the only available network interface is
|
|
|
2536d6 |
loopback and IO::Socket::IP is installed:
|
|
|
2536d6 |
|
|
|
2536d6 |
# perl -Ilib -I. t/40connect.t
|
|
|
2536d6 |
1..3
|
|
|
2536d6 |
ok 1 - client with IPv4/IPv6 auto-selection, bound to ::1
|
|
|
2536d6 |
ldap://localhost:9009/ Name or service not known at t/common.pl line 157.
|
|
|
2536d6 |
# Looks like your test exited with 22 just after 1.
|
|
|
2536d6 |
|
|
|
2536d6 |
The reason is that IO::Socket::IP by default resolves host names with
|
|
|
2536d6 |
AI_ADDRCONFIG flag and in the particular case (no interfaces other
|
|
|
2536d6 |
than loopback) a system resolver (glibc in my case) hides both IPv4
|
|
|
2536d6 |
and IPv6 addreses of the hostname (e.g. localhost).
|
|
|
2536d6 |
|
|
|
2536d6 |
See <https://rt.cpan.org/Ticket/Display.html?id=104793> for more
|
|
|
2536d6 |
details.
|
|
|
2536d6 |
|
|
|
2536d6 |
I applied a workaround similar to one found in IO-Socket-SSL.
|
|
|
2536d6 |
I believe that other Socket implementations perl-ldap can use do not
|
|
|
2536d6 |
suffer from this problem.
|
|
|
2536d6 |
|
|
|
2536d6 |
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
|
|
2536d6 |
---
|
|
|
2536d6 |
lib/Net/LDAP.pm | 3 +++
|
|
|
2536d6 |
1 file changed, 3 insertions(+)
|
|
|
2536d6 |
|
|
|
2536d6 |
diff --git a/lib/Net/LDAP.pm b/lib/Net/LDAP.pm
|
|
|
2536d6 |
index 5dfe3e3..be11d12 100644
|
|
|
2536d6 |
--- a/lib/Net/LDAP.pm
|
|
|
2536d6 |
+++ b/lib/Net/LDAP.pm
|
|
|
2536d6 |
@@ -167,6 +167,9 @@ sub connect_ldap {
|
|
|
2536d6 |
LocalAddr => $arg->{localaddr} || undef,
|
|
|
2536d6 |
Proto => 'tcp',
|
|
|
2536d6 |
($class eq 'IO::Socket::IP' ? 'Family' : 'Domain') => $domain,
|
|
|
2536d6 |
+ # Work around IO::Socket::IP defaulting to AI_ADDRCONFIG which breaks
|
|
|
2536d6 |
+ # resolution if only a loopback interface is available. CPAN RT#104793.
|
|
|
2536d6 |
+ ($class eq 'IO::Socket::IP' and $domain ne AF_UNSPEC ? ('GetAddrInfoFlags' => 0) : ()),
|
|
|
2536d6 |
MultiHomed => $arg->{multihomed},
|
|
|
2536d6 |
Timeout => defined $arg->{timeout}
|
|
|
2536d6 |
? $arg->{timeout}
|
|
|
2536d6 |
--
|
|
|
2536d6 |
2.26.2
|
|
|
2536d6 |
|