Ian Kent 5c19ca
autofs-5.0.3 - use CLOEXEC flag
Ian Kent 5c19ca
Ian Kent 5c19ca
From: Ian Kent <raven@themaw.net>
Ian Kent 5c19ca
Ian Kent 5c19ca
Update autofs to use the new CLOEXEC flag if present.
Ian Kent 5c19ca
This allows us to set close on exec atomically flag when opening files,
Ian Kent 5c19ca
hopefully avoiding selinux complaining about leaked file handles.
Ian Kent 5c19ca
---
Ian Kent 5c19ca
Ian Kent 5c19ca
 daemon/automount.c        |   42 +++---------------
Ian Kent 5c19ca
 daemon/direct.c           |    2 
Ian Kent 5c19ca
 daemon/flag.c             |    8 +--
Ian Kent 5c19ca
 daemon/indirect.c         |    2 
Ian Kent 5c19ca
 daemon/lookup.c           |    1 
Ian Kent 5c19ca
 daemon/module.c           |    2 
Ian Kent 5c19ca
 daemon/spawn.c            |   11 ----
Ian Kent 5c19ca
 include/automount.h       |  106 ++++++++++++++++++++++++++++++++++++++++++++++
Ian Kent 5c19ca
 include/state.h           |    1 
Ian Kent 5c19ca
 lib/cache.c               |    2 
Ian Kent 5c19ca
 lib/defaults.c            |    7 +--
Ian Kent 5c19ca
 lib/log.c                 |    2 
Ian Kent 5c19ca
 lib/macros.c              |    1 
Ian Kent 5c19ca
 lib/mounts.c              |    2 
Ian Kent 5c19ca
 lib/nss_parse.y           |   13 -----
Ian Kent 5c19ca
 lib/parse_subs.c          |    1 
Ian Kent 5c19ca
 lib/rpc_subs.c            |   21 ++-------
Ian Kent 5c19ca
 modules/cyrus-sasl.c      |    1 
Ian Kent 5c19ca
 modules/lookup_file.c     |   40 ++---------------
Ian Kent 5c19ca
 modules/lookup_hesiod.c   |    1 
Ian Kent 5c19ca
 modules/lookup_hosts.c    |    1 
Ian Kent 5c19ca
 modules/lookup_ldap.c     |    1 
Ian Kent 5c19ca
 modules/lookup_multi.c    |    1 
Ian Kent 5c19ca
 modules/lookup_nisplus.c  |    1 
Ian Kent 5c19ca
 modules/lookup_program.c  |    5 --
Ian Kent 5c19ca
 modules/lookup_userhome.c |    1 
Ian Kent 5c19ca
 modules/lookup_yp.c       |    1 
Ian Kent 5c19ca
 modules/mount_afs.c       |    2 
Ian Kent 5c19ca
 modules/mount_autofs.c    |    2 
Ian Kent 5c19ca
 modules/mount_bind.c      |    2 
Ian Kent 5c19ca
 modules/mount_changer.c   |   10 ----
Ian Kent 5c19ca
 modules/mount_ext2.c      |    2 
Ian Kent 5c19ca
 modules/mount_generic.c   |    2 
Ian Kent 5c19ca
 modules/mount_nfs.c       |    2 
Ian Kent 5c19ca
 modules/parse_hesiod.c    |    1 
Ian Kent 5c19ca
 modules/parse_sun.c       |    2 
Ian Kent 5c19ca
 modules/replicated.c      |   13 +----
Ian Kent 5c19ca
 37 files changed, 145 insertions(+), 170 deletions(-)
Ian Kent 5c19ca
Ian Kent 5c19ca
Ian Kent 5c19ca
--- autofs-5.0.3.orig/daemon/automount.c
Ian Kent 5c19ca
+++ autofs-5.0.3/daemon/automount.c
Ian Kent 5c19ca
@@ -20,13 +20,11 @@
Ian Kent 5c19ca
  * ----------------------------------------------------------------------- */
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <dirent.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <getopt.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <sys/ioctl.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
@@ -68,6 +66,9 @@ static pthread_t state_mach_thid;
Ian Kent 5c19ca
 /* Pre-calculated kernel packet length */
Ian Kent 5c19ca
 static size_t kpkt_len;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
+/* Does kernel know about SOCK_CLOEXEC and friends */
Ian Kent 5c19ca
+static int cloexec_works = 0;
Ian Kent 5c19ca
+
Ian Kent 5c19ca
 /* Attribute to create detached thread */
