Added a replacement for closefrom (available on *BSD).
authorTobias Brunner <tobias@strongswan.org>
Thu, 13 Oct 2011 08:34:51 +0000 (10:34 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 13 Oct 2011 09:19:12 +0000 (11:19 +0200)
configure.in
src/libstrongswan/utils.c
src/libstrongswan/utils.h

index 99cec7c..c8aa68a 100644 (file)
@@ -375,7 +375,7 @@ dnl check if native rwlocks are available
 AC_CHECK_FUNCS(pthread_rwlock_init)
 LIBS=$saved_LIBS
 
-AC_CHECK_FUNCS(prctl mallinfo getpass)
+AC_CHECK_FUNCS(prctl mallinfo getpass closefrom)
 
 AC_CHECK_HEADERS(sys/sockio.h glob.h)
 AC_CHECK_HEADERS(net/pfkeyv2.h netipsec/ipsec.h netinet6/ipsec.h linux/udp.h)
index 1129ea3..eca613a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2010 Tobias Brunner
+ * Copyright (C) 2008-2011 Tobias Brunner
  * Copyright (C) 2005-2008 Martin Willi
  * Hochschule fuer Technik Rapperswil
  *
@@ -193,6 +193,25 @@ bool mkdir_p(const char *path, mode_t mode)
        return TRUE;
 }
 
+#ifndef HAVE_CLOSEFROM
+/**
+ * Described in header.
+ */
+void closefrom(int lowfd)
+{
+       int maxfd, fd;
+       maxfd = (int)sysconf(_SC_OPEN_MAX);
+       if (maxfd < 0)
+       {
+               maxfd = 256;
+       }
+       for (fd = lowfd; fd < maxfd; fd++)
+       {
+               close(fd);
+       }
+}
+#endif /* HAVE_CLOSEFROM */
+
 /**
  * Return monotonic time
  */
index f04c633..0f06fec 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2010 Tobias Brunner
+ * Copyright (C) 2008-2011 Tobias Brunner
  * Copyright (C) 2008 Martin Willi
  * Hochschule fuer Technik Rapperswil
  *
@@ -408,6 +408,15 @@ char *translate(char *str, const char *from, const char *to);
  */
 bool mkdir_p(const char *path, mode_t mode);
 
+#ifndef HAVE_CLOSEFROM
+/**
+ * Close open file descriptors greater than or equal to lowfd.
+ *
+ * @param lowfd                start closing file descriptoros from here
+ */
+void closefrom(int lowfd);
+#endif
+
 /**
  * Get a timestamp from a monotonic time source.
  *