]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
RADIUS client: Fix server failover on return-to-primary on error case
authorJouni Malinen <j@w1.fi>
Sun, 1 Mar 2015 16:38:00 +0000 (18:38 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 1 Mar 2015 20:36:52 +0000 (22:36 +0200)
If a connection with the primary server cannot be established, restore
connection to the previously used server.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/radius/radius_client.c

index e9d4a551039817c3875a941b90ba1ce1790f2714..693f61ea04552fc479b3ccccf0d27aa87c0dc82c 100644 (file)
@@ -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)