diff --git a/configure.ac b/configure.ac index 18132757cd..545f1fb586 100644 --- a/configure.ac +++ b/configure.ac @@ -583,7 +583,7 @@ AC_CHECK_FUNC( ) AC_CHECK_FUNCS(prctl mallinfo getpass closefrom getpwnam_r getgrnam_r getpwuid_r) -AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime) +AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime dirfd) AC_CHECK_FUNC([syslog], [ AC_DEFINE([HAVE_SYSLOG], [], [have syslog(3) and friends]) diff --git a/src/libstrongswan/utils/utils.c b/src/libstrongswan/utils/utils.c index c396540ec2..b4a4db8024 100644 --- a/src/libstrongswan/utils/utils.c +++ b/src/libstrongswan/utils/utils.c @@ -175,10 +175,19 @@ void closefrom(int low_fd) DIR *dir; struct dirent *entry; +#ifndef HAVE_DIRFD + /* if we don't have dirfd() lets close the lowest FD and hope it gets reused + * by opendir() */ + close(low_fd); + dir_fd = low_fd++; +#endif + dir = opendir(FD_DIR); if (dir) { +#ifdef HAVE_DIRFD dir_fd = dirfd(dir); +#endif while ((entry = readdir(dir))) { if (!isdigit(entry->d_name[0]))