diff options
author | Martin Nagy <mnagy@redhat.com> | 2009-12-10 22:23:04 +0100 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2009-12-15 08:33:55 -0500 |
commit | 796a6c947951a5a4459545b99bf97e0523f71402 (patch) | |
tree | 35725ab411fd405a0f4b781e183bd7ac6d35ba73 /server/providers/ldap | |
parent | c48d88aa2fc016670c30ad0a426e7e86ff9090d7 (diff) | |
download | sssd-796a6c947951a5a4459545b99bf97e0523f71402.tar.gz sssd-796a6c947951a5a4459545b99bf97e0523f71402.tar.bz2 sssd-796a6c947951a5a4459545b99bf97e0523f71402.zip |
Don't consider one address with different port numbers as the same
There were two problems with the code. We were using
fo_set_server_status() instead of fo_set_port_status() when we failed to
connect to a service. This is a problem because if two services use the
same server, or we want to use one server with two different ports,
marking the whole server as bad is incorrect. The other problem was that
be_resolve_server_done() was comparing the hostent structures -- these
are, however, equal across multiple server:port pairs with the same
server addresses.
Fixes: #321
Diffstat (limited to 'server/providers/ldap')
-rw-r--r-- | server/providers/ldap/ldap_auth.c | 6 | ||||
-rw-r--r-- | server/providers/ldap/sdap_async_connection.c | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/server/providers/ldap/ldap_auth.c b/server/providers/ldap/ldap_auth.c index 81c96666..88e637b0 100644 --- a/server/providers/ldap/ldap_auth.c +++ b/server/providers/ldap/ldap_auth.c @@ -513,12 +513,14 @@ static void auth_connect_done(struct tevent_req *subreq) talloc_zfree(subreq); if (ret) { if (state->srv) { - /* mark the server as bad if connection failed */ - fo_set_server_status(state->srv, SERVER_NOT_WORKING); + /* mark this server as bad if connection failed */ + fo_set_port_status(state->srv, PORT_NOT_WORKING); } tevent_req_error(req, ret); return; + } else if (state->srv) { + fo_set_port_status(state->srv, PORT_WORKING); } subreq = get_user_dn_send(state, state->ev, diff --git a/server/providers/ldap/sdap_async_connection.c b/server/providers/ldap/sdap_async_connection.c index b742471c..13497903 100644 --- a/server/providers/ldap/sdap_async_connection.c +++ b/server/providers/ldap/sdap_async_connection.c @@ -1051,13 +1051,15 @@ int sdap_cli_connect_recv(struct tevent_req *req, if (tevent_req_is_error(req, &tstate, &err)) { /* mark the server as bad if connection failed */ if (state->srv) { - fo_set_server_status(state->srv, SERVER_NOT_WORKING); + fo_set_port_status(state->srv, PORT_NOT_WORKING); } if (tstate == TEVENT_REQ_USER_ERROR) { return err; } return EIO; + } else if (state->srv) { + fo_set_port_status(state->srv, PORT_WORKING); } if (gsh) { |