]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Call trigger_args_afrom_server() with a fr_pair_list to populate
authorNick Porter <nick@portercomputing.co.uk>
Fri, 22 Jan 2021 12:14:41 +0000 (12:14 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 22 Jan 2021 14:52:03 +0000 (14:52 +0000)
rather than allocating a new list in the function

src/lib/redis/cluster.c
src/lib/server/trigger.c
src/lib/server/trigger.h

index 6a6149300a95955b7a176c3200f3f931e6a77f27..2a4877934b8bbe15ef5db5ff5b505147f22c3e78 100644 (file)
@@ -325,21 +325,22 @@ static int _cluster_node_cmp(void const *a, void const *b)
  */
 static void _cluster_node_conf_apply(fr_pool_t *pool, void *opaque)
 {
-       fr_pair_list_t  *args = NULL;
+       fr_pair_list_t  args;
        fr_redis_cluster_node_t *node = opaque;
 
+       fr_pair_list_init(&args);
        node->addr = node->pending_addr;
 
        if (node->cluster->triggers_enabled) {
-               args = trigger_args_afrom_server(pool, node->name, node->addr.inet.dst_port);
-               if (fr_pair_list_empty(args)) return;
+               trigger_args_afrom_server(pool, &args, node->name, node->addr.inet.dst_port);
+               if (fr_pair_list_empty(&args)) return;
 
-               if (!fr_pair_list_empty(&node->cluster->trigger_args)) MEM(fr_pair_list_copy(node->cluster, args,
+               if (!fr_pair_list_empty(&node->cluster->trigger_args)) MEM(fr_pair_list_copy(node->cluster, &args,
                                                                      &node->cluster->trigger_args) >= 0);
 
-               fr_pool_enable_triggers(pool, node->cluster->trigger_prefix, args);
+               fr_pool_enable_triggers(pool, node->cluster->trigger_prefix, &args);
 
-               fr_pair_list_free(args);
+               fr_pair_list_free(&args);
        }
 }
 
@@ -372,9 +373,10 @@ static fr_redis_cluster_rcode_t cluster_node_connect(fr_redis_cluster_t *cluster
         */
        if (!node->pool) {
                char            buffer[256];
-               fr_pair_list_t  *args = NULL;
+               fr_pair_list_t  args;
                CONF_SECTION    *pool;
 
+               fr_pair_list_init(&args);
                snprintf(buffer, sizeof(buffer), "%s [%i]", cluster->log_prefix, node->id);
 
                pool = cf_section_find(cluster->module, "pool", NULL);
@@ -394,14 +396,14 @@ static fr_redis_cluster_rcode_t cluster_node_connect(fr_redis_cluster_t *cluster
                fr_pool_reconnect_func(node->pool, _cluster_node_conf_apply);
 
                if (trigger_enabled() && cluster->triggers_enabled) {
-                       args = trigger_args_afrom_server(node->pool, node->name, node->addr.inet.dst_port);
-                       if (fr_pair_list_empty(args)) goto error;
+                       trigger_args_afrom_server(node->pool, &args, node->name, node->addr.inet.dst_port);
+                       if (fr_pair_list_empty(&args)) goto error;
 
-                       if (!fr_pair_list_empty(&cluster->trigger_args)) MEM(fr_pair_list_copy(cluster, args, &cluster->trigger_args) >= 0);
+                       if (!fr_pair_list_empty(&cluster->trigger_args)) MEM(fr_pair_list_copy(cluster, &args, &cluster->trigger_args) >= 0);
 
-                       fr_pool_enable_triggers(node->pool, node->cluster->trigger_prefix, args);
+                       fr_pool_enable_triggers(node->pool, node->cluster->trigger_prefix, &args);
 
-                       fr_pair_list_free(args);
+                       fr_pair_list_free(&args);
                }
 
                if (fr_pool_start(node->pool) < 0) goto error;
index 2dd7d6883ec0041c1118c28bade4fa603d5fb24c..f5d6f1b6d36890adfa63695be90ba6b04ba1f8e6 100644 (file)
@@ -455,40 +455,33 @@ int trigger_exec(request_t *request, CONF_SECTION const *cs, char const *name, b
  *      else it will return NULL.
  *
  * @param[in] ctx      to allocate fr_pair_t s in.
+ * @param[out] list    to append Pool-Server and Pool-Port pairs to
  * @param[in] server   we're connecting to.
  * @param[in] port     on that server.
- * @return
- *     - NULL on failure, or if triggers are not enabled.
- *     - list containing Pool-Server and Pool-Port
  */
-fr_pair_list_t *trigger_args_afrom_server(TALLOC_CTX *ctx, char const *server, uint16_t port)
+void trigger_args_afrom_server(TALLOC_CTX *ctx, fr_pair_list_t *list, char const *server, uint16_t port)
 {
        fr_dict_attr_t const    *server_da;
        fr_dict_attr_t const    *port_da;
-       fr_pair_list_t          *out;
        fr_pair_t               *vp;
 
-       out = fr_pair_list_alloc(ctx);
-       fr_pair_list_init(out);
        server_da = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal()), FR_CONNECTION_POOL_SERVER);
        if (!server_da) {
                ERROR("Incomplete dictionary: Missing definition for \"Connection-Pool-Server\"");
-               return NULL;
+               return;
        }
 
        port_da = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal()), FR_CONNECTION_POOL_PORT);
        if (!port_da) {
                ERROR("Incomplete dictionary: Missing definition for \"Connection-Pool-Port\"");
-               return NULL;
+               return;
        }
 
        MEM(vp = fr_pair_afrom_da(ctx, server_da));
        fr_pair_value_strdup(vp, server);
-       fr_pair_add(out, vp);
+       fr_pair_add(list, vp);
 
        MEM(vp = fr_pair_afrom_da(ctx, port_da));
        vp->vp_uint16 = port;
-       fr_pair_add(out, vp);
-
-       return out;
+       fr_pair_add(list, vp);
 }
index 2b1a901ce88a2c18f7151096c69c2dd98d0b0895..618508be6b297cd42256b1334935e6f2b3720dfd 100644 (file)
@@ -50,7 +50,7 @@ void          trigger_exec_free(void);
 
 bool           trigger_enabled(void);
 
-fr_pair_list_t *trigger_args_afrom_server(TALLOC_CTX *ctx, char const *server, uint16_t port);
+void           trigger_args_afrom_server(TALLOC_CTX *ctx, fr_pair_list_t *list, char const *server, uint16_t port);
 
 typedef int (*fr_trigger_worker_t)(request_t *request, module_method_t process, void *ctx);
 extern fr_trigger_worker_t trigger_worker_request_add;