]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
allow for non-socket listeners
authorAlan T. DeKok <aland@freeradius.org>
Fri, 21 Jan 2022 15:49:03 +0000 (10:49 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 21 Jan 2022 16:23:06 +0000 (11:23 -0500)
which have no app_io->open, but do have app_io->event_list_set

src/lib/io/network.c

index a8a222d107b6dc06ef8792ded2f825b3dede9136..0b3ad9d232f6249a8d6213a877d5219c51495a8c 100644 (file)
@@ -1163,6 +1163,29 @@ static int fr_network_listen_add_self(fr_network_t *nr, fr_listen_t *listen)
        size_t                  size;
        int                     num_messages;
 
+       fr_assert(listen->app_io != NULL);
+
+       /*
+        *      Non-socket listeners just get told about the event
+        *      list, and nothing else.
+        */
+       if (!listen->app_io->open) {
+               fr_assert(listen->app_io->event_list_set != NULL);
+               fr_assert(!listen->app_io->read);
+               fr_assert(!listen->app_io->write);
+               fr_assert(!listen->app_io->close);
+
+               listen->app_io->event_list_set(listen, nr->el, nr);
+
+               /*
+                *      We use fr_log() here to avoid the "Network - " prefix.
+                */
+               fr_log(nr->log, L_DBG, __FILE__, __LINE__, "Listener %s bound to virtual server %s",
+                      listen->name, cf_section_name2(listen->server_cs));
+
+               return 0;
+       }
+
        s = talloc_zero(nr, fr_network_socket_t);
        fr_assert(s != NULL);