From: Roy Marples Date: Sat, 9 Feb 2008 21:58:05 +0000 (+0000) Subject: We should only have one bit of code to mark sockets close_on_exec. X-Git-Tag: v3.2.3~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca1e79c0f854186ce84eb0526e9a29bbb0d0c084;p=thirdparty%2Fdhcpcd.git We should only have one bit of code to mark sockets close_on_exec. --- diff --git a/client.c b/client.c index aa8d709a..2975ac85 100644 --- a/client.c +++ b/client.c @@ -38,7 +38,6 @@ #endif #include #include -#include #include #include #include diff --git a/common.c b/common.c index 5d5bacfb..8860ec69 100644 --- a/common.c +++ b/common.c @@ -114,13 +114,13 @@ size_t strlcpy (char *dst, const char *src, size_t size) #endif /* Close our fd's */ -void close_fds (void) +int close_fds (void) { int fd; if ((fd = open ("/dev/null", O_RDWR)) == -1) { logger (LOG_ERR, "open `/dev/null': %s", strerror (errno)); - return; + return (-1); } dup2 (fd, fileno (stdin)); @@ -128,6 +128,20 @@ void close_fds (void) dup2 (fd, fileno (stderr)); if (fd > 2) close (fd); + return (0); +} + +int close_on_exec (int fd) +{ + int flags; + + if ((flags = fcntl (fd, F_GETFD, 0)) == -1 + || fcntl (fd, F_SETFD, flags | FD_CLOEXEC) == -1) + { + logger (LOG_ERR, "fcntl: %s", strerror (errno)); + return (-1); + } + return (0); } /* Handy function to get the time. diff --git a/common.h b/common.h index 4b26318b..0a59a75a 100644 --- a/common.h +++ b/common.h @@ -52,7 +52,8 @@ size_t strlcpy (char *dst, const char *src, size_t size); void srandomdev (void); #endif -void close_fds (void); +int close_fds (void); +int close_on_exec (int fd); char *get_line (FILE *fp); int get_time (struct timeval *tp); time_t uptime (void); diff --git a/dhcp.c b/dhcp.c index 9d81d43b..8620c5be 100644 --- a/dhcp.c +++ b/dhcp.c @@ -398,8 +398,8 @@ static unsigned int decode_search (const unsigned char *p, int len, char *out) static route_t *decode_CSR(const unsigned char *p, int len) { const unsigned char *q = p; - int cidr; - int ocets; + unsigned int cidr; + unsigned int ocets; route_t *first; route_t *route; diff --git a/signal.c b/signal.c index b68375c7..c9430e1c 100644 --- a/signal.c +++ b/signal.c @@ -29,11 +29,11 @@ #include #include #include -#include #include #include #include +#include "common.h" #include "logger.h" #include "signal.h" @@ -127,8 +127,6 @@ int signal_read (fd_set *rset) * and installs the signal handler */ int signal_init (void) { - unsigned int i; - int flags; struct sigaction sa; if (pipe (signal_pipe) == -1) { @@ -137,10 +135,8 @@ int signal_init (void) } /* Stop any scripts from inheriting us */ - for (i = 0; i < 2; i++) - if ((flags = fcntl (signal_pipe[i], F_GETFD, 0)) == -1 || - fcntl (signal_pipe[i], F_SETFD, flags | FD_CLOEXEC) == -1) - logger (LOG_ERR ,"fcntl: %s", strerror (errno)); + close_on_exec (signal_pipe[0]); + close_on_exec (signal_pipe[1]); /* Ignore child signals and don't make zombies. * Because we do this, we don't need to be in signal_setup */ diff --git a/socket.c b/socket.c index f35c69d2..814d051b 100644 --- a/socket.c +++ b/socket.c @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -280,13 +279,7 @@ int open_socket (interface_t *iface, int protocol) return -1; } - if ((flags = fcntl (fd, F_GETFD, 0)) == -1 - || fcntl (fd, F_SETFD, flags | FD_CLOEXEC) == -1) - { - logger (LOG_ERR, "fcntl: %s", strerror (errno)); - close (fd); - return -1; - } + close_on_exec (fd); memset (&ifr, 0, sizeof (ifr)); strlcpy (ifr.ifr_name, iface->name, sizeof (ifr.ifr_name)); @@ -457,7 +450,6 @@ ssize_t get_packet (const interface_t *iface, unsigned char *data, int open_socket (interface_t *iface, int protocol) { int fd; - int flags; union sockunion { struct sockaddr sa; struct sockaddr_ll sll; @@ -470,13 +462,7 @@ int open_socket (interface_t *iface, int protocol) return (-1); } - if ((flags = fcntl (fd, F_GETFD, 0)) == -1 - || fcntl (fd, F_SETFD, flags | FD_CLOEXEC) == -1) - { - logger (LOG_ERR, "fcntl: %s", strerror (errno)); - close (fd); - return (-1); - } + close_on_exec (fd); memset (&su, 0, sizeof (su)); su.sll.sll_family = PF_PACKET;