]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Revert "hoist "id" into the array"
authorAlan T. DeKok <aland@freeradius.org>
Tue, 22 Jul 2025 15:25:17 +0000 (17:25 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 22 Jul 2025 15:25:17 +0000 (17:25 +0200)
This reverts commit 9987442d0e9df1e773ce57f50213821d5d0c681e.

let's do it a better way

src/include/realms.h
src/main/process.c
src/main/realms.c
src/modules/rlm_realm/rlm_realm.c

index 32eff9b7da27d9ef5e534038542d1ac2285aa5ec..2d8106263fdf845117a490d9a216c095ab2c68e7 100644 (file)
@@ -158,6 +158,7 @@ typedef struct home_server {
 #ifdef HAVE_TRUST_ROUTER_TR_DH_H
        time_t                  expiration;
 #endif
+       uint32_t                id;
 } home_server_t;
 
 
@@ -171,10 +172,6 @@ typedef enum home_pool_type_t {
        HOME_POOL_CONSISTENT_KEYED_BALANCE
 } home_pool_type_t;
 
-typedef struct {
-       home_server_t           *home;
-       uint32_t                id;
-} home_server_id_t;
 
 typedef struct home_pool_t {
        char const              *name;
@@ -193,7 +190,7 @@ typedef struct home_pool_t {
        home_server_t           **affinity_group;
 
        int                     num_home_servers;
-       home_server_id_t        servers[1];
+       home_server_t           *servers[1];
 } home_pool_t;
 
 
index 12e681c496c7f1022c06cc25cc9eb7f340d2135f..df02f2ff3937c408e7e820b129c5c3727d2c8d80 100644 (file)
@@ -757,7 +757,7 @@ void request_done(REQUEST *request, int original)
                        request->home_pool->last_serviced = now.tv_sec;
 
                        for (i = 0; i < request->home_pool->num_home_servers; i++) {
-                               home_server_t *home = request->home_pool->servers[i].home;
+                               home_server_t *home = request->home_pool->servers[i];
 
                                if (home->state == HOME_STATE_CONNECTION_FAIL) {
                                        mark_home_server_dead(home, &now, false);
index c4eb86eee9449d047e6a411ba1d1c3dad00c8e46..f016c67197bc186ac661a7b205a5c9eee6852b91 100644 (file)
@@ -1374,7 +1374,7 @@ void realm_pool_free(home_pool_t *pool)
                 *      configuration files.
                 */
                for (i = 0; i < pool->num_home_servers; i++) {
-                       if (pool->servers[i].home->cs) {
+                       if (pool->servers[i]->cs) {
                                rad_assert(0 == 1);
                                return;
                        }
@@ -1470,13 +1470,13 @@ int realm_pool_add(home_pool_t *pool, CONF_SECTION *cs)
 
 static int server_cmp_by_id(void const *one, void const *two)
 {
-       home_server_id_t const *a = (home_server_id_t const *) one;
-       home_server_id_t const *b = (home_server_id_t const *) two;
+       home_server_t const *a = *(home_server_t const * const *) one;
+       home_server_t const *b = *(home_server_t const * const *) two;
 
        if (a->id < b->id) return -1;
        if (a->id > b->id) return +1;
 
-       if (a->home < b->home) return -1;
+       if (a < b) return -1;
        return +1;
 }
 
@@ -1698,8 +1698,7 @@ static int server_pool_add(realm_config_t *rc,
                }
 
                if (do_print) cf_log_info(cs, "\thome_server = %s", home->name);
-               pool->servers[num_home_servers++].home = home;
-
+               pool->servers[num_home_servers++] = home;
        } /* loop over home_server's */
 
        if (pool->fallback) {
@@ -1726,7 +1725,7 @@ static int server_pool_add(realm_config_t *rc,
                for (i = 0; i < pool->num_home_servers; i++) {
                        uint32_t hash;
 
-                       home = pool->servers[i].home;
+                       home = pool->servers[i];
 
                        switch (home->ipaddr.af) {
                        case AF_INET:
@@ -1755,7 +1754,7 @@ static int server_pool_add(realm_config_t *rc,
                        }
 
                        hash = fr_hash_update(&home->proto, sizeof(home->proto), hash);
-                       pool->servers[i].id = fr_hash_update(&home->port, sizeof(home->port), hash);
+                       home->id = fr_hash_update(&home->port, sizeof(home->port), hash);
                }
 
                qsort(&pool->servers[0], pool->num_home_servers, sizeof(pool->servers[0]),
@@ -1867,9 +1866,9 @@ static int old_server_add(realm_config_t *rc, CONF_SECTION *cs,
        insert_point = -1;
        if (pool) {
                for (i = pool->num_home_servers - 1; i >= 0; i--) {
-                       if (pool->servers[i].home) break;
+                       if (pool->servers[i]) break;
 
-                       if (!pool->servers[i].home) {
+                       if (!pool->servers[i]) {
                                insert_point = i;
                        }
                }
@@ -1994,7 +1993,7 @@ static int old_server_add(realm_config_t *rc, CONF_SECTION *cs,
         */
        if (insert_point >= 0) {
                rad_assert(pool != NULL);
-               pool->servers[insert_point].home = home;
+               pool->servers[insert_point] = home;
                return 1;
        }
 
@@ -2028,7 +2027,7 @@ static int old_server_add(realm_config_t *rc, CONF_SECTION *cs,
 
        pool->cs = cs;
 
-       pool->servers[0].home = home;
+       pool->servers[0] = home;
 
        if (!rbtree_insert(home_pools_byname, pool)) {
                rad_assert("Internal sanity check failed" == NULL);
@@ -2954,10 +2953,10 @@ static home_server_t *home_server_by_consistent_key(home_pool_t *pool, uint32_t
        int i;
 
        for (i = 0; i < pool->num_home_servers; i++) {
-               if (pool->servers[i].id > hash) return pool->servers[i].home;
+               if (pool->servers[i]->id > hash) return pool->servers[i];
        }
 
-       return pool->servers[0].home;
+       return pool->servers[0];
 }
 
 home_server_t *home_server_ldb(char const *realmname,
@@ -3093,7 +3092,7 @@ home_server_t *home_server_ldb(char const *realmname,
         *      Otherwise, use it.
         */
        for (count = 0; count < pool->num_home_servers; count++) {
-               home_server_t *home = pool->servers[(start + count) % pool->num_home_servers].home;
+               home_server_t *home = pool->servers[(start + count) % pool->num_home_servers];
 
                if (!home) continue;
 
@@ -3212,7 +3211,7 @@ all_dead:
        if (!realm_config->fallback &&
            realm_config->wake_all_if_all_dead) {
                for (count = 0; count < pool->num_home_servers; count++) {
-                       home_server_t *home = pool->servers[count].home;
+                       home_server_t *home = pool->servers[count];
 
                        if (!home) continue;
 
index c8ea3ae7c4f0b5c118680391a8d01529b2a0005d..3f7e3fb30d8799a429f5717738da8a440c5f53d9 100644 (file)
@@ -316,9 +316,9 @@ static int check_for_realm(void *instance, REQUEST *request, REALM **returnrealm
                 *      send it there again.
                 */
                for (i = 0; i < realm->acct_pool->num_home_servers; i++) {
-                       if (realm->acct_pool->servers[i].home->ipaddr.af == AF_UNSPEC) continue;
+                       if (realm->acct_pool->servers[i]->ipaddr.af == AF_UNSPEC) continue;
 
-                       if (fr_ipaddr_cmp(&realm->acct_pool->servers[i].home->ipaddr, &my_ipaddr) == 0) {
+                       if (fr_ipaddr_cmp(&realm->acct_pool->servers[i]->ipaddr, &my_ipaddr) == 0) {
                                RDEBUG2("Suppressing proxy due to FreeRADIUS-Proxied-To");
                                return RLM_MODULE_OK;
                        }
@@ -341,11 +341,11 @@ static int check_for_realm(void *instance, REQUEST *request, REALM **returnrealm
                 *      send it there again.
                 */
                for (i = 0; i < realm->acct_pool->num_home_servers; i++) {
-                       if (realm->acct_pool->servers[i].home->ipaddr.af == AF_UNSPEC) continue;
+                       if (realm->acct_pool->servers[i]->ipaddr.af == AF_UNSPEC) continue;
 
-                       if ((fr_ipaddr_cmp(&realm->acct_pool->servers[i].home->ipaddr,
+                       if ((fr_ipaddr_cmp(&realm->acct_pool->servers[i]->ipaddr,
                                             &request->packet->src_ipaddr) == 0) &&
-                           (realm->acct_pool->servers[i].home->port == request->packet->src_port)) {
+                           (realm->acct_pool->servers[i]->port == request->packet->src_port)) {
                                RDEBUG2("Suppressing proxy because packet was already sent to a server in that realm");
                                return RLM_MODULE_OK;
                        }