Hi, Ian,

We set the close on exec flag all over the place.  This patch just
cleans things up a bit.

 daemon/automount.c      |   27 ++++---------------------
 daemon/direct.c         |   50 ++++++++++++------------------------------------
 daemon/indirect.c       |    7 +-----
 include/automount.h     |   13 +++++++++++-
 lib/nss_parse.y         |    7 +-----
 lib/rpc_subs.c          |   14 +++----------
 modules/lookup_file.c   |   28 +++++++-------------------
 modules/mount_changer.c |    6 -----
 modules/replicated.c    |    7 +-----
 9 files changed, 49 insertions(+), 110 deletions(-)

Cheers,

Jeff

diff --git a/daemon/automount.c b/daemon/automount.c
index f31ec11..3590292 100644
--- a/daemon/automount.c
+++ b/daemon/automount.c
@@ -725,10 +725,7 @@ static int create_logpri_fifo(struct autofs_point *ap)
                goto out_free;
        }
 
-       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(fd, F_SETFD, cl_flags);
-       }
+       set_cloexec(fd);
 
        ap->logpri_fifo = fd;
 
@@ -1015,15 +1012,8 @@ static int autofs_init_ap(struct autofs_point *ap)
        ap->pipefd = pipefd[0];
        ap->kpipefd = pipefd[1];
 
