From: Alan T. DeKok Date: Wed, 30 Apr 2025 17:30:08 +0000 (-0400) Subject: every listener MUST have an "open" call X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa7b340293dce4bcf02e42aadbe45c407d9ca183;p=thirdparty%2Ffreeradius-server.git every listener MUST have an "open" call as a development requirement --- diff --git a/src/lib/server/virtual_servers.c b/src/lib/server/virtual_servers.c index f48b24c200..968522a51b 100644 --- a/src/lib/server/virtual_servers.c +++ b/src/lib/server/virtual_servers.c @@ -1543,12 +1543,15 @@ int virtual_servers_open(fr_schedule_t *sc) listener_cnt = talloc_array_length(listeners); for (j = 0; j < listener_cnt; j++) { + int ret; fr_virtual_listen_t *listener = listeners[j]; fr_assert(listener != NULL); fr_assert(listener->proto_mi != NULL); fr_assert(listener->proto_module != NULL); + fr_assert(listener->proto_module->open != NULL); + /* * The socket is opened with app_instance, * but all subsequent calls (network.c, etc.) use app_io_instance. @@ -1560,28 +1563,24 @@ int virtual_servers_open(fr_schedule_t *sc) * Even then, proto_radius usually calls fr_master_io_listen() in order * to create the fr_listen_t structure. */ - if (listener->proto_module->open) { - int ret; - - /* - * Sometimes the open function needs to modify instance - * data, so we need to temporarily remove the protection. - */ - module_instance_data_unprotect(listener->proto_mi); - ret = listener->proto_module->open(listener->proto_mi->data, sc, - listener->proto_mi->conf); - module_instance_data_protect(listener->proto_mi); - if (unlikely(ret < 0)) { - cf_log_err(listener->proto_mi->conf, - "Opening %s I/O interface failed", - listener->proto_module->common.name); - - return -1; - } - opened++; + /* + * Sometimes the open function needs to modify instance + * data, so we need to temporarily remove the protection. + */ + module_instance_data_unprotect(listener->proto_mi); + ret = listener->proto_module->open(listener->proto_mi->data, sc, + listener->proto_mi->conf); + module_instance_data_protect(listener->proto_mi); + if (unlikely(ret < 0)) { + cf_log_err(listener->proto_mi->conf, + "Failed opening listener %s", + listener->proto_module->common.name); + return -1; } + opened++; + /* * Socket information is printed out by * the socket handlers. e.g. proto_radius_udp