From 672706ee2fc676a2efe82e9d0c0c601ca68cf665 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Thu, 22 Feb 2018 08:56:41 +0100 Subject: [PATCH] common/dns_resolv.cc: Query for AAAA-record if ms_bind_ipv6 is True Otherwise we always query for A-records which will not work in a IPv6 Ceph cluster. Fixes: http://tracker.ceph.com/issues/23078 Signed-off-by: Wido den Hollander (cherry picked from commit a567cb80237219343e614d63c31d5b2c86f7a501) --- src/common/dns_resolve.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/common/dns_resolve.cc b/src/common/dns_resolve.cc index a2b296a676f6d..b6989da31c26d 100644 --- a/src/common/dns_resolve.cc +++ b/src/common/dns_resolve.cc @@ -212,16 +212,17 @@ int DNSResolver::resolve_ip_addr(CephContext *cct, res_state *res, const string& u_char nsbuf[NS_PACKETSZ]; int len; - + int family = cct->_conf->ms_bind_ipv6 ? AF_INET6 : AF_INET; + int type = cct->_conf->ms_bind_ipv6 ? ns_t_aaaa : ns_t_a; #ifdef HAVE_RES_NQUERY - len = resolv_h->res_nquery(*res, hostname.c_str(), ns_c_in, ns_t_a, nsbuf, sizeof(nsbuf)); + len = resolv_h->res_nquery(*res, hostname.c_str(), ns_c_in, type, nsbuf, sizeof(nsbuf)); #else { # ifndef HAVE_THREAD_SAFE_RES_QUERY Mutex::Locker l(lock); # endif - len = resolv_h->res_query(hostname.c_str(), ns_c_in, ns_t_a, nsbuf, sizeof(nsbuf)); + len = resolv_h->res_query(hostname.c_str(), ns_c_in, type, nsbuf, sizeof(nsbuf)); } #endif if (len < 0) { @@ -250,7 +251,7 @@ int DNSResolver::resolve_ip_addr(CephContext *cct, res_state *res, const string& char addr_buf[64]; memset(addr_buf, 0, sizeof(addr_buf)); - inet_ntop(AF_INET, ns_rr_rdata(rr), addr_buf, sizeof(addr_buf)); + inet_ntop(family, ns_rr_rdata(rr), addr_buf, sizeof(addr_buf)); if (!addr->parse(addr_buf)) { lderr(cct) << "failed to parse address '" << (const char *)ns_rr_rdata(rr) << "'" << dendl; -- 2.39.5