Ian Kent 5c19ca
 pthread_attr_t thread_attr;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -705,7 +706,7 @@ static char *automount_path_to_fifo(unsi
Ian Kent 5c19ca
 static int create_logpri_fifo(struct autofs_point *ap)
Ian Kent 5c19ca
 {
Ian Kent 5c19ca
 	int ret = -1;
Ian Kent 5c19ca
-	int fd, cl_flags;
Ian Kent 5c19ca
+	int fd;
Ian Kent 5c19ca
 	char *fifo_name;
Ian Kent 5c19ca
 	char buf[MAX_ERR_BUF];
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -731,7 +732,7 @@ static int create_logpri_fifo(struct aut
Ian Kent 5c19ca
 		goto out_free;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	fd = open(fifo_name, O_RDWR|O_NONBLOCK);
Ian Kent 5c19ca
+	fd = open_fd(fifo_name, O_RDWR|O_NONBLOCK);
Ian Kent 5c19ca
 	if (fd < 0) {
Ian Kent 5c19ca
 		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
Ian Kent 5c19ca
 		crit(ap->logopt,
Ian Kent 5c19ca
@@ -741,11 +742,6 @@ static int create_logpri_fifo(struct aut
Ian Kent 5c19ca
 		goto out_free;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	ap->logpri_fifo = fd;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 out_free:
Ian Kent 5c19ca
@@ -997,7 +993,7 @@ int do_expire(struct autofs_point *ap, c
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 static int autofs_init_ap(struct autofs_point *ap)
Ian Kent 5c19ca
 {
Ian Kent 5c19ca
-	int pipefd[2], cl_flags;
Ian Kent 5c19ca
+	int pipefd[2];
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	if ((ap->state != ST_INIT)) {
Ian Kent 5c19ca
 		/* This can happen if an autofs process is already running*/
Ian Kent 5c19ca
@@ -1008,7 +1004,7 @@ static int autofs_init_ap(struct autofs_
Ian Kent 5c19ca
 	ap->pipefd = ap->kpipefd = ap->ioctlfd = -1;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	/* Pipe for kernel communications */
Ian Kent 5c19ca
-	if (pipe(pipefd) < 0) {
Ian Kent 5c19ca
+	if (open_pipe(pipefd) < 0) {
Ian Kent 5c19ca
 		crit(ap->logopt,
Ian Kent 5c19ca
 		     "failed to create commumication pipe for autofs path %s",
Ian Kent 5c19ca
 		     ap->path);
Ian Kent 5c19ca
@@ -1018,18 +1014,8 @@ static int autofs_init_ap(struct autofs_
Ian Kent 5c19ca
 	ap->pipefd = pipefd[0];
Ian Kent 5c19ca
 	ap->kpipefd = pipefd[1];
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(ap->pipefd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(ap->pipefd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(ap->kpipefd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(ap->kpipefd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	/* Pipe state changes from signal handler to main loop */
Ian Kent 5c19ca
-	if (pipe(ap->state_pipe) < 0) {
Ian Kent 5c19ca
+	if (open_pipe(ap->state_pipe) < 0) {
Ian Kent 5c19ca
 		crit(ap->logopt,
Ian Kent 5c19ca
 		     "failed create state pipe for autofs path %s", ap->path);
Ian Kent 5c19ca
 		close(ap->pipefd);
Ian Kent 5c19ca
@@ -1037,16 +1023,6 @@ static int autofs_init_ap(struct autofs_
Ian Kent 5c19ca
 		return -1;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(ap->state_pipe[0], F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(ap->state_pipe[0], F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(ap->state_pipe[1], F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(ap->state_pipe[1], F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	if (create_logpri_fifo(ap) < 0) {
Ian Kent 5c19ca
 		logmsg("could not create FIFO for path %s\n", ap->path);
Ian Kent 5c19ca
 		logmsg("dynamic log level changes not available for %s", ap->path);
Ian Kent 5c19ca
@@ -1114,7 +1090,7 @@ static void become_daemon(unsigned foreg
Ian Kent 5c19ca
 		exit(0);
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if (pipe(start_pipefd) < 0) {
Ian Kent 5c19ca
+	if (open_pipe(start_pipefd) < 0) {
Ian Kent 5c19ca
 		fprintf(stderr, "%s: failed to create start_pipefd.\n",
Ian Kent 5c19ca
 			program);
Ian Kent 5c19ca
 		exit(0);
Ian Kent 5c19ca
--- autofs-5.0.3.orig/daemon/direct.c
Ian Kent 5c19ca
+++ autofs-5.0.3/daemon/direct.c
Ian Kent 5c19ca
@@ -20,12 +20,10 @@
Ian Kent 5c19ca
  * ----------------------------------------------------------------------- */
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <dirent.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <sys/ioctl.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <sys/wait.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/daemon/flag.c
Ian Kent 5c19ca
+++ autofs-5.0.3/daemon/flag.c
Ian Kent 5c19ca
@@ -21,15 +21,15 @@
Ian Kent 5c19ca
 #include <sys/time.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <time.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <alloca.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <errno.h>
Ian Kent 5c19ca
 
Ian Kent 5c19ca
+#include "automount.h"
Ian Kent 5c19ca
+
Ian Kent 5c19ca
 #define MAX_PIDSIZE	20
Ian Kent 5c19ca
 #define FLAG_FILE	AUTOFS_FLAG_DIR "/autofs-running"
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -129,7 +129,7 @@ int aquire_flag_file(void)
Ian Kent 5c19ca
 	while (!we_created_flagfile) {
Ian Kent 5c19ca
 		int errsv, i, j;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-		i = open(linkf, O_WRONLY|O_CREAT, 0);
Ian Kent 5c19ca
+		i = open_fd_mode(linkf, O_WRONLY|O_CREAT, 0);
Ian Kent 5c19ca
 		if (i < 0) {
Ian Kent 5c19ca
 			release_flag_file();
Ian Kent 5c19ca
 			return 0;
Ian Kent 5c19ca
@@ -146,7 +146,7 @@ int aquire_flag_file(void)
Ian Kent 5c19ca
 			return 0;
Ian Kent 5c19ca
 		}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-		fd = open(FLAG_FILE, O_RDWR);
Ian Kent 5c19ca
+		fd = open_fd(FLAG_FILE, O_RDWR);
Ian Kent 5c19ca
 		if (fd < 0) {
Ian Kent 5c19ca
 			/* Maybe the file was just deleted? */
Ian Kent 5c19ca
 			if (errno == ENOENT)
Ian Kent 5c19ca
--- autofs-5.0.3.orig/daemon/indirect.c
Ian Kent 5c19ca
+++ autofs-5.0.3/daemon/indirect.c
Ian Kent 5c19ca
@@ -20,12 +20,10 @@
Ian Kent 5c19ca
  * ----------------------------------------------------------------------- */
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <dirent.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <sys/ioctl.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <sys/wait.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/daemon/lookup.c
Ian Kent 5c19ca
+++ autofs-5.0.3/daemon/lookup.c
Ian Kent 5c19ca
@@ -22,7 +22,6 @@
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include "automount.h"
Ian Kent 5c19ca
 #include "nsswitch.h"
Ian Kent 5c19ca
 
Ian Kent 5c19ca
--- autofs-5.0.3.orig/daemon/module.c
Ian Kent 5c19ca
+++ autofs-5.0.3/daemon/module.c
Ian Kent 5c19ca
@@ -31,7 +31,7 @@ int load_autofs4_module(void)
Ian Kent 5c19ca
 	 * is an older version we will catch it at mount
Ian Kent 5c19ca
 	 * time.
Ian Kent 5c19ca
 	 */
Ian Kent 5c19ca
-	fp = fopen("/proc/filesystems", "r");
Ian Kent 5c19ca
+	fp = open_fopen_r("/proc/filesystems");
Ian Kent 5c19ca
 	if (!fp) {
Ian Kent 5c19ca
 		logerr("cannot open /proc/filesystems\n");
Ian Kent 5c19ca
 		return 0;
Ian Kent 5c19ca
--- autofs-5.0.3.orig/daemon/spawn.c
Ian Kent 5c19ca
+++ autofs-5.0.3/daemon/spawn.c
Ian Kent 5c19ca
@@ -13,7 +13,6 @@
Ian Kent 5c19ca
  *
Ian Kent 5c19ca
  * ----------------------------------------------------------------------- */
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <stdarg.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
@@ -21,7 +20,6 @@
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <dirent.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <time.h>
Ian Kent 5c19ca
 #include <sys/wait.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
@@ -125,7 +123,7 @@ static int do_spawn(unsigned logopt, uns
Ian Kent 5c19ca
 	int ret, status, pipefd[2];
Ian Kent 5c19ca
 	char errbuf[ERRBUFSIZ + 1], *p, *sp;
Ian Kent 5c19ca
 	int errp, errn;
Ian Kent 5c19ca
-	int flags, cancel_state;
Ian Kent 5c19ca
+	int cancel_state;
Ian Kent 5c19ca
 	unsigned int use_lock = options & SPAWN_OPT_LOCK;
Ian Kent 5c19ca
 	unsigned int use_access = options & SPAWN_OPT_ACCESS;
Ian Kent 5c19ca
 	sigset_t allsigs, tmpsig, oldsig;
Ian Kent 5c19ca
@@ -133,7 +131,7 @@ static int do_spawn(unsigned logopt, uns
Ian Kent 5c19ca
 	pid_t euid = 0;
Ian Kent 5c19ca
 	gid_t egid = 0;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if (pipe(pipefd))
Ian Kent 5c19ca
+	if (open_pipe(pipefd))
Ian Kent 5c19ca
 		return -1;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cancel_state);
Ian Kent 5c19ca
@@ -213,11 +211,6 @@ static int do_spawn(unsigned logopt, uns
Ian Kent 5c19ca
 			return -1;
Ian Kent 5c19ca
 		}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-		if ((flags = fcntl(pipefd[0], F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-			flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-			fcntl(pipefd[0], F_SETFD, flags);
Ian Kent 5c19ca
-		}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 		errp = 0;
Ian Kent 5c19ca
 		do {
Ian Kent 5c19ca
 			errn = timed_read(pipefd[0],
Ian Kent 5c19ca
--- autofs-5.0.3.orig/include/automount.h
Ian Kent 5c19ca
+++ autofs-5.0.3/include/automount.h
Ian Kent 5c19ca
@@ -17,6 +17,8 @@
Ian Kent 5c19ca
 #include <pthread.h>
Ian Kent 5c19ca
 #include <sched.h>
Ian Kent 5c19ca
 #include <errno.h>
Ian Kent 5c19ca
+#include <unistd.h>
Ian Kent 5c19ca
+#include <fcntl.h>
Ian Kent 5c19ca
 #include "config.h"
Ian Kent 5c19ca
 #include "list.h"
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -464,5 +466,109 @@ int alarm_start_handler(void);
Ian Kent 5c19ca
 int alarm_add(struct autofs_point *ap, time_t seconds);
Ian Kent 5c19ca
 void alarm_delete(struct autofs_point *ap);
Ian Kent 5c19ca
 
Ian Kent 5c19ca
+/*
Ian Kent 5c19ca
+ * Use CLOEXEC flag for open(), pipe(), fopen() (read-only case) and
Ian Kent 5c19ca
+ * socket() if possible.
Ian Kent 5c19ca
+ */
Ian Kent 5c19ca
+static int cloexec_works;
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+static inline void check_cloexec(int fd)
Ian Kent 5c19ca
+{
Ian Kent 5c19ca
+	if (cloexec_works == 0) {
Ian Kent 5c19ca
+		int fl = fcntl(fd, F_GETFD);
Ian Kent 5c19ca
+		cloexec_works = (fl & FD_CLOEXEC) ? 1 : -1;
Ian Kent 5c19ca
+	}
Ian Kent 5c19ca
+	if (cloexec_works > 0)
Ian Kent 5c19ca
+		return;
Ian Kent 5c19ca
+	fcntl(fd, F_SETFD, FD_CLOEXEC);
Ian Kent 5c19ca
+	return;
Ian Kent 5c19ca
+}
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+static inline int open_fd(const char *path, int flags)
Ian Kent 5c19ca
+{
Ian Kent 5c19ca
+	int fd;
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC)
Ian Kent 5c19ca
+	if (cloexec_works != -1)
Ian Kent 5c19ca
+		flags |= O_CLOEXEC;
Ian Kent 5c19ca
+#endif
Ian Kent 5c19ca
+	fd = open(path, flags);
Ian Kent 5c19ca
+	if (fd == -1)
Ian Kent 5c19ca
+		return -1;
Ian Kent 5c19ca
+	check_cloexec(fd);
Ian Kent 5c19ca
+	return fd;
Ian Kent 5c19ca
+}
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+static inline int open_fd_mode(const char *path, int flags, int mode)
Ian Kent 5c19ca
+{
Ian Kent 5c19ca
+	int fd;
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC)
Ian Kent 5c19ca
+	if (cloexec_works != -1)
Ian Kent 5c19ca
+		flags |= O_CLOEXEC;
Ian Kent 5c19ca
+#endif
Ian Kent 5c19ca
+	fd = open(path, flags, mode);
Ian Kent 5c19ca
+	if (fd == -1)
Ian Kent 5c19ca
+		return -1;
Ian Kent 5c19ca
+	check_cloexec(fd);
Ian Kent 5c19ca
+	return fd;
Ian Kent 5c19ca
+}
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+static inline int open_pipe(int pipefd[2])
Ian Kent 5c19ca
+{
Ian Kent 5c19ca
+	int ret;
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC) && defined(__have_pipe2)
Ian Kent 5c19ca
+	if (cloexec_works != -1) {
Ian Kent 5c19ca
+		ret = pipe2(pipefd, O_CLOEXEC);
Ian Kent 5c19ca
+		if (ret != -1)
Ian Kent 5c19ca
+			return 0;
Ian Kent 5c19ca
+		if (errno != EINVAL)
Ian Kent 5c19ca
+			return -1;
Ian Kent 5c19ca
+	}
Ian Kent 5c19ca
+#endif
Ian Kent 5c19ca
+	ret = pipe(pipefd);
Ian Kent 5c19ca
+	if (ret == -1)
Ian Kent 5c19ca
+		return -1;
Ian Kent 5c19ca
+	check_cloexec(pipefd[0]);
Ian Kent 5c19ca
+	check_cloexec(pipefd[1]);
Ian Kent 5c19ca
+	return 0;
Ian Kent 5c19ca
+}
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+static inline int open_sock(int domain, int type, int protocol)
Ian Kent 5c19ca
+{
Ian Kent 5c19ca
+	int fd;
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+#ifdef SOCK_CLOEXEC
Ian Kent 5c19ca
+	if (cloexec_works != -1)
Ian Kent 5c19ca
+		type |= SOCK_CLOEXEC;
Ian Kent 5c19ca
+#endif
Ian Kent 5c19ca
+	fd = socket(domain, type, protocol);
Ian Kent 5c19ca
+	if (fd == -1)
Ian Kent 5c19ca
+		return -1;
Ian Kent 5c19ca
+	check_cloexec(fd);
Ian Kent 5c19ca
+	return fd;
Ian Kent 5c19ca
+}
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+static inline FILE *open_fopen_r(const char *path)
Ian Kent 5c19ca
+{
Ian Kent 5c19ca
+	FILE *f;
Ian Kent 5c19ca
+
Ian Kent 5c19ca
+#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC)
Ian Kent 5ea9dc
+	if (cloexec_works != -1) {
Ian Kent 5c19ca
+		f = fopen(path, "re");
Ian Kent 5c19ca
+		if (f != NULL) {
Ian Kent 5c19ca
+			check_cloexec(fileno(f));
Ian Kent 5c19ca
+			return f;
Ian Kent 5c19ca
+		}
Ian Kent 5c19ca
+	}
Ian Kent 5c19ca
+#endif
Ian Kent 5c19ca
+	f = fopen(path, "r");
Ian Kent 5c19ca
+	if (f == NULL)
Ian Kent 5c19ca
+		return NULL;
Ian Kent 5c19ca
+	check_cloexec(fileno(f));
Ian Kent 5c19ca
+	return f;
Ian Kent 5c19ca
+}
Ian Kent 5c19ca
+
Ian Kent 5c19ca
 #endif
Ian Kent 5c19ca
 
Ian Kent 5c19ca
--- autofs-5.0.3.orig/include/state.h
Ian Kent 5c19ca
+++ autofs-5.0.3/include/state.h
Ian Kent 5c19ca
@@ -20,7 +20,6 @@
Ian Kent 5c19ca
 #ifndef STATE_H
Ian Kent 5c19ca
 #define STATE_H
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/cache.c
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/cache.c
Ian Kent 5c19ca
@@ -17,10 +17,8 @@
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/defaults.c
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/defaults.c
Ian Kent 5c19ca
@@ -21,6 +21,7 @@
Ian Kent 5c19ca
 #include "defaults.h"
Ian Kent 5c19ca
 #include "lookup_ldap.h"
Ian Kent 5c19ca
 #include "log.h"
Ian Kent 5c19ca
+#include "automount.h"
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #define DEFAULTS_CONFIG_FILE		AUTOFS_CONF_DIR "/autofs"
Ian Kent 5c19ca
 #define MAX_LINE_LEN			256
Ian Kent 5c19ca
@@ -255,7 +256,7 @@ struct list_head *defaults_get_uris(void
Ian Kent 5c19ca
 	char *res;
Ian Kent 5c19ca
 	struct list_head *list;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	f = fopen(DEFAULTS_CONFIG_FILE, "r");
Ian Kent 5c19ca
+	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
Ian Kent 5c19ca
 	if (!f)
Ian Kent 5c19ca
 		return NULL;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -298,7 +299,7 @@ unsigned int defaults_read_config(unsign
Ian Kent 5c19ca
 	char buf[MAX_LINE_LEN];
Ian Kent 5c19ca
 	char *res;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	f = fopen(DEFAULTS_CONFIG_FILE, "r");
Ian Kent 5c19ca
+	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
Ian Kent 5c19ca
 	if (!f)
Ian Kent 5c19ca
 		return 0;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -544,7 +545,7 @@ struct ldap_searchdn *defaults_get_searc
Ian Kent 5c19ca
 	char *res;
Ian Kent 5c19ca
 	struct ldap_searchdn *sdn, *last;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	f = fopen(DEFAULTS_CONFIG_FILE, "r");
Ian Kent 5c19ca
+	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
Ian Kent 5c19ca
 	if (!f)
Ian Kent 5c19ca
 		return NULL;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/log.c
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/log.c
Ian Kent 5c19ca
@@ -20,8 +20,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdarg.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/macros.c
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/macros.c
Ian Kent 5c19ca
@@ -14,7 +14,6 @@
Ian Kent 5c19ca
  * ----------------------------------------------------------------------- */
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <limits.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/mounts.c
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/mounts.c
Ian Kent 5c19ca
@@ -14,13 +14,11 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <mntent.h>
Ian Kent 5c19ca
 #include <limits.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
 #include <sys/ioctl.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <sys/mount.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <dirent.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/nss_parse.y
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/nss_parse.y
Ian Kent 5c19ca
@@ -22,8 +22,6 @@
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <memory.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <limits.h>
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include "automount.h"
Ian Kent 5c19ca
@@ -164,9 +162,9 @@ static void parse_close_nsswitch(void *a
Ian Kent 5c19ca
 int nsswitch_parse(struct list_head *list)
Ian Kent 5c19ca
 {
Ian Kent 5c19ca
 	FILE *nsswitch;
Ian Kent 5c19ca
-	int fd, cl_flags, status;
Ian Kent 5c19ca
+	int status;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	nsswitch = fopen(NSSWITCH_FILE, "r");
Ian Kent 5c19ca
+	nsswitch = open_fopen_r(NSSWITCH_FILE);
Ian Kent 5c19ca
 	if (!nsswitch) {
Ian Kent 5c19ca
 		logerr("couldn't open %s\n", NSSWITCH_FILE);
Ian Kent 5c19ca
 		return 1;
Ian Kent 5c19ca
@@ -174,13 +172,6 @@ int nsswitch_parse(struct list_head *lis
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	pthread_cleanup_push(parse_close_nsswitch, nsswitch);
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	fd = fileno(nsswitch);
Ian Kent 5c19ca
-
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	parse_mutex_lock();
Ian Kent 5c19ca
 	pthread_cleanup_push(parse_mutex_unlock, NULL);
Ian Kent 5c19ca
 
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/parse_subs.c
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/parse_subs.c
Ian Kent 5c19ca
@@ -18,7 +18,6 @@
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include "automount.h"
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 /*
Ian Kent 5c19ca
--- autofs-5.0.3.orig/lib/rpc_subs.c
Ian Kent 5c19ca
+++ autofs-5.0.3/lib/rpc_subs.c
Ian Kent 5c19ca
@@ -21,13 +21,11 @@
Ian Kent 5c19ca
 #include <rpc/rpc.h>
Ian Kent 5c19ca
 #include <rpc/pmap_prot.h>
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <sys/socket.h>
Ian Kent 5c19ca
 #include <netdb.h>
Ian Kent 5c19ca
 #include <net/if.h>
Ian Kent 5c19ca
 #include <netinet/in.h>
Ian Kent 5c19ca
 #include <arpa/inet.h>
Ian Kent 5c19ca
-#include <sys/fcntl.h>
Ian Kent 5c19ca
 #include <rpcsvc/ypclnt.h>
Ian Kent 5c19ca
 #include <errno.h>
Ian Kent 5c19ca
 #include <sys/ioctl.h>
Ian Kent 5c19ca
@@ -36,6 +34,7 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include "mount.h"
Ian Kent 5c19ca
 #include "rpc_subs.h"
Ian Kent 5c19ca
+#include "automount.h"
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 /* #define STANDALONE */
Ian Kent 5c19ca
 #ifdef STANDALONE
Ian Kent 5c19ca
@@ -59,7 +58,7 @@ inline void dump_core(void);
Ian Kent 5c19ca
  */
Ian Kent 5c19ca
 static CLIENT *create_udp_client(struct conn_info *info)
Ian Kent 5c19ca
 {
Ian Kent 5c19ca
-	int fd, cl_flags, ret, ghn_errno;
Ian Kent 5c19ca
+	int fd, ret, ghn_errno;
Ian Kent 5c19ca
 	CLIENT *client;
Ian Kent 5c19ca
 	struct sockaddr_in laddr, raddr;
Ian Kent 5c19ca
 	struct hostent hp;
Ian Kent 5c19ca
@@ -115,15 +114,10 @@ got_addr:
Ian Kent 5c19ca
 		 * layer, it would bind to a reserved port, which has been shown
Ian Kent 5c19ca
 		 * to exhaust the reserved port range in some situations.
Ian Kent 5c19ca
 		 */
Ian Kent 5c19ca
-		fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
Ian Kent 5c19ca
+		fd = open_sock(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
Ian Kent 5c19ca
 		if (fd < 0)
Ian Kent 5c19ca
 			return NULL;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-		if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-			cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-			fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-		}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 		laddr.sin_family = AF_INET;
Ian Kent 5c19ca
 		laddr.sin_port = 0;
Ian Kent 5c19ca
 		laddr.sin_addr.s_addr = htonl(INADDR_ANY);
Ian Kent 5c19ca
@@ -274,7 +268,7 @@ done:
Ian Kent 5c19ca
  */
Ian Kent 5c19ca
 static CLIENT *create_tcp_client(struct conn_info *info)
Ian Kent 5c19ca
 {
Ian Kent 5c19ca
-	int fd, cl_flags, ghn_errno;
Ian Kent 5c19ca
+	int fd, ghn_errno;
Ian Kent 5c19ca
 	CLIENT *client;
Ian Kent 5c19ca
 	struct sockaddr_in addr;
Ian Kent 5c19ca
 	struct hostent hp;
Ian Kent 5c19ca
@@ -324,15 +318,10 @@ got_addr:
Ian Kent 5c19ca
 	addr.sin_port = htons(info->port);
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	if (!info->client) {
Ian Kent 5c19ca
-		fd = socket(PF_INET, SOCK_STREAM, info->proto->p_proto);
Ian Kent 5c19ca
+		fd = open_sock(PF_INET, SOCK_STREAM, info->proto->p_proto);
Ian Kent 5c19ca
 		if (fd < 0)
Ian Kent 5c19ca
 			return NULL;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-		if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-			cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-			fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-		}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 		ret = connect_nb(fd, &addr, &info->timeout);
Ian Kent 5c19ca
 		if (ret < 0)
Ian Kent 5c19ca
 			goto out_close;
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/cyrus-sasl.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/cyrus-sasl.c
Ian Kent 5c19ca
@@ -51,7 +51,6 @@
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <ldap.h>
Ian Kent 5c19ca
 #include <sasl/sasl.h>
Ian Kent 5c19ca
 
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_file.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_file.c
Ian Kent 5c19ca
@@ -17,8 +17,6 @@
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 #include <time.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
@@ -395,7 +393,7 @@ int lookup_read_master(struct master *ma
Ian Kent 5c19ca
 	char *ent;
Ian Kent 5c19ca
 	struct stat st;
Ian Kent 5c19ca
 	FILE *f;
Ian Kent 5c19ca
-	int fd, cl_flags;
Ian Kent 5c19ca
+	int fd;
Ian Kent 5c19ca
 	unsigned int path_len, ent_len;
Ian Kent 5c19ca
 	int entry, cur_state;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -422,7 +420,7 @@ int lookup_read_master(struct master *ma
Ian Kent 5c19ca
 		return NSS_STATUS_UNAVAIL;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	f = fopen(ctxt->mapname, "r");
Ian Kent 5c19ca
+	f = open_fopen_r(ctxt->mapname);
Ian Kent 5c19ca
 	if (!f) {
Ian Kent 5c19ca
 		error(logopt,
Ian Kent 5c19ca
 		      MODPREFIX "could not open master map file %s",
Ian Kent 5c19ca
@@ -432,11 +430,6 @@ int lookup_read_master(struct master *ma
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	fd = fileno(f);
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	while(1) {
Ian Kent 5c19ca
 		entry = read_one(logopt, f, path, &path_len, ent, &ent_len);
Ian Kent 5c19ca
 		if (!entry) {
Ian Kent 5c19ca
@@ -651,7 +644,7 @@ int lookup_read_map(struct autofs_point 
Ian Kent 5c19ca
 	char *mapent;
Ian Kent 5c19ca
 	struct stat st;
Ian Kent 5c19ca
 	FILE *f;
Ian Kent 5c19ca
-	int fd, cl_flags;
Ian Kent 5c19ca
+	int fd;
Ian Kent 5c19ca
 	unsigned int k_len, m_len;
Ian Kent 5c19ca
 	int entry;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -684,7 +677,7 @@ int lookup_read_map(struct autofs_point 
Ian Kent 5c19ca
 		return NSS_STATUS_UNAVAIL;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	f = fopen(ctxt->mapname, "r");
Ian Kent 5c19ca
+	f = open_fopen_r(ctxt->mapname);
Ian Kent 5c19ca
 	if (!f) {
Ian Kent 5c19ca
 		error(ap->logopt,
Ian Kent 5c19ca
 		      MODPREFIX "could not open map file %s", ctxt->mapname);
Ian Kent 5c19ca
@@ -693,11 +686,6 @@ int lookup_read_map(struct autofs_point 
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	fd = fileno(f);
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	while(1) {
Ian Kent 5c19ca
 		entry = read_one(ap->logopt, f, key, &k_len, mapent, &m_len);
Ian Kent 5c19ca
 		if (!entry) {
Ian Kent 5c19ca
@@ -784,7 +772,6 @@ static int lookup_one(struct autofs_poin
Ian Kent 5c19ca
 	char mapent[MAPENT_MAX_LEN + 1];
Ian Kent 5c19ca
 	time_t age = time(NULL);
Ian Kent 5c19ca
 	FILE *f;
Ian Kent 5c19ca
-	int fd, cl_flags;
Ian Kent 5c19ca
 	unsigned int k_len, m_len;
Ian Kent 5c19ca
 	int entry, ret;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -794,20 +781,13 @@ static int lookup_one(struct autofs_poin
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	mc = source->mc;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	f = fopen(ctxt->mapname, "r");
Ian Kent 5c19ca
+	f = open_fopen_r(ctxt->mapname);
Ian Kent 5c19ca
 	if (!f) {
Ian Kent 5c19ca
 		error(ap->logopt,
Ian Kent 5c19ca
 		      MODPREFIX "could not open map file %s", ctxt->mapname);
Ian Kent 5c19ca
 		return CHE_FAIL;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	fd = fileno(f);
Ian Kent 5c19ca
-
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	while(1) {
Ian Kent 5c19ca
 		entry = read_one(ap->logopt, f, mkey, &k_len, mapent, &m_len);
Ian Kent 5c19ca
 		if (entry) {
Ian Kent 5c19ca
@@ -897,7 +877,6 @@ static int lookup_wild(struct autofs_poi
Ian Kent 5c19ca
 	char mapent[MAPENT_MAX_LEN + 1];
Ian Kent 5c19ca
 	time_t age = time(NULL);
Ian Kent 5c19ca
 	FILE *f;
Ian Kent 5c19ca
-	int fd, cl_flags;
Ian Kent 5c19ca
 	unsigned int k_len, m_len;
Ian Kent 5c19ca
 	int entry, ret;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
@@ -907,20 +886,13 @@ static int lookup_wild(struct autofs_poi
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	mc = source->mc;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	f = fopen(ctxt->mapname, "r");
Ian Kent 5c19ca
+	f = open_fopen_r(ctxt->mapname);
Ian Kent 5c19ca
 	if (!f) {
Ian Kent 5c19ca
 		error(ap->logopt,
Ian Kent 5c19ca
 		      MODPREFIX "could not open map file %s", ctxt->mapname);
Ian Kent 5c19ca
 		return CHE_FAIL;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	fd = fileno(f);
Ian Kent 5c19ca
-
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	while(1) {
Ian Kent 5c19ca
 		entry = read_one(ap->logopt, f, mkey, &k_len, mapent, &m_len);
Ian Kent 5c19ca
 		if (entry) {
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_hesiod.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_hesiod.c
Ian Kent 5c19ca
@@ -10,7 +10,6 @@
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
 #include <limits.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <netinet/in.h>
Ian Kent 5c19ca
 #include <arpa/nameser.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_hosts.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_hosts.c
Ian Kent 5c19ca
@@ -15,7 +15,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_ldap.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_ldap.c
Ian Kent 5c19ca
@@ -21,7 +21,6 @@
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <time.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_multi.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_multi.c
Ian Kent 5c19ca
@@ -18,7 +18,6 @@
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #define MODULE_LOOKUP
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_nisplus.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_nisplus.c
Ian Kent 5c19ca
@@ -6,7 +6,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_program.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_program.c
Ian Kent 5c19ca
@@ -18,7 +18,6 @@
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
 #include <sys/stat.h>
Ian Kent 5c19ca
@@ -193,12 +192,12 @@ int lookup_mount(struct autofs_point *ap
Ian Kent 5c19ca
 	 * want to send stderr to the syslog, and we don't use spawnl()
Ian Kent 5c19ca
 	 * because we need the pipe hooks
Ian Kent 5c19ca
 	 */
Ian Kent 5c19ca
-	if (pipe(pipefd)) {
Ian Kent 5c19ca
+	if (open_pipe(pipefd)) {
Ian Kent 5c19ca
 		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
Ian Kent 5c19ca
 		logerr(MODPREFIX "pipe: %s", estr);
Ian Kent 5c19ca
 		goto out_free;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
-	if (pipe(epipefd)) {
Ian Kent 5c19ca
+	if (open_pipe(epipefd)) {
Ian Kent 5c19ca
 		close(pipefd[0]);
Ian Kent 5c19ca
 		close(pipefd[1]);
Ian Kent 5c19ca
 		goto out_free;
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_userhome.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_userhome.c
Ian Kent 5c19ca
@@ -16,7 +16,6 @@
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
 #include <pwd.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/lookup_yp.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/lookup_yp.c
Ian Kent 5c19ca
@@ -16,7 +16,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <time.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/mount_afs.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/mount_afs.c
Ian Kent 5c19ca
@@ -9,8 +9,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/mount_autofs.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/mount_autofs.c
Ian Kent 5c19ca
@@ -16,8 +16,6 @@
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <signal.h>
Ian Kent 5c19ca
 #include <alloca.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/mount_bind.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/mount_bind.c
Ian Kent 5c19ca
@@ -15,8 +15,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/mount_changer.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/mount_changer.c
Ian Kent 5c19ca
@@ -19,8 +19,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
@@ -142,25 +140,19 @@ int swapCD(const char *device, const cha
Ian Kent 5c19ca
 {
Ian Kent 5c19ca
 	int fd;			/* file descriptor for CD-ROM device */
Ian Kent 5c19ca
 	int status;		/* return status for system calls */
Ian Kent 5c19ca
-	int cl_flags;
Ian Kent 5c19ca
 	int slot = -1;
Ian Kent 5c19ca
 	int total_slots_available;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	slot = atoi(slotName) - 1;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	/* open device */
Ian Kent 5c19ca
-	fd = open(device, O_RDONLY | O_NONBLOCK);
Ian Kent 5c19ca
+	fd = open_fd(device, O_RDONLY | O_NONBLOCK);
Ian Kent 5c19ca
 	if (fd < 0) {
Ian Kent 5c19ca
 		logerr(MODPREFIX "Opening device %s failed : %s",
Ian Kent 5c19ca
 		      device, strerror(errno));
Ian Kent 5c19ca
 		return 1;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(fd, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	/* Check CD player status */
Ian Kent 5c19ca
 	total_slots_available = ioctl(fd, CDROM_CHANGER_NSLOTS);
Ian Kent 5c19ca
 	if (total_slots_available <= 1) {
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/mount_ext2.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/mount_ext2.c
Ian Kent 5c19ca
@@ -15,8 +15,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/mount_generic.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/mount_generic.c
Ian Kent 5c19ca
@@ -15,8 +15,6 @@
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/mount_nfs.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/mount_nfs.c
Ian Kent 5c19ca
@@ -17,8 +17,6 @@
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
 #include <netdb.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <sys/param.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/parse_hesiod.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/parse_hesiod.c
Ian Kent 5c19ca
@@ -7,7 +7,6 @@
Ian Kent 5c19ca
 #include <sys/types.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <netinet/in.h>
Ian Kent 5c19ca
 #include <arpa/nameser.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/parse_sun.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/parse_sun.c
Ian Kent 5c19ca
@@ -18,8 +18,6 @@
Ian Kent 5c19ca
 #include <stdio.h>
Ian Kent 5c19ca
 #include <malloc.h>
Ian Kent 5c19ca
 #include <netdb.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
 #include <stdlib.h>
Ian Kent 5c19ca
 #include <string.h>
Ian Kent 5c19ca
 #include <ctype.h>
Ian Kent 5c19ca
--- autofs-5.0.3.orig/modules/replicated.c
Ian Kent 5c19ca
+++ autofs-5.0.3/modules/replicated.c
Ian Kent 5c19ca
@@ -52,8 +52,6 @@
Ian Kent 5c19ca
 #include <net/if.h>
Ian Kent 5c19ca
 #include <netinet/in.h>
Ian Kent 5c19ca
 #include <netdb.h>
Ian Kent 5c19ca
-#include <unistd.h>
Ian Kent 5c19ca
-#include <fcntl.h>
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 #include "rpc_subs.h"
Ian Kent 5c19ca
 #include "replicated.h"
Ian Kent 5c19ca
@@ -82,7 +80,7 @@ void seed_random(void)
Ian Kent 5c19ca
 	int fd;
Ian Kent 5c19ca
 	unsigned int seed;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	fd = open("/dev/urandom", O_RDONLY);
Ian Kent 5c19ca
+	fd = open_fd("/dev/urandom", O_RDONLY);
Ian Kent 5c19ca
 	if (fd < 0) {
Ian Kent 5c19ca
 		srandom(time(NULL));
Ian Kent 5c19ca
 		return;
Ian Kent 5c19ca
@@ -145,7 +143,7 @@ static unsigned int get_proximity(const 
Ian Kent 5c19ca
 	char tmp[20], buf[MAX_ERR_BUF], *ptr;
Ian Kent 5c19ca
 	struct ifconf ifc;
Ian Kent 5c19ca
 	struct ifreq *ifr, nmptr;
Ian Kent 5c19ca
-	int sock, cl_flags, ret, i;
Ian Kent 5c19ca
+	int sock, ret, i;
Ian Kent 5c19ca
 	uint32_t mask, ha, ia;
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	memcpy(tmp, host_addr, addr_len);
Ian Kent 5c19ca
@@ -153,18 +151,13 @@ static unsigned int get_proximity(const 
Ian Kent 5c19ca
 
Ian Kent 5c19ca
 	ha = ntohl((uint32_t) hst_addr->s_addr);
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	sock = socket(AF_INET, SOCK_DGRAM, 0);
Ian Kent 5c19ca
+	sock = open_sock(AF_INET, SOCK_DGRAM, 0);
Ian Kent 5c19ca
 	if (sock < 0) {
Ian Kent 5c19ca
 		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
Ian Kent 5c19ca
 		logerr("socket creation failed: %s", estr);
Ian Kent 5c19ca
 		return PROXIMITY_ERROR;
Ian Kent 5c19ca
 	}
Ian Kent 5c19ca
 
Ian Kent 5c19ca
-	if ((cl_flags = fcntl(sock, F_GETFD, 0)) != -1) {
Ian Kent 5c19ca
-		cl_flags |= FD_CLOEXEC;
Ian Kent 5c19ca
-		fcntl(sock, F_SETFD, cl_flags);
Ian Kent 5c19ca
-	}
Ian Kent 5c19ca
-
Ian Kent 5c19ca
 	if (!alloc_ifreq(&ifc, sock)) {
Ian Kent 5c19ca
 		close(sock);
Ian Kent 5c19ca
 		return PROXIMITY_ERROR;