#include <arpa/inet.h>
+#include "include/scope_guard.h"
#include "dns_resolve.h"
#include "common/debug.h"
if (r < 0) {
return r;
}
+ auto put_state = make_scope_guard([res, this] {
+ this->put_state(res);
+ });
#endif
- int ret;
-
#define LARGE_ENOUGH_DNS_BUFSIZE 1024
unsigned char buf[LARGE_ENOUGH_DNS_BUFSIZE];
#endif
if (len < 0) {
lderr(cct) << "res_query() failed" << dendl;
- ret = 0;
- goto done;
+ return 0;
}
answer = buf;
/* read query */
if ((len = dn_expand(answer, answend, pt, host, sizeof(host))) < 0) {
lderr(cct) << "ERROR: dn_expand() failed" << dendl;
- ret = -EINVAL;
- goto done;
+ return -EINVAL;
}
pt += len;
if (pt + 4 > answend) {
lderr(cct) << "ERROR: bad reply" << dendl;
- ret = -EIO;
- goto done;
+ return -EIO;
}
int type;
if (type != ns_t_cname) {
lderr(cct) << "ERROR: failed response type: type=" << type <<
" (was expecting " << ns_t_cname << ")" << dendl;
- ret = -EIO;
- goto done;
+ return -EIO;
}
pt += NS_INT16SZ; /* class */
/* read answer */
if ((len = dn_expand(answer, answend, pt, host, sizeof(host))) < 0) {
- ret = 0;
- goto done;
+ return 0;
}
pt += len;
ldout(cct, 20) << "name=" << host << dendl;
if (pt + 10 > answend) {
lderr(cct) << "ERROR: bad reply" << dendl;
- ret = -EIO;
- goto done;
+ return -EIO;
}
NS_GET16(type, pt);
pt += NS_INT16SZ; /* size */
if ((len = dn_expand(answer, answend, pt, host, sizeof(host))) < 0) {
- ret = 0;
- goto done;
+ return 0;
}
ldout(cct, 20) << "cname host=" << host << dendl;
*cname = host;
*found = true;
- ret = 0;
-done:
-#ifdef HAVE_RES_NQUERY
- put_state(res);
-#endif
- return ret;
+ return 0;
}
if (r < 0) {
return r;
}
+ auto put_state = make_scope_guard([res, this] {
+ this->put_state(res);
+ });
#endif
- int ret;
u_char nsbuf[NS_PACKETSZ];
int num_hosts;
#endif
if (len < 0) {
lderr(cct) << "res_search() failed" << dendl;
- ret = len;
- goto done;
+ return len;
}
else if (len == 0) {
ldout(cct, 20) << "No hosts found for service " << query_str << dendl;
- ret = 0;
- goto done;
+ return 0;
}
ns_msg handle;
num_hosts = ns_msg_count (handle, ns_s_an);
if (num_hosts == 0) {
ldout(cct, 20) << "No hosts found for service " << query_str << dendl;
- ret = 0;
- goto done;
+ return 0;
}
ns_rr rr;
int r;
if ((r = ns_parserr(&handle, ns_s_an, i, &rr)) < 0) {
lderr(cct) << "Error while parsing DNS record" << dendl;
- ret = r;
- goto done;
+ return r;
}
string full_srv_name = ns_rr_name(rr);
target = target.substr(0, target.find(srv_domain));
(*srv_hosts)[target] = addr;
}
-
}
- ret = 0;
-done:
-#ifdef HAVE_RES_NQUERY
- put_state(res);
-#endif
- return ret;
+ return 0;
}
}