From: Arran Cudbard-Bell Date: Mon, 13 May 2024 15:58:13 +0000 (-0600) Subject: Add the same shim for all modules X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3aa3f300024b9d937bf775adcdf4e8c199e2d0c3;p=thirdparty%2Ffreeradius-server.git Add the same shim for all modules --- diff --git a/src/listen/bfd/proto_bfd.c b/src/listen/bfd/proto_bfd.c index 0a38eead00a..e47bfe98c9f 100644 --- a/src/listen/bfd/proto_bfd.c +++ b/src/listen/bfd/proto_bfd.c @@ -30,6 +30,7 @@ extern fr_app_t proto_bfd; +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) static int auth_type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule); /** How to parse a BFD listen section @@ -37,7 +38,7 @@ static int auth_type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF */ static conf_parser_t const proto_bfd_config[] = { { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_bfd_t, io.submodule), - .func = virtual_sever_listen_transport_parse }, + .func = transport_parse }, CONF_PARSER_TERMINATOR }; @@ -82,6 +83,22 @@ fr_dict_attr_autoload_t proto_bfd_dict_attr[] = { { NULL } }; +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_bfd_t *inst = talloc_get_type_abort(parent, proto_bfd_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} /* * They all have to be UDP. */ diff --git a/src/listen/control/proto_control.c b/src/listen/control/proto_control.c index 4a9019c0e69..079c0ff7e1e 100644 --- a/src/listen/control/proto_control.c +++ b/src/listen/control/proto_control.c @@ -28,6 +28,8 @@ extern fr_app_t proto_control; +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); + static conf_parser_t const limit_config[] = { { FR_CONF_OFFSET("idle_timeout", proto_control_t, io.idle_timeout), .dflt = "30.0" } , { FR_CONF_OFFSET("nak_lifetime", proto_control_t, io.nak_lifetime), .dflt = "30.0" } , @@ -50,7 +52,7 @@ static conf_parser_t const limit_config[] = { */ static conf_parser_t const proto_control_config[] = { { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_control_t, io.submodule), - .func = virtual_sever_listen_transport_parse }, + .func = transport_parse }, { FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config }, CONF_PARSER_TERMINATOR @@ -64,6 +66,23 @@ fr_dict_autoload_t proto_control_dict[] = { { NULL } }; +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_control_t *inst = talloc_get_type_abort(parent, proto_control_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Open listen sockets/connect to external event source * * @param[in] instance Ctx data for this application. diff --git a/src/listen/cron/proto_cron.c b/src/listen/cron/proto_cron.c index 7b911c831f8..1b7bd366ac7 100644 --- a/src/listen/cron/proto_cron.c +++ b/src/listen/cron/proto_cron.c @@ -31,6 +31,7 @@ extern fr_app_t proto_cron; static int type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule); +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) /** How to parse a Load listen section * @@ -39,7 +40,7 @@ static conf_parser_t const proto_cron_config[] = { { FR_CONF_OFFSET_TYPE_FLAGS("type", FR_TYPE_VOID, CONF_FLAG_NOT_EMPTY | CONF_FLAG_REQUIRED, proto_cron_t, type), .func = type_parse }, { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_cron_t, io.submodule), - .func = virtual_sever_listen_transport_parse, .dflt = "crontab" }, + .func = transport_parse, .dflt = "crontab" }, /* * Add this as a synonym so normal humans can understand it. @@ -57,6 +58,23 @@ static conf_parser_t const proto_cron_config[] = { CONF_PARSER_TERMINATOR }; +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_cron_t *inst = talloc_get_type_abort(parent, proto_cron_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Translates the packet-type into a submodule name * * @param[in] ctx to allocate data in (instance of proto_cron). diff --git a/src/listen/dhcpv4/proto_dhcpv4.c b/src/listen/dhcpv4/proto_dhcpv4.c index 0d425f3ec0d..1e349c0fbe9 100644 --- a/src/listen/dhcpv4/proto_dhcpv4.c +++ b/src/listen/dhcpv4/proto_dhcpv4.c @@ -31,6 +31,7 @@ extern fr_app_t proto_dhcpv4; static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); static const conf_parser_t priority_config[] = { { FR_CONF_OFFSET("Discover", proto_dhcpv4_t, priorities[FR_DHCP_DISCOVER]), @@ -75,7 +76,7 @@ static conf_parser_t const limit_config[] = { static conf_parser_t const proto_dhcpv4_config[] = { { FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_dhcpv4_t, allowed_types), .func = type_parse }, { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_dhcpv4_t, io.submodule), - .func = virtual_sever_listen_transport_parse }, + .func = transport_parse }, { FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config }, @@ -135,6 +136,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, return 0; } +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_dhcpv4_t *inst = talloc_get_type_abort(parent, proto_dhcpv4_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Decode the packet * */ diff --git a/src/listen/dhcpv6/proto_dhcpv6.c b/src/listen/dhcpv6/proto_dhcpv6.c index 172e226f423..7e2d4bc4a13 100644 --- a/src/listen/dhcpv6/proto_dhcpv6.c +++ b/src/listen/dhcpv6/proto_dhcpv6.c @@ -30,6 +30,7 @@ extern fr_app_t proto_dhcpv6; static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); static const conf_parser_t priority_config[] = { { FR_CONF_OFFSET("Solicit", proto_dhcpv6_t, priorities[FR_DHCPV6_SOLICIT]), @@ -76,7 +77,7 @@ static conf_parser_t const limit_config[] = { static conf_parser_t const proto_dhcpv6_config[] = { { FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_dhcpv6_t, allowed_types), .func = type_parse }, { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_dhcpv6_t, io.submodule), - .func = virtual_sever_listen_transport_parse }, + .func = transport_parse }, { FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config }, @@ -135,6 +136,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, return 0; } +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_dhcpv6_t *inst = talloc_get_type_abort(parent, proto_dhcpv6_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Decode the packet * */ diff --git a/src/listen/dns/proto_dns.c b/src/listen/dns/proto_dns.c index b589c32b65e..02d3f67d0a9 100644 --- a/src/listen/dns/proto_dns.c +++ b/src/listen/dns/proto_dns.c @@ -30,6 +30,7 @@ extern fr_app_t proto_dns; static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) static const conf_parser_t priority_config[] = { { FR_CONF_OFFSET_TYPE_FLAGS("query", FR_TYPE_VOID, 0, proto_dns_t, priorities[FR_DNS_QUERY]), @@ -59,7 +60,7 @@ static conf_parser_t const limit_config[] = { static conf_parser_t const proto_dns_config[] = { { FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_dns_t, allowed_types), .func = type_parse }, { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_dns_t, io.submodule), - .func = virtual_sever_listen_transport_parse }, + .func = transport_parse }, { FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config }, @@ -116,6 +117,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, return 0; } +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_dns_t *inst = talloc_get_type_abort(parent, proto_dns_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Decode the packet * */ diff --git a/src/listen/load/proto_load.c b/src/listen/load/proto_load.c index 386053157aa..cf666f26b3c 100644 --- a/src/listen/load/proto_load.c +++ b/src/listen/load/proto_load.c @@ -31,6 +31,7 @@ extern fr_app_t proto_load; static int type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule); +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); /** How to parse a Load listen section * @@ -39,7 +40,7 @@ static conf_parser_t const proto_load_config[] = { { FR_CONF_OFFSET_TYPE_FLAGS("type", FR_TYPE_VOID, CONF_FLAG_NOT_EMPTY | CONF_FLAG_REQUIRED, proto_load_t, type), .func = type_parse }, { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_load_t, io.submodule), - .func = virtual_sever_listen_transport_parse, .dflt = "step" }, + .func = transport_parse, .dflt = "step" }, /* * Add this as a synonym so normal humans can understand it. @@ -104,6 +105,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM return 0; } +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_load_t *inst = talloc_get_type_abort(parent, proto_load_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Decode the packet, and set the request->process function * */ diff --git a/src/listen/radius/proto_radius.c b/src/listen/radius/proto_radius.c index e32c0729ec5..873e1557a59 100644 --- a/src/listen/radius/proto_radius.c +++ b/src/listen/radius/proto_radius.c @@ -86,23 +86,6 @@ static conf_parser_t const proto_radius_config[] = { CONF_PARSER_TERMINATOR }; -static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) -{ - proto_radius_t *inst = talloc_get_type_abort(parent, proto_radius_t); - module_instance_t *mi; - - if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { - return -1; - } - - mi = talloc_get_type_abort(*(void **)out, module_instance_t); - inst->io.app_io = (fr_app_io_t const *)mi->exported; - inst->io.app_io_instance = mi->data; - inst->io.app_io_conf = mi->conf; - - return 0; -} - static fr_dict_t const *dict_radius; extern fr_dict_autoload_t proto_radius_dict[]; @@ -159,6 +142,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM return 0; } +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_radius_t *inst = talloc_get_type_abort(parent, proto_radius_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Decode the packet * */ diff --git a/src/listen/vmps/proto_vmps.c b/src/listen/vmps/proto_vmps.c index c57663fad7f..3e05c7c376d 100644 --- a/src/listen/vmps/proto_vmps.c +++ b/src/listen/vmps/proto_vmps.c @@ -30,8 +30,8 @@ #include "proto_vmps.h" extern fr_app_t proto_vmps; -static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, - CONF_ITEM *ci, conf_parser_t const *rule); +static int type_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule); static const conf_parser_t priority_config[] = { { FR_CONF_OFFSET("Join-Request", proto_vmps_t, priorities[FR_PACKET_TYPE_VALUE_JOIN_REQUEST]), @@ -64,7 +64,7 @@ static conf_parser_t const limit_config[] = { */ static conf_parser_t const proto_vmps_config[] = { { FR_CONF_OFFSET_FLAGS("type", CONF_FLAG_NOT_EMPTY, proto_vmps_t, allowed_types), .func = type_parse }, - { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_vmps_t, io.submodule), .func = virtual_sever_listen_transport_parse }, + { FR_CONF_OFFSET_TYPE_FLAGS("transport", FR_TYPE_VOID, 0, proto_vmps_t, io.submodule), .func = transport_parse }, { FR_CONF_POINTER("limit", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) limit_config }, { FR_CONF_POINTER("priority", 0, CONF_FLAG_SUBSECTION, NULL), .subcs = (void const *) priority_config }, @@ -121,6 +121,23 @@ static int type_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, return 0; } +static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule) +{ + proto_vmps_t *inst = talloc_get_type_abort(parent, proto_vmps_t); + module_instance_t *mi; + + if (unlikely(virtual_sever_listen_transport_parse(ctx, out, parent, ci, rule) < 0)) { + return -1; + } + + mi = talloc_get_type_abort(*(void **)out, module_instance_t); + inst->io.app_io = (fr_app_io_t const *)mi->exported; + inst->io.app_io_instance = mi->data; + inst->io.app_io_conf = mi->conf; + + return 0; +} + /** Decode the packet * */