From: Alan T. DeKok Date: Fri, 2 Jan 2026 00:37:05 +0000 (-0500) Subject: add fr_cloexec() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb6dcb10dfbf0c9ec05034278c1bf0353bc9d027;p=thirdparty%2Ffreeradius-server.git add fr_cloexec() --- diff --git a/src/lib/util/misc.c b/src/lib/util/misc.c index bf4c82aa588..395118f5204 100644 --- a/src/lib/util/misc.c +++ b/src/lib/util/misc.c @@ -303,6 +303,38 @@ int fr_blocking(UNUSED int fd) } #endif +#ifdef FD_CLOEXEC +/** Set FD_CLOEXEC on a socket + * @param fd to set FD_CLOEXEC flag on. + * @return + * - Flags set on the fd. + * - -1 on failure. + */ +int fr_cloexec(int fd) +{ + int flags; + + flags = fcntl(fd, F_GETFL, NULL); + if (flags < 0) { + fr_strerror_printf("Failed getting fd flags: %s", fr_syserror(errno)); + return -1; + } + + flags |= FD_CLOEXEC; + if (fcntl(fd, F_SETFL, flags) < 0) { + fr_strerror_printf("Failed setting fd flags: %s", fr_syserror(errno)); + return -1; + } + + return flags; +} +#else +int fr_nonblock(UNUSED int fd) +{ + return 0; +} +#endif + /** Convert UTF8 string to UCS2 encoding * * @note Borrowed from src/crypto/ms_funcs.c of wpa_supplicant project (http://hostap.epitest.fi/wpa_supplicant/) diff --git a/src/lib/util/misc.h b/src/lib/util/misc.h index 7d659ea3fe2..ca61a10c18a 100644 --- a/src/lib/util/misc.h +++ b/src/lib/util/misc.h @@ -145,6 +145,7 @@ char *fr_tolower(char *str); int fr_nonblock(int fd); int fr_blocking(int fd); +int fr_cloexec(int fd); ssize_t fr_utf8_to_ucs2(uint8_t *out, size_t outlen, char const *in, size_t inlen); size_t fr_snprint_uint128(char *out, size_t outlen, uint128_t const num);