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:10:40 +0100 |
commit | 3149069126599133a8fe0c66734df6deb3907dfb (patch) | |
tree | cc76246f3e6a75cd0b4a16c2225020e680a6e0b4 /src/resolv/async_resolv_utils.c | |
parent | 07d69e93a2d2ba68c2fe67d8fb5de18cf69ba797 (diff) | |
download | sssd-3149069126599133a8fe0c66734df6deb3907dfb.tar.gz sssd-3149069126599133a8fe0c66734df6deb3907dfb.tar.xz sssd-3149069126599133a8fe0c66734df6deb3907dfb.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>
(cherry picked from commit bf54fbed126ec3d459af40ea370ffadacd31c76d)
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; } |