diff options
Diffstat (limited to 'src/providers/data_provider_fo.c')
-rw-r--r-- | src/providers/data_provider_fo.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c index ada41a3ac..f4627f32e 100644 --- a/src/providers/data_provider_fo.c +++ b/src/providers/data_provider_fo.c @@ -547,32 +547,31 @@ void reset_fo(struct be_ctx *be_ctx) } void be_fo_set_port_status(struct be_ctx *ctx, + const char *service_name, struct fo_server *server, enum port_status status) { - struct be_svc_data *svc; - struct fo_service *fsvc; - - fo_set_port_status(server, status); + struct be_svc_data *be_svc; - fsvc = fo_get_server_service(server); - if (!fsvc) { - DEBUG(SSSDBG_OP_FAILURE, ("BUG: No service associated with server\n")); + be_svc = be_fo_find_svc_data(ctx, service_name); + if (be_svc == NULL) { + DEBUG(SSSDBG_OP_FAILURE, + ("No service associated with name %s\n", service_name)); return; } - DLIST_FOR_EACH(svc, ctx->be_fo->svcs) { - if (svc->fo_service == fsvc) break; - } - - if (!svc) { - DEBUG(SSSDBG_OP_FAILURE, ("BUG: Unknown service\n")); + if (!fo_svc_has_server(be_svc->fo_service, server)) { + DEBUG(SSSDBG_OP_FAILURE, + ("The server %p is not valid anymore, cannot set its status\n")); return; } + /* Now we know that the server is valid */ + fo_set_port_status(server, status); + if (status == PORT_WORKING) { /* We were successful in connecting to the server. Cycle through all * available servers next time */ - svc->first_resolved = NULL; + be_svc->first_resolved = NULL; } } |