From: Alan T. DeKok Date: Sat, 26 Aug 2023 19:08:45 +0000 (-0400) Subject: remove instance from paircmp() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9eb78630f1ef7ec65d3af3ca9d6b3829f5f8a923;p=thirdparty%2Ffreeradius-server.git remove instance from paircmp() --- diff --git a/src/lib/server/paircmp.c b/src/lib/server/paircmp.c index 252e0c794ee..877e28b1d8f 100644 --- a/src/lib/server/paircmp.c +++ b/src/lib/server/paircmp.c @@ -40,12 +40,13 @@ RCSID("$Id$") #include +typedef int (*fr_paircmp_func_t)(request_t *, fr_pair_t const *); + typedef struct paircmp_s paircmp_t; struct paircmp_s { fr_dict_attr_t const *da; fr_dict_attr_t const *from; bool first_only; - void *instance; /* module instance */ fr_paircmp_func_t compare; paircmp_t *next; }; @@ -102,9 +103,7 @@ static paircmp_t *cmp; /* * Compare the request packet type. */ -static int packet_cmp(UNUSED void *instance, - request_t *request, - fr_pair_t const *check_item) +static int packet_cmp(request_t *request, fr_pair_t const *check_item) { PAIR_VERIFY(check_item); @@ -116,9 +115,7 @@ static int packet_cmp(UNUSED void *instance, /* * Generic comparisons, via xlat. */ -static int generic_cmp(UNUSED void *instance, - request_t *request, - fr_pair_t const *check_item) +static int generic_cmp(request_t *request, fr_pair_t const *check_item) { PAIR_VERIFY(check_item); @@ -436,7 +433,7 @@ static int paircmp_func(request_t *request, */ for (c = cmp; c; c = c->next) { if (c->da == check_item->da) { - return (c->compare)(c->instance, request, check_item); + return (c->compare)(request, check_item); } } @@ -477,7 +474,7 @@ int paircmp_virtual(request_t *request, fr_dict_attr_t const *da, fr_token_t op, vp->op = op; fr_value_box_copy(vp, &vp->data, value); - rcode = (c->compare)(c->instance, request, vp); + rcode = (c->compare)(request, vp); talloc_free(vp); return rcode; } @@ -663,6 +660,32 @@ int paircmp_find(fr_dict_attr_t const *da) return false; } +/** Unregister comparison function for an attribute + * + * @param[in] da dict reference to unregister for. + * @param[in] func comparison function to remove. + */ +static void paircmp_unregister(fr_dict_attr_t const *da, fr_paircmp_func_t func) +{ + paircmp_t *c, *last; + + last = NULL; + for (c = cmp; c; c = c->next) { + if ((c->da == da) && (c->compare == func)) break; + last = c; + } + + if (c == NULL) return; + + if (last != NULL) { + last->next = c->next; + } else { + cmp = c->next; + } + + talloc_free(c); +} + /** Register a function as compare function. * * @param[in] da to register comparison function for. @@ -674,11 +697,10 @@ int paircmp_find(fr_dict_attr_t const *da) * @param[in] first_only will decide if we loop over the request * attributes or stop on the first one. * @param[in] func comparison function. - * @param[in] instance argument to comparison function. * @return 0 */ -int paircmp_register(fr_dict_attr_t const *da, fr_dict_attr_t const *from, - bool first_only, fr_paircmp_func_t func, void *instance) +static int paircmp_register(fr_dict_attr_t const *da, fr_dict_attr_t const *from, + bool first_only, fr_paircmp_func_t func) { paircmp_t *c; @@ -691,39 +713,12 @@ int paircmp_register(fr_dict_attr_t const *da, fr_dict_attr_t const *from, c->da = da; c->from = from; c->first_only = first_only; - c->instance = instance; c->next = cmp; cmp = c; return 0; } -/** Unregister comparison function for an attribute - * - * @param[in] da dict reference to unregister for. - * @param[in] func comparison function to remove. - */ -void paircmp_unregister(fr_dict_attr_t const *da, fr_paircmp_func_t func) -{ - paircmp_t *c, *last; - - last = NULL; - for (c = cmp; c; c = c->next) { - if ((c->da == da) && (c->compare == func)) break; - last = c; - } - - if (c == NULL) return; - - if (last != NULL) { - last->next = c->next; - } else { - cmp = c->next; - } - - talloc_free(c); -} - /** Add built in pair comparisons * */ @@ -739,16 +734,16 @@ int paircmp_init(void) return -1; } - paircmp_register(attr_packet_type, NULL, true, packet_cmp, NULL); + paircmp_register(attr_packet_type, NULL, true, packet_cmp); - paircmp_register(attr_packet_src_ip_address, NULL, true, generic_cmp, NULL); - paircmp_register(attr_packet_dst_ip_address, NULL, true, generic_cmp, NULL); - paircmp_register(attr_packet_src_port, NULL, true, generic_cmp, NULL); - paircmp_register(attr_packet_dst_port, NULL, true, generic_cmp, NULL); - paircmp_register(attr_request_processing_stage, NULL, true, generic_cmp, NULL); - paircmp_register(attr_packet_src_ipv6_address, NULL, true, generic_cmp, NULL); - paircmp_register(attr_packet_dst_ipv6_address, NULL, true, generic_cmp, NULL); - paircmp_register(attr_virtual_server, NULL, true, generic_cmp, NULL); + paircmp_register(attr_packet_src_ip_address, NULL, true, generic_cmp); + paircmp_register(attr_packet_dst_ip_address, NULL, true, generic_cmp); + paircmp_register(attr_packet_src_port, NULL, true, generic_cmp); + paircmp_register(attr_packet_dst_port, NULL, true, generic_cmp); + paircmp_register(attr_request_processing_stage, NULL, true, generic_cmp); + paircmp_register(attr_packet_src_ipv6_address, NULL, true, generic_cmp); + paircmp_register(attr_packet_dst_ipv6_address, NULL, true, generic_cmp); + paircmp_register(attr_virtual_server, NULL, true, generic_cmp); return 0; } diff --git a/src/lib/server/paircmp.h b/src/lib/server/paircmp.h index a5ae428c77b..364f0183466 100644 --- a/src/lib/server/paircmp.h +++ b/src/lib/server/paircmp.h @@ -35,8 +35,6 @@ extern "C" { #include /* for paircmp_register */ -typedef int (*fr_paircmp_func_t)(void *instance, request_t *, fr_pair_t const *); - int paircmp_pairs(request_t *request, fr_pair_t const *check, fr_pair_t *vp); int paircmp(request_t *request, fr_pair_list_t *request_list, fr_pair_list_t *check_list); @@ -45,11 +43,6 @@ int paircmp_virtual(request_t *request, fr_dict_attr_t const *da, fr_token_t op int paircmp_find(fr_dict_attr_t const *da); -int paircmp_register(fr_dict_attr_t const *attribute, fr_dict_attr_t const *from, - bool first_only, fr_paircmp_func_t func, void *instance); - -void paircmp_unregister(fr_dict_attr_t const *attr, fr_paircmp_func_t func); - int paircmp_init(void); void paircmp_free(void);