summaryrefslogtreecommitdiffstats
path: root/src/providers/data_provider_fo.c
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2012-03-07 17:08:52 +0100
committerJan Zeleny <jzeleny@redhat.com>2012-03-08 10:58:15 +0100
commit606d2d03833903f00d40f9810d4dccd04a752e76 (patch)
tree41fc8ff0f0fb69aeea5b2cd425d515e219c5f259 /src/providers/data_provider_fo.c
parent9729b24935f9b717234728b2d2cfb4ca49df307b (diff)
downloadsssd-606d2d03833903f00d40f9810d4dccd04a752e76.tar.gz
sssd-606d2d03833903f00d40f9810d4dccd04a752e76.tar.xz
sssd-606d2d03833903f00d40f9810d4dccd04a752e76.zip
Detect cycle in the fail over on subsequent resolve requests only
Diffstat (limited to 'src/providers/data_provider_fo.c')
-rw-r--r--src/providers/data_provider_fo.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c
index c358e68d1..51d6ae211 100644
--- a/src/providers/data_provider_fo.c
+++ b/src/providers/data_provider_fo.c
@@ -342,6 +342,7 @@ struct be_resolve_server_state {
int attempts;
struct fo_server *srv;
+ bool first_try;
};
static void be_resolve_server_done(struct tevent_req *subreq);
@@ -349,7 +350,8 @@ static void be_resolve_server_done(struct tevent_req *subreq);
struct tevent_req *be_resolve_server_send(TALLOC_CTX *memctx,
struct tevent_context *ev,
struct be_ctx *ctx,
- const char *service_name)
+ const char *service_name,
+ bool first_try)
{
struct tevent_req *req, *subreq;
struct be_resolve_server_state *state;
@@ -370,6 +372,7 @@ struct tevent_req *be_resolve_server_send(TALLOC_CTX *memctx,
state->svc = svc;
state->attempts = 0;
+ state->first_try = first_try;
subreq = fo_resolve_service_send(state, ev,
ctx->be_fo->resolv,
@@ -443,7 +446,7 @@ static void be_resolve_server_done(struct tevent_req *subreq)
}
/* all fine we got the server */
- if (state->svc->first_resolved == NULL) {
+ if (state->svc->first_resolved == NULL || state->first_try == true) {
DEBUG(SSSDBG_TRACE_LIBS, ("Saving the first resolved server\n"));
state->svc->first_resolved = state->srv;
} else if (state->svc->first_resolved == state->srv) {