]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add fr_cloexec()
authorAlan T. DeKok <aland@freeradius.org>
Fri, 2 Jan 2026 00:37:05 +0000 (19:37 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 2 Jan 2026 00:37:31 +0000 (19:37 -0500)
src/lib/util/misc.c
src/lib/util/misc.h

index bf4c82aa58893f3fbc7cf3d98fbf52299fe213e6..395118f52043cb7df77014ae18c3c1ee85ad6ecb 100644 (file)
@@ -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/)
index 7d659ea3fe2fd6ff0a1c9472d558e444970a34c9..ca61a10c18a1879038379506187e3d30fd55d242 100644 (file)
@@ -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);