On Tue, 2008-04-01 at 16:27 -0400, Jeff Moyer wrote:
> Hi, Ian,
> 
> We set the close on exec flag all over the place.  This patch just
> cleans things up a bit.

Yep, good idea.

I would like to postpone this till after the mount control work is done
because a number of these will be moved to the single open routine.

> 
>  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

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

Reply via email to