-       if ((cl_flags = fcntl(ap->pipefd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ap->pipefd, F_SETFD, cl_flags);
-       }
-
-       if ((cl_flags = fcntl(ap->kpipefd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ap->kpipefd, F_SETFD, cl_flags);
-       }
+       set_cloexec(ap->pipefd);
+       set_cloexec(ap->kpipefd);
 
        /* Pipe state changes from signal handler to main loop */
        if (pipe(ap->state_pipe) < 0) {
@@ -1034,15 +1024,8 @@ static int autofs_init_ap(struct autofs_point *ap)
                return -1;
        }
 
-       if ((cl_flags = fcntl(ap->state_pipe[0], F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ap->state_pipe[0], F_SETFD, cl_flags);
-       }
-
-       if ((cl_flags = fcntl(ap->state_pipe[1], F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ap->state_pipe[1], F_SETFD, cl_flags);
-       }
+       set_cloexec(ap->state_pipe[0]);
+       set_cloexec(ap->state_pipe[1]);
 
        if (create_logpri_fifo(ap) < 0) {
                logmsg("could not create FIFO for path %s\n", ap->path);
diff --git a/daemon/direct.c b/daemon/direct.c
index 619efce..85735fc 100644
--- a/daemon/direct.c
+++ b/daemon/direct.c
@@ -107,15 +107,9 @@ int do_umount_autofs_direct(struct autofs_point *ap, 
struct mnt_list *mnts, stru
                }
                ioctlfd = me->ioctlfd;
        } else {
-               int cl_flags;
-
                ioctlfd = open(me->key, O_RDONLY);
-               if (ioctlfd != -1) {
-                       if ((cl_flags = fcntl(ioctlfd, F_GETFD, 0)) != -1) {
-                               cl_flags |= FD_CLOEXEC;
-                               fcntl(ioctlfd, F_SETFD, cl_flags);
-                       }
-               }
+               if (ioctlfd != -1)
+                       set_cloexec(ioctlfd);
        }
 
 
@@ -300,7 +294,7 @@ int do_mount_autofs_direct(struct autofs_point *ap, struct 
mnt_list *mnts, struc
        struct mnt_params *mp;
        time_t timeout = ap->exp_timeout;
        struct stat st;
-       int status, ret, ioctlfd, cl_flags;
+       int status, ret, ioctlfd;
        struct list_head list;
        const char *map_name;
 
@@ -315,13 +309,8 @@ int do_mount_autofs_direct(struct autofs_point *ap, struct 
mnt_list *mnts, struc
 
                        if (ioctlfd == -1) {
                                ioctlfd = open(me->key, O_RDONLY);
-                               if (ioctlfd != -1) {
-                                       cl_flags = fcntl(ioctlfd, F_GETFD, 0);
-                                       if (cl_flags != -1) {
-                                               cl_flags |= FD_CLOEXEC;
-                                               fcntl(ioctlfd, F_SETFD, 
cl_flags);
-                                       }
-                               }
+                               if (ioctlfd != -1)
+                                       set_cloexec(ioctlfd);
                        }
 
                        if (ioctlfd < 0) {
@@ -409,10 +398,7 @@ int do_mount_autofs_direct(struct autofs_point *ap, struct 
mnt_list *mnts, struc
                goto out_umount;
        }
 
-       if ((cl_flags = fcntl(ioctlfd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ioctlfd, F_SETFD, cl_flags);
-       }
+       set_cloexec(ioctlfd);
 
        /* Calculate the timeouts */
        ap->exp_runfreq = (timeout + CHECK_RATIO - 1) / CHECK_RATIO;
@@ -538,7 +524,7 @@ int mount_autofs_direct(struct autofs_point *ap)
 int umount_autofs_offset(struct autofs_point *ap, struct mapent *me)
 {
        char buf[MAX_ERR_BUF];
-       int ioctlfd, cl_flags, rv = 1, retries;
+       int ioctlfd, rv = 1, retries;
 
        if (me->ioctlfd != -1) {
                if (is_mounted(_PATH_MOUNTED, me->key, MNTS_REAL)) {
@@ -557,12 +543,8 @@ int umount_autofs_offset(struct autofs_point *ap, struct 
mapent *me)
                }
 
                ioctlfd = open(me->key, O_RDONLY);
-               if (ioctlfd != -1) {
-                       if ((cl_flags = fcntl(ioctlfd, F_GETFD, 0)) != -1) {
-                               cl_flags |= FD_CLOEXEC;
-                               fcntl(ioctlfd, F_SETFD, cl_flags);
-                       }
-               }
+               if (ioctlfd != -1)
+                       set_cloexec(ioctlfd);
        }
 
        if (ioctlfd >= 0) {
@@ -657,7 +639,7 @@ int mount_autofs_offset(struct autofs_point *ap, struct 
mapent *me)
        struct mnt_params *mp;
        time_t timeout = ap->exp_timeout;
        struct stat st;
-       int ioctlfd, cl_flags, status, ret;
+       int ioctlfd, status, ret;
        const char *type, *map_name = NULL;
 
        if (is_mounted(_PROC_MOUNTS, me->key, MNTS_AUTOFS)) {
@@ -767,10 +749,7 @@ int mount_autofs_offset(struct autofs_point *ap, struct 
mapent *me)
                goto out_umount;
        }
 
-       if ((cl_flags = fcntl(ioctlfd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ioctlfd, F_SETFD, cl_flags);
-       }
+       set_cloexec(ioctlfd);
 
        ioctl(ioctlfd, AUTOFS_IOC_SETTIMEOUT, &timeout);
 
@@ -1433,7 +1412,7 @@ int handle_packet_missing_direct(struct autofs_point *ap, 
autofs_packet_missing_
        struct pending_args *mt;
        char buf[MAX_ERR_BUF];
        int status = 0;
-       int ioctlfd, cl_flags, state;
+       int ioctlfd, state;
 
        pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &state);
 
@@ -1485,10 +1464,7 @@ int handle_packet_missing_direct(struct autofs_point 
*ap, autofs_packet_missing_
                return 1;
        }
 
-       if ((cl_flags = fcntl(ioctlfd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ioctlfd, F_SETFD, cl_flags);
-       }
+       set_cloexec(ioctlfd);
 
        debug(ap->logopt, "token %ld, name %s, request pid %u",
                  (unsigned long) pkt->wait_queue_token, me->key, pkt->pid);
diff --git a/daemon/indirect.c b/daemon/indirect.c
index f6b93d0..09b0d7c 100644
--- a/daemon/indirect.c
+++ b/daemon/indirect.c
@@ -93,7 +93,7 @@ static int do_mount_autofs_indirect(struct autofs_point *ap)
        const char *type, *map_name = NULL;
        struct stat st;
        struct mnt_list *mnts;
-       int cl_flags, ret;
+       int ret;
 
        mnts = get_mnt_list(_PROC_MOUNTS, ap->path, 1);
        if (mnts) {
@@ -155,10 +155,7 @@ static int do_mount_autofs_indirect(struct autofs_point 
*ap)
                goto out_umount;
        }
 
-       if ((cl_flags = fcntl(ap->ioctlfd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(ap->ioctlfd, F_SETFD, cl_flags);
-       }
+       set_cloexec(ap->ioctlfd);
 
        ap->exp_runfreq = (timeout + CHECK_RATIO - 1) / CHECK_RATIO;
 
diff --git a/include/automount.h b/include/automount.h
index 133fd32..3cf1b99 100644
--- a/include/automount.h
+++ b/include/automount.h
@@ -17,6 +17,8 @@
 #include <pthread.h>
 #include <sched.h>
 #include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
 #include "config.h"
 #include "list.h"
 
@@ -524,5 +526,14 @@ int alarm_start_handler(void);
 int alarm_add(struct autofs_point *ap, time_t seconds);
 void alarm_delete(struct autofs_point *ap);
 
-#endif
+static inline void set_cloexec(int fd)
+{
+       int cl_flags;
+
+       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
+               cl_flags |= FD_CLOEXEC;
+               fcntl(fd, F_SETFD, cl_flags);
+       }
+}
 
+#endif
diff --git a/lib/nss_parse.y b/lib/nss_parse.y
index 90b7d25..7c14d5e 100644
--- a/lib/nss_parse.y
+++ b/lib/nss_parse.y
@@ -163,7 +163,7 @@ static void parse_close_nsswitch(void *arg)
 int nsswitch_parse(struct list_head *list)
 {
        FILE *nsswitch;
-       int fd, cl_flags, status;
+       int fd, status;
 
        nsswitch = fopen(NSSWITCH_FILE, "r");
        if (!nsswitch) {
@@ -175,10 +175,7 @@ int nsswitch_parse(struct list_head *list)
 
        fd = fileno(nsswitch);
 
-       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(fd, F_SETFD, cl_flags);
-       }
+       set_cloexec(fd);
 
        parse_mutex_lock();
        pthread_cleanup_push(parse_mutex_unlock, NULL);
diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
index 5797639..f2c5f80 100644
--- a/lib/rpc_subs.c
+++ b/lib/rpc_subs.c
@@ -59,7 +59,7 @@ inline void dump_core(void);
  */
 static CLIENT *create_udp_client(struct conn_info *info)
 {
-       int fd, cl_flags, ret, ghn_errno;
+       int fd, ret, ghn_errno;
        CLIENT *client;
        struct sockaddr_in laddr, raddr;
        struct hostent hp;
@@ -114,10 +114,7 @@ got_addr:
                if (fd < 0)
                        return NULL;
 
-               if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-                       cl_flags |= FD_CLOEXEC;
-                       fcntl(fd, F_SETFD, cl_flags);
-               }
+               set_cloexec(fd);
 
                laddr.sin_family = AF_INET;
                laddr.sin_port = 0;
@@ -269,7 +266,7 @@ done:
  */
 static CLIENT *create_tcp_client(struct conn_info *info)
 {
-       int fd, cl_flags, ghn_errno;
+       int fd, ghn_errno;
        CLIENT *client;
        struct sockaddr_in addr;
        struct hostent hp;
@@ -318,10 +315,7 @@ got_addr:
                if (fd < 0)
                        return NULL;
 
-               if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-                       cl_flags |= FD_CLOEXEC;
-                       fcntl(fd, F_SETFD, cl_flags);
-               }
+               set_cloexec(fd);
 
                ret = connect_nb(fd, &addr, &info->timeout);
                if (ret < 0)
diff --git a/modules/lookup_file.c b/modules/lookup_file.c
index a77068a..331f543 100644
--- a/modules/lookup_file.c
+++ b/modules/lookup_file.c
@@ -395,7 +395,7 @@ int lookup_read_master(struct master *master, time_t age, 
void *context)
        char *ent;
        struct stat st;
        FILE *f;
-       int fd, cl_flags;
+       int fd;
        unsigned int path_len, ent_len;
        int entry, cur_state;
 
@@ -432,10 +432,7 @@ int lookup_read_master(struct master *master, time_t age, 
void *context)
 
        fd = fileno(f);
 
-       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(fd, F_SETFD, cl_flags);
-       }
+       set_cloexec(fd);
 
        while(1) {
                entry = read_one(logopt, f, path, &path_len, ent, &ent_len);
@@ -640,7 +637,7 @@ int lookup_read_map(struct autofs_point *ap, time_t age, 
void *context)
        char *mapent;
        struct stat st;
        FILE *f;
-       int fd, cl_flags;
+       int fd;
        unsigned int k_len, m_len;
        int entry;
 
@@ -682,10 +679,7 @@ int lookup_read_map(struct autofs_point *ap, time_t age, 
void *context)
 
        fd = fileno(f);
 
-       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(fd, F_SETFD, cl_flags);
-       }
+       set_cloexec(fd);
 
        while(1) {
                entry = read_one(ap->logopt, f, key, &k_len, mapent, &m_len);
@@ -773,7 +767,7 @@ static int lookup_one(struct autofs_point *ap,
        char mapent[MAPENT_MAX_LEN + 1];
        time_t age = time(NULL);
        FILE *f;
-       int fd, cl_flags;
+       int fd;
        unsigned int k_len, m_len;
        int entry, ret;
 
@@ -792,10 +786,7 @@ static int lookup_one(struct autofs_point *ap,
 
        fd = fileno(f);
 
-       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(fd, F_SETFD, cl_flags);
-       }
+       set_cloexec(fd);
 
        while(1) {
                entry = read_one(ap->logopt, f, mkey, &k_len, mapent, &m_len);
@@ -886,7 +877,7 @@ static int lookup_wild(struct autofs_point *ap, struct 
lookup_context *ctxt)
        char mapent[MAPENT_MAX_LEN + 1];
        time_t age = time(NULL);
        FILE *f;
-       int fd, cl_flags;
+       int fd;
        unsigned int k_len, m_len;
        int entry, ret;
 
@@ -905,10 +896,7 @@ static int lookup_wild(struct autofs_point *ap, struct 
lookup_context *ctxt)
 
        fd = fileno(f);
 
-       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(fd, F_SETFD, cl_flags);
-       }
+       set_cloexec(fd);
 
        while(1) {
                entry = read_one(ap->logopt, f, mkey, &k_len, mapent, &m_len);
diff --git a/modules/mount_changer.c b/modules/mount_changer.c
index 08d9147..148a88e 100644
--- a/modules/mount_changer.c
+++ b/modules/mount_changer.c
@@ -152,7 +152,6 @@ int swapCD(const char *device, const char *slotName)
 {
        int fd;                 /* file descriptor for CD-ROM device */
        int status;             /* return status for system calls */
-       int cl_flags;
        int slot = -1;
        int total_slots_available;
 
@@ -166,10 +165,7 @@ int swapCD(const char *device, const char *slotName)
                return 1;
        }
 
-       if ((cl_flags = fcntl(fd, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(fd, F_SETFD, cl_flags);
-       }
+       set_cloexec(fd);
 
        /* Check CD player status */
        total_slots_available = ioctl(fd, CDROM_CHANGER_NSLOTS);
diff --git a/modules/replicated.c b/modules/replicated.c
index 90b2925..17062b5 100644
--- a/modules/replicated.c
+++ b/modules/replicated.c
@@ -102,7 +102,7 @@ static unsigned int get_proximity(const char *host_addr, 
int addr_len)
        char tmp[20], buf[MAX_ERR_BUF], *ptr;
        struct ifconf ifc;
        struct ifreq *ifr, nmptr;
-       int sock, cl_flags, ret, i;
+       int sock, ret, i;
        uint32_t mask, ha, ia;
 
        memcpy(tmp, host_addr, addr_len);
@@ -117,10 +117,7 @@ static unsigned int get_proximity(const char *host_addr, 
int addr_len)
                return PROXIMITY_ERROR;
        }
 
-       if ((cl_flags = fcntl(sock, F_GETFD, 0)) != -1) {
-               cl_flags |= FD_CLOEXEC;
-               fcntl(sock, F_SETFD, cl_flags);
-       }
+       set_cloexec(sock);
 
        ifc.ifc_len = sizeof(buf);
        ifc.ifc_req = (struct ifreq *) buf;

_______________________________________________
autofs mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to