diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2014-12-12 17:10:25 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-02-11 11:03:34 +0100 |
commit | bf54fbed126ec3d459af40ea370ffadacd31c76d (patch) | |
tree | fb600d300e7939e94b0eedc100a95c330de7d782 /src/resolv/async_resolv_utils.c | |
parent | 4d7fe714fe74ad242497b2bdbeb7b4e0bf40141f (diff) | |
download | sssd-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.c | 9 |
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; } |