From d25e7c659361ebd794ef011dc9305543f266e8c4 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Wed, 12 Sep 2012 19:23:48 +0200 Subject: FO: Check server validity before setting status The list of resolved servers is allocated on the back end context and kept in the fo_service structure. However, a single request often resolves a server and keeps a pointer until the end of a request and only then gives feedback about the server based on the request result. This presents a big race condition in case the SRV resolution is used. When there are requests coming in in parallel, it is possible that an incoming request will invalidate a server until another request that holds a pointer to the original server is able to give a feedback. This patch simply checks if a server is in the list of servers maintained by a service before reading its status. https://fedorahosted.org/sssd/ticket/1364 --- src/providers/fail_over.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/providers/fail_over.h') diff --git a/src/providers/fail_over.h b/src/providers/fail_over.h index 36437ed5..0eb21258 100644 --- a/src/providers/fail_over.h +++ b/src/providers/fail_over.h @@ -194,6 +194,6 @@ int fo_is_srv_lookup(struct fo_server *s); void fo_reset_services(struct fo_ctx *fo_ctx); -struct fo_service *fo_get_server_service(struct fo_server *server); +bool fo_svc_has_server(struct fo_service *service, struct fo_server *server); #endif /* !__FAIL_OVER_H__ */ -- cgit