summaryrefslogtreecommitdiffstats
path: root/src/resolv/async_resolv_utils.c
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2014-12-12 17:10:25 +0100
committerJakub Hrozek <jhrozek@redhat.com>2015-02-11 11:03:34 +0100
commitbf54fbed126ec3d459af40ea370ffadacd31c76d (patch)
treefb600d300e7939e94b0eedc100a95c330de7d782 /src/resolv/async_resolv_utils.c
parent4d7fe714fe74ad242497b2bdbeb7b4e0bf40141f (diff)
downloadsssd-bf54fbed126ec3d459af40ea370ffadacd31c76d.tar.gz
sssd-bf54fbed126ec3d459af40ea370ffadacd31c76d.tar.xz
sssd-bf54fbed126ec3d459af40ea370ffadacd31c76d.zip
RESOLV: Add an internal function to read TTL from a DNS packet
Related: https://fedorahosted.org/sssd/ticket/1884 Adds an internal resolver function that reads the TTL for SRV records as specified by RFC-2181. Several internal c-ares definitions are used until c-ares contains a function that exposes all this information via a parsing function. Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/resolv/async_resolv_utils.c')
-rw-r--r--src/resolv/async_resolv_utils.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/resolv/async_resolv_utils.c b/src/resolv/async_resolv_utils.c
index c5ae5f9d4..250681717 100644
--- a/src/resolv/async_resolv_utils.c
+++ b/src/resolv/async_resolv_utils.c
@@ -162,6 +162,7 @@ struct resolv_discover_srv_state {
int domain_index;
struct ares_srv_reply *reply_list;
+ uint32_t ttl;
};
static errno_t resolv_discover_srv_next_domain(struct tevent_req *req);
@@ -272,7 +273,8 @@ static void resolv_discover_srv_done(struct tevent_req *subreq)
req = tevent_req_callback_data(subreq, struct tevent_req);
state = tevent_req_data(req, struct resolv_discover_srv_state);
- ret = resolv_getsrv_recv(state, subreq, &status, NULL, &state->reply_list);
+ ret = resolv_getsrv_recv(state, subreq, &status, NULL,
+ &state->reply_list, &state->ttl);
talloc_zfree(subreq);
if (ret != EOK) {
DEBUG(SSSDBG_OP_FAILURE, "SRV query failed [%d]: %s\n",
@@ -307,6 +309,7 @@ done:
errno_t resolv_discover_srv_recv(TALLOC_CTX *mem_ctx,
struct tevent_req *req,
struct ares_srv_reply **_reply_list,
+ uint32_t *_ttl,
char **_dns_domain)
{
struct resolv_discover_srv_state *state = NULL;
@@ -331,5 +334,9 @@ errno_t resolv_discover_srv_recv(TALLOC_CTX *mem_ctx,
*_reply_list = talloc_steal(mem_ctx, state->reply_list);
}
+ if (*_ttl) {
+ *_ttl = state->ttl;
+ }
+
return EOK;
}