Some platforms (notably, the BSDs) have a more efficient implementation called

closefrom(3).


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@168522 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.2
Tilghman Lesher 17 years ago
parent a8930194f4
commit fd3cb90841

5
configure vendored

@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.ac Revision: 164802 . # From configure.ac Revision: 166058 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for asterisk 1.6. # Generated by GNU Autoconf 2.61 for asterisk 1.6.
# #
@ -15678,7 +15678,8 @@ done
for ac_func in asprintf atexit dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl
for ac_func in asprintf atexit closefrom dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl
do do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5 { echo "$as_me:$LINENO: checking for $ac_func" >&5

@ -337,7 +337,7 @@ AC_FUNC_STRNLEN
AC_FUNC_STRTOD AC_FUNC_STRTOD
AC_FUNC_UTIME_NULL AC_FUNC_UTIME_NULL
AC_FUNC_VPRINTF AC_FUNC_VPRINTF
AC_CHECK_FUNCS([asprintf atexit dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl]) AC_CHECK_FUNCS([asprintf atexit closefrom dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl])
AC_CHECK_FUNCS([glob]) AC_CHECK_FUNCS([glob])

@ -153,6 +153,9 @@
/* Define to 1 if your system has a working `chown' function. */ /* Define to 1 if your system has a working `chown' function. */
#undef HAVE_CHOWN #undef HAVE_CHOWN
/* Define to 1 if you have the `closefrom' function. */
#undef HAVE_CLOSEFROM
/* Define this to indicate the ${COS_DESCRIP} library */ /* Define this to indicate the ${COS_DESCRIP} library */
#undef HAVE_COS #undef HAVE_COS

@ -33,6 +33,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <regex.h> #include <regex.h>
#include <sys/file.h> /* added this to allow to compile, sorry! */ #include <sys/file.h> /* added this to allow to compile, sorry! */
#include <signal.h> #include <signal.h>
#include <sys/time.h> /* for getrlimit(2) */
#include <sys/resource.h> /* for getrlimit(2) */
#include <stdlib.h> /* for closefrom(3) */
#include "asterisk/paths.h" /* use ast_config_AST_DATA_DIR */ #include "asterisk/paths.h" /* use ast_config_AST_DATA_DIR */
#include "asterisk/channel.h" #include "asterisk/channel.h"
@ -1839,18 +1842,24 @@ int ast_get_encoded_str(const char *stream, char *result, size_t result_size)
void ast_close_fds_above_n(int n) void ast_close_fds_above_n(int n)
{ {
#ifdef HAVE_CLOSEFROM
closefrom(n + 1);
#else
int x, null; int x, null;
struct rlimit rl;
getrlimit(RLIMIT_NOFILE, &rl);
null = open("/dev/null", O_RDONLY); null = open("/dev/null", O_RDONLY);
for (x = n + 1; x <= (null >= 8192 ? null : 8192); x++) { for (x = n + 1; x < rl.rlim_max; x++) {
if (x != null) { if (x != null) {
/* Side effect of dup2 is that it closes any existing fd without error. /* Side effect of dup2 is that it closes any existing fd without error.
* This prevents valgrind and other debugging tools from sending up * This prevents valgrind and other debugging tools from sending up
* false error reports. */ * false error reports. */
dup2(null, x); while (dup2(null, x) < 0 && errno == EINTR);
close(x); close(x);
} }
} }
close(null); close(null);
#endif
} }
int ast_safe_fork(int stop_reaper) int ast_safe_fork(int stop_reaper)

Loading…
Cancel
Save