diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2014-12-12 17:10:40 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-03-03 16:15:37 +0100 |
commit | 8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6d (patch) | |
tree | 643138d18dd31a9ea0e5691daf19baea0dc0e396 /src/providers/fail_over_srv.c | |
parent | eafbc66c2ff6365478e62a8df3fd005bf80e5c7b (diff) | |
download | sssd-8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6d.tar.gz sssd-8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6d.tar.xz sssd-8df69bbc58c2f4d3f0b34be9756d9ddf24b1db6d.zip |
FO: Use SRV TTL in fail over code
Resolves:
https://fedorahosted.org/sssd/ticket/1884
Removes the hardcoded SRV TTL timeout and uses TTL from the DNS instead.
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/providers/fail_over_srv.c')
-rw-r--r-- | src/providers/fail_over_srv.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/providers/fail_over_srv.c b/src/providers/fail_over_srv.c index 5c06d2876..5f474eaee 100644 --- a/src/providers/fail_over_srv.c +++ b/src/providers/fail_over_srv.c @@ -30,6 +30,7 @@ struct fo_discover_srv_state { char *dns_domain; struct fo_server_info *servers; size_t num_servers; + uint32_t ttl; }; static void fo_discover_srv_done(struct tevent_req *subreq); @@ -83,7 +84,7 @@ static void fo_discover_srv_done(struct tevent_req *subreq) state = tevent_req_data(req, struct fo_discover_srv_state); ret = resolv_discover_srv_recv(state, subreq, - &reply_list, NULL, &state->dns_domain); + &reply_list, &state->ttl, &state->dns_domain); talloc_zfree(subreq); if (ret == ENOENT) { ret = ERR_SRV_NOT_FOUND; @@ -143,6 +144,7 @@ done: errno_t fo_discover_srv_recv(TALLOC_CTX *mem_ctx, struct tevent_req *req, char **_dns_domain, + uint32_t *_ttl, struct fo_server_info **_servers, size_t *_num_servers) { @@ -159,6 +161,10 @@ errno_t fo_discover_srv_recv(TALLOC_CTX *mem_ctx, *_servers = talloc_steal(mem_ctx, state->servers); } + if (_ttl != NULL) { + *_ttl = state->ttl; + } + if (_num_servers != NULL) { *_num_servers = state->num_servers; } @@ -175,6 +181,7 @@ struct fo_discover_servers_state { const char *backup_domain; char *dns_domain; + uint32_t ttl; struct fo_server_info *primary_servers; size_t num_primary_servers; struct fo_server_info *backup_servers; @@ -212,6 +219,7 @@ struct tevent_req *fo_discover_servers_send(TALLOC_CTX *mem_ctx, state->backup_servers = NULL; state->num_backup_servers = 0; state->dns_domain = NULL; + state->ttl = 0; ret = EOK; goto immediately; @@ -289,6 +297,7 @@ static void fo_discover_servers_primary_done(struct tevent_req *subreq) ret = fo_discover_srv_recv(state, subreq, &state->dns_domain, + &state->ttl, &state->primary_servers, &state->num_primary_servers); talloc_zfree(subreq); @@ -361,7 +370,7 @@ static void fo_discover_servers_backup_done(struct tevent_req *subreq) state = tevent_req_data(req, struct fo_discover_servers_state); ret = fo_discover_srv_recv(state, subreq, NULL, - &state->backup_servers, + NULL, &state->backup_servers, &state->num_backup_servers); talloc_zfree(subreq); if (ret != EOK) { @@ -385,6 +394,7 @@ static void fo_discover_servers_backup_done(struct tevent_req *subreq) errno_t fo_discover_servers_recv(TALLOC_CTX *mem_ctx, struct tevent_req *req, char **_dns_domain, + uint32_t *_ttl, struct fo_server_info **_primary_servers, size_t *_num_primary_servers, struct fo_server_info **_backup_servers, @@ -415,6 +425,10 @@ errno_t fo_discover_servers_recv(TALLOC_CTX *mem_ctx, *_dns_domain = talloc_steal(mem_ctx, state->dns_domain); } + if (_ttl) { + *_ttl = state->ttl; + } + return EOK; } @@ -436,6 +450,7 @@ struct fo_resolve_srv_dns_state { const char *discovery_domain; char *dns_domain; + uint32_t ttl; struct fo_server_info *servers; size_t num_servers; }; @@ -644,7 +659,8 @@ static void fo_resolve_srv_dns_done(struct tevent_req *subreq) req = tevent_req_callback_data(subreq, struct tevent_req); state = tevent_req_data(req, struct fo_resolve_srv_dns_state); - ret = fo_discover_srv_recv(state, subreq, &state->dns_domain, + ret = fo_discover_srv_recv(state, subreq, + &state->dns_domain, &state->ttl, &state->servers, &state->num_servers); talloc_zfree(subreq); if (ret != EOK) { @@ -663,6 +679,7 @@ done: errno_t fo_resolve_srv_dns_recv(TALLOC_CTX *mem_ctx, struct tevent_req *req, char **_dns_domain, + uint32_t *_ttl, struct fo_server_info **_primary_servers, size_t *_num_primary_servers, struct fo_server_info **_backup_servers, @@ -694,5 +711,9 @@ errno_t fo_resolve_srv_dns_recv(TALLOC_CTX *mem_ctx, *_dns_domain = talloc_steal(mem_ctx, state->dns_domain); } + if (_ttl) { + *_ttl = state->ttl; + } + return EOK; } |