From b4a9292cfbd9764ebdcc46469d78b7f701651cf1 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sun, 1 Mar 2015 18:38:00 +0200 Subject: [PATCH] RADIUS client: Fix server failover on return-to-primary on error case If a connection with the primary server cannot be established, restore connection to the previously used server. Signed-off-by: Jouni Malinen --- src/radius/radius_client.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/radius/radius_client.c b/src/radius/radius_client.c index e9d4a5510..693f61ea0 100644 --- a/src/radius/radius_client.c +++ b/src/radius/radius_client.c @@ -1176,18 +1176,28 @@ static void radius_retry_primary_timer(void *eloop_ctx, void *timeout_ctx) conf->auth_server != conf->auth_servers) { oserv = conf->auth_server; conf->auth_server = conf->auth_servers; - radius_change_server(radius, conf->auth_server, oserv, - radius->auth_serv_sock, - radius->auth_serv_sock6, 1); + if (radius_change_server(radius, conf->auth_server, oserv, + radius->auth_serv_sock, + radius->auth_serv_sock6, 1) < 0) { + conf->auth_server = oserv; + radius_change_server(radius, oserv, conf->auth_server, + radius->auth_serv_sock, + radius->auth_serv_sock6, 1); + } } if (radius->acct_sock >= 0 && conf->acct_servers && conf->acct_server != conf->acct_servers) { oserv = conf->acct_server; conf->acct_server = conf->acct_servers; - radius_change_server(radius, conf->acct_server, oserv, - radius->acct_serv_sock, - radius->acct_serv_sock6, 0); + if (radius_change_server(radius, conf->acct_server, oserv, + radius->acct_serv_sock, + radius->acct_serv_sock6, 0) < 0) { + conf->acct_server = oserv; + radius_change_server(radius, oserv, conf->acct_server, + radius->acct_serv_sock, + radius->acct_serv_sock6, 0); + } } if (conf->retry_primary_interval)