From bf54fbed126ec3d459af40ea370ffadacd31c76d Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Fri, 12 Dec 2014 17:10:25 +0100 Subject: RESOLV: Add an internal function to read TTL from a DNS packet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/resolv/async_resolv_utils.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/resolv/async_resolv_utils.c') 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; } -- cgit