BIO abstractions for opening file descriptors.
More...
#include <freeradius-devel/bio/fd_priv.h>
#include <freeradius-devel/util/file.h>
#include <freeradius-devel/util/cap.h>
#include <sys/stat.h>
#include <net/if.h>
#include <fcntl.h>
#include <libgen.h>
#include <netinet/tcp.h>
Go to the source code of this file.
|
static int | fr_bio_fd_common_datagram (int fd, UNUSED fr_socket_t const *sock, fr_bio_fd_config_t const *cfg) |
| Initialize common datagram information. More...
|
|
static int | fr_bio_fd_common_tcp (int fd, UNUSED fr_socket_t const *sock, fr_bio_fd_config_t const *cfg) |
| Initialize common datagram information. More...
|
|
int | fr_bio_fd_open (fr_bio_t *bio, fr_bio_fd_config_t const *cfg) |
| Opens a socket and updates sock->fd. More...
|
|
int | fr_bio_fd_reopen (fr_bio_t *bio) |
| Reopen a file BIO. More...
|
|
static int | fr_bio_fd_server_ipv4 (int fd, fr_socket_t const *sock, fr_bio_fd_config_t const *cfg) |
| Initialize an IPv4 server socket. More...
|
|
static int | fr_bio_fd_server_ipv6 (int fd, fr_socket_t const *sock, fr_bio_fd_config_t const *cfg) |
| Initialize an IPv6 server socket. More...
|
|
static int | fr_bio_fd_server_tcp (int fd, UNUSED fr_socket_t const *sock) |
| Initialize a TCP server socket. More...
|
|
static int | fr_bio_fd_server_udp (int fd, fr_socket_t const *sock, fr_bio_fd_config_t const *cfg) |
| Initialize a UDP server socket. More...
|
|
static int | fr_bio_fd_socket_bind (fr_bio_fd_t *my, fr_bio_fd_config_t const *cfg) |
|
static int | fr_bio_fd_socket_bind_to_device (fr_bio_fd_t *my, fr_bio_fd_config_t const *cfg) |
| This system is missing SO_BINDTODEVICE, IP_BOUND_IF, IPV6_BOUND_IF. More...
|
|
static int | fr_bio_fd_socket_bind_unix (fr_bio_fd_t *my, fr_bio_fd_config_t const *cfg) |
| Bind to a Unix domain socket. More...
|
|
static int | fr_bio_fd_socket_unix_mkdir (int *dirfd, char const **filename, fr_bio_fd_config_t const *cfg) |
|
static int | fr_bio_fd_socket_unix_verify (int dirfd, char const *filename, fr_bio_fd_config_t const *cfg) |
| Verify or clean up a pre-existing domain socket. More...
|
|
static void | fr_bio_fd_unix_shutdown (fr_bio_t *bio) |
|
BIO abstractions for opening file descriptors.
- Id
- c9ec70f70cf00f6aa184b9a0a93220351986d7db
- Copyright
- 2024 Network RADIUS SAS (legal.nosp@m.@net.nosp@m.workr.nosp@m.adiu.nosp@m.s.com)
Definition in file fd_open.c.
◆ fr_bio_fd_common_datagram()
Initialize common datagram information.
Definition at line 82 of file fd_open.c.
◆ fr_bio_fd_common_tcp()
Initialize common datagram information.
Definition at line 38 of file fd_open.c.
◆ fr_bio_fd_open()
Opens a socket and updates sock->fd.
If the socket is asynchronous, it also calls connect()
Definition at line 715 of file fd_open.c.
◆ fr_bio_fd_reopen()
Reopen a file BIO.
e.g. for log files.
Definition at line 1000 of file fd_open.c.
◆ fr_bio_fd_server_ipv4()
Initialize an IPv4 server socket.
Definition at line 173 of file fd_open.c.
◆ fr_bio_fd_server_ipv6()
Initialize an IPv6 server socket.
Definition at line 213 of file fd_open.c.
◆ fr_bio_fd_server_tcp()
Initialize a TCP server socket.
Definition at line 158 of file fd_open.c.
◆ fr_bio_fd_server_udp()
Initialize a UDP server socket.
Definition at line 137 of file fd_open.c.
◆ fr_bio_fd_socket_bind()
◆ fr_bio_fd_socket_bind_to_device()
This system is missing SO_BINDTODEVICE, IP_BOUND_IF, IPV6_BOUND_IF.
@todo - FreeBSD IP_RECVIF and IP_SENDIF
Except that has to be done in recvmsg() and sendmsg(). And it only works on datagram sockets.
cmsg_len = sizeof(struct sockaddr_dl)
cmsg_level = IPPROTO_IP
cmsg_type = IP_RECVIF
Definition at line 666 of file fd_open.c.
◆ fr_bio_fd_socket_bind_unix()
Bind to a Unix domain socket.
- Todo:
- this function only does a tiny bit of what fr_server_domain_socket_peercred() and fr_server_domain_socket_perm() do. Those functions do a lot more sanity checks.
The main question is whether or not those checks are useful. In many cases, fchmod() and fchown() are not possible on Unix sockets, so we shouldn't bother doing them,
Note that the listeners generally call these functions with wrappers of fr_suid_up() and fr_suid_down(). So these functions are running as "root", and will create files owned as "root".
Definition at line 481 of file fd_open.c.
◆ fr_bio_fd_socket_unix_mkdir()
static int fr_bio_fd_socket_unix_mkdir |
( |
int * |
dirfd, |
|
|
char const ** |
filename, |
|
|
fr_bio_fd_config_t const * |
cfg |
|
) |
| |
|
static |
◆ fr_bio_fd_socket_unix_verify()
static int fr_bio_fd_socket_unix_verify |
( |
int |
dirfd, |
|
|
char const * |
filename, |
|
|
fr_bio_fd_config_t const * |
cfg |
|
) |
| |
|
static |
Verify or clean up a pre-existing domain socket.
Definition at line 240 of file fd_open.c.
◆ fr_bio_fd_unix_shutdown()
static void fr_bio_fd_unix_shutdown |
( |
fr_bio_t * |
bio | ) |
|
|
static |