diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2012-09-12 19:23:48 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2012-10-03 13:55:29 +0200 |
commit | d1e945fdd994b40adc1ae5325bd89cbac355e68f (patch) | |
tree | 941312a01c0bb6db02ca0818f71f1a2c7f98f49f /src/providers/dp_backend.h | |
parent | 7f95c302ccb11a24732723f2bc4c4d4ee1b0a4f9 (diff) | |
download | sssd-d1e945fdd994b40adc1ae5325bd89cbac355e68f.tar.gz sssd-d1e945fdd994b40adc1ae5325bd89cbac355e68f.tar.xz sssd-d1e945fdd994b40adc1ae5325bd89cbac355e68f.zip |
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
Diffstat (limited to 'src/providers/dp_backend.h')
-rw-r--r-- | src/providers/dp_backend.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/providers/dp_backend.h b/src/providers/dp_backend.h index 6e98e7ef3..a1f64a28c 100644 --- a/src/providers/dp_backend.h +++ b/src/providers/dp_backend.h @@ -212,6 +212,7 @@ struct tevent_req *be_resolve_server_send(TALLOC_CTX *memctx, int be_resolve_server_recv(struct tevent_req *req, struct fo_server **srv); void be_fo_set_port_status(struct be_ctx *ctx, + const char *service_name, struct fo_server *server, enum port_status status); |