From: Alan T. DeKok Date: Thu, 20 Sep 2018 13:51:37 +0000 (-0400) Subject: make fd_set take listener X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=570b18b1551fa2f1204f804d840641bcdb22d1e7;p=thirdparty%2Ffreeradius-server.git make fd_set take listener --- diff --git a/src/lib/io/base.h b/src/lib/io/base.h index df31ae3489e..28dfc925e7a 100644 --- a/src/lib/io/base.h +++ b/src/lib/io/base.h @@ -97,10 +97,10 @@ typedef int (*fr_io_get_fd_t)(fr_listen_t const *listen); /** Set a selectable file descriptor for this I/O path * * - * @param[in] instance containing the configuration + * @param[in] listen the listener for this socket * @param[in] fd the FD to set */ -typedef int (*fr_io_set_fd_t)(void *instance, int fd); +typedef int (*fr_io_set_fd_t)(fr_listen_t *listen, int fd); /** Decode a raw packet and convert it into a request. * diff --git a/src/lib/io/master.c b/src/lib/io/master.c index 0f79ddc747f..f4c5ae7115d 100644 --- a/src/lib/io/master.c +++ b/src/lib/io/master.c @@ -636,7 +636,7 @@ static fr_io_connection_t *fr_io_connection_alloc(fr_io_instance_t *inst, fr_io_ /* * Set the new FD, and get the module to set it's connection name. */ - if (inst->app_io->fd_set(connection->child->app_io_instance, fd) < 0) { + if (inst->app_io->fd_set(connection->child, fd) < 0) { DEBUG3("Failed setting FD to %s", inst->app_io->name); close(fd); return NULL; diff --git a/src/modules/proto_control/proto_control_tcp.c b/src/modules/proto_control/proto_control_tcp.c index 756d428b41a..8ca72ab4680 100644 --- a/src/modules/proto_control/proto_control_tcp.c +++ b/src/modules/proto_control/proto_control_tcp.c @@ -288,12 +288,10 @@ static int mod_fd(fr_listen_t const *listen) /** Set the file descriptor for this socket. * - * @param[in] instance of the RADIUS TCP I/O path. - * @param[in] fd the FD to set */ -static int mod_fd_set(void *instance, int fd) +static int mod_fd_set(fr_listen_t *listen, int fd) { - proto_control_tcp_t *inst = talloc_get_type_abort(instance, proto_control_tcp_t); + proto_control_tcp_t *inst = talloc_get_type_abort(listen->thread_instance, proto_control_tcp_t); inst->sockfd = fd; diff --git a/src/modules/proto_control/proto_control_unix.c b/src/modules/proto_control/proto_control_unix.c index a6489c31595..b4f917e0b9d 100644 --- a/src/modules/proto_control/proto_control_unix.c +++ b/src/modules/proto_control/proto_control_unix.c @@ -1024,12 +1024,10 @@ static int getpeereid(int s, uid_t *euid, gid_t *egid) /** Set the file descriptor for this socket. * - * @param[in] instance of the RADIUS UNIX I/O path. - * @param[in] fd the FD to set */ -static int mod_fd_set(void *instance, int fd) +static int mod_fd_set(fr_listen_t *listen, int fd) { - proto_control_unix_t *inst = talloc_get_type_abort(instance, proto_control_unix_t); + proto_control_unix_t *inst = talloc_get_type_abort(listen->thread_instance, proto_control_unix_t); #ifndef HAVE_FUNOPEN cookie_io_functions_t io; #endif @@ -1091,13 +1089,13 @@ static int mod_fd_set(void *instance, int fd) * Set up socket-specific callbacks */ #ifdef HAVE_FUNOPEN - inst->stdout = funopen(instance, NULL, write_stdout, NULL, NULL); + inst->stdout = funopen(inst, NULL, write_stdout, NULL, NULL); rad_assert(inst->stdout != NULL); - inst->stderr = funopen(instance, NULL, write_stderr, NULL, NULL); + inst->stderr = funopen(inst, NULL, write_stderr, NULL, NULL); rad_assert(inst->stderr != NULL); - inst->misc = funopen(instance, NULL, write_misc, NULL, NULL); + inst->misc = funopen(inst, NULL, write_misc, NULL, NULL); rad_assert(inst->misc != NULL); #else /* @@ -1108,13 +1106,13 @@ static int mod_fd_set(void *instance, int fd) io.close = NULL; io.write = write_stdout; - inst->stdout = fopencookie(instance, "w", io); + inst->stdout = fopencookie(inst, "w", io); io.write = write_stderr; - inst->stderr = fopencookie(instance, "w", io); + inst->stderr = fopencookie(inst, "w", io); io.write = write_misc; - inst->misc = fopencookie(instance, "w", io); + inst->misc = fopencookie(inst, "w", io); #endif /* @@ -1127,8 +1125,8 @@ static int mod_fd_set(void *instance, int fd) (void) setvbuf(inst->stderr, NULL, _IOLBF, 0); (void) setvbuf(inst->misc, NULL, _IOLBF, 0); - inst->info = talloc_zero(instance, fr_cmd_info_t); - fr_command_info_init(instance, inst->info); + inst->info = talloc_zero(inst, fr_cmd_info_t); + fr_command_info_init(inst, inst->info); return 0; } diff --git a/src/modules/proto_dhcpv4/proto_dhcpv4_udp.c b/src/modules/proto_dhcpv4/proto_dhcpv4_udp.c index 8e376ba27ac..9b9d829e66f 100644 --- a/src/modules/proto_dhcpv4/proto_dhcpv4_udp.c +++ b/src/modules/proto_dhcpv4/proto_dhcpv4_udp.c @@ -556,12 +556,10 @@ static int mod_fd(fr_listen_t const *listen) /** Set the file descriptor for this socket. * - * @param[in] instance of the UDP I/O path. - * @param[in] fd the FD to set */ -static int mod_fd_set(void *instance, int fd) +static int mod_fd_set(fr_listen_t *listen, int fd) { - proto_dhcpv4_udp_t *inst = talloc_get_type_abort(instance, proto_dhcpv4_udp_t); + proto_dhcpv4_udp_t *inst = talloc_get_type_abort(listen->thread_instance, proto_dhcpv4_udp_t); inst->sockfd = fd; diff --git a/src/modules/proto_radius/proto_radius_tcp.c b/src/modules/proto_radius/proto_radius_tcp.c index 6adee5539bb..2cb9b12f0b5 100644 --- a/src/modules/proto_radius/proto_radius_tcp.c +++ b/src/modules/proto_radius/proto_radius_tcp.c @@ -370,13 +370,10 @@ static int mod_fd(fr_listen_t const *listen) } /** Set the file descriptor for this socket. - * - * @param[in] instance of the RADIUS TCP I/O path. - * @param[in] fd the FD to set */ -static int mod_fd_set(void *instance, int fd) +static int mod_fd_set(fr_listen_t *listen, int fd) { - proto_radius_tcp_t *inst = talloc_get_type_abort(instance, proto_radius_tcp_t); + proto_radius_tcp_t *inst = talloc_get_type_abort(listen->thread_instance, proto_radius_tcp_t); inst->sockfd = fd; diff --git a/src/modules/proto_radius/proto_radius_udp.c b/src/modules/proto_radius/proto_radius_udp.c index e8716f7fc51..0d5582151ec 100644 --- a/src/modules/proto_radius/proto_radius_udp.c +++ b/src/modules/proto_radius/proto_radius_udp.c @@ -406,12 +406,10 @@ static int mod_fd(fr_listen_t const *listen) /** Set the file descriptor for this socket. * - * @param[in] instance of the RADIUS UDP I/O path. - * @param[in] fd the FD to set */ -static int mod_fd_set(void *instance, int fd) +static int mod_fd_set(fr_listen_t *listen, int fd) { - proto_radius_udp_t *inst = talloc_get_type_abort(instance, proto_radius_udp_t); + proto_radius_udp_t *inst = talloc_get_type_abort(listen->thread_instance, proto_radius_udp_t); inst->sockfd = fd; diff --git a/src/modules/proto_vmps/proto_vmps_udp.c b/src/modules/proto_vmps/proto_vmps_udp.c index e14ff60db88..7f7011a6243 100644 --- a/src/modules/proto_vmps/proto_vmps_udp.c +++ b/src/modules/proto_vmps/proto_vmps_udp.c @@ -384,12 +384,10 @@ static int mod_fd(fr_listen_t const *listen) /** Set the file descriptor for this socket. * - * @param[in] instance of the UDP I/O path. - * @param[in] fd the FD to set */ -static int mod_fd_set(void *instance, int fd) +static int mod_fd_set(fr_listen_t *listen, int fd) { - proto_vmps_udp_t *inst = talloc_get_type_abort(instance, proto_vmps_udp_t); + proto_vmps_udp_t *inst = talloc_get_type_abort(listen->thread_instance, proto_vmps_udp_t); inst->sockfd = fd;