libfetch: Mark all socket and file descriptors close-on-exec
authorJohn Marino <draco@marino.st>
Thu, 1 Nov 2012 19:54:53 +0000 (20:54 +0100)
committerJohn Marino <draco@marino.st>
Thu, 1 Nov 2012 21:56:18 +0000 (22:56 +0100)
This allows libfetch to close cached sockets.
Also add cast that helped FreeBSD move warns to 6

Taken-from: FreeBSD SVN 221822 (12 May 2011)
Taken-from: FreeBSD SVN 221830 (13 May 2011)

lib/libfetch/common.c
lib/libfetch/file.c
lib/libfetch/ftp.c

index bf2000e..86b92a2 100644 (file)
@@ -212,6 +212,7 @@ fetch_reopen(int sd)
        /* allocate and fill connection structure */
        if ((conn = calloc(1, sizeof(*conn))) == NULL)
                return (NULL);
+        fcntl(sd, F_SETFD, FD_CLOEXEC);
        conn->sd = sd;
        ++conn->ref;
        return (conn);
index 35b111e..0d093b3 100644 (file)
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/lib/libfetch/file.c,v 1.18 2007/12/14 10:26:58 des Exp $
- * $DragonFly: src/lib/libfetch/file.c,v 1.3 2007/08/05 21:48:12 swildner Exp $
  */
 
 #include <sys/param.h>
 #include <sys/stat.h>
 
 #include <dirent.h>
+#include <fcntl.h>
 #include <stdio.h>
 #include <string.h>
 
@@ -57,6 +57,7 @@ fetchXGetFile(struct url *u, struct url_stat *us, const char *flags)
                fetch_syserr();
        }
 
+       fcntl(fileno(f), F_SETFD, FD_CLOEXEC);
        return (f);
 }
 
@@ -84,6 +85,7 @@ fetchPutFile(struct url *u, const char *flags)
                fetch_syserr();
        }
 
+       fcntl(fileno(f), F_SETFD, FD_CLOEXEC);
        return (f);
 }
 
index be246ca..551405d 100644 (file)
@@ -127,7 +127,7 @@ unmappedaddr(struct sockaddr_in6 *sin6)
            !IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr))
                return;
        sin4 = (struct sockaddr_in *)sin6;
-       addr = *(u_int32_t *)&sin6->sin6_addr.s6_addr[12];
+       addr = *(u_int32_t *)(uintptr_t)&sin6->sin6_addr.s6_addr[12];
        port = sin6->sin6_port;
        memset(sin4, 0, sizeof(struct sockaddr_in));
        sin4->sin_addr.s_addr = addr;