pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/net/libfetch/files Conditionally use IP_PORTRANGE sock...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/951142fe0c30
branches:  trunk
changeset: 538406:951142fe0c30
user:      joerg <joerg%pkgsrc.org@localhost>
date:      Thu Feb 07 17:42:14 2008 +0000

description:
Conditionally use IP_PORTRANGE sockopt and avoid using ss_len when other
operations already provided the value.

diffstat:

 net/libfetch/files/common.h |   7 ++++++-
 net/libfetch/files/ftp.c    |  20 +++++++++++---------
 2 files changed, 17 insertions(+), 10 deletions(-)

diffs (105 lines):

diff -r aff4ec0fccda -r 951142fe0c30 net/libfetch/files/common.h
--- a/net/libfetch/files/common.h       Thu Feb 07 17:27:40 2008 +0000
+++ b/net/libfetch/files/common.h       Thu Feb 07 17:42:14 2008 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: common.h,v 1.1.1.1 2008/02/07 01:48:22 joerg Exp $     */
+/*     $NetBSD: common.h,v 1.2 2008/02/07 17:42:14 joerg Exp $ */
 /*-
  * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav
  * All rights reserved.
@@ -45,6 +45,11 @@
 #include <openssl/err.h>
 #endif
 
+#if !defined(__sun) && !defined(__hpux) && !defined(__INTERIX) && \
+    !defined(__digital__) && !defined(__linux)
+#define HAVE_SA_LEN
+#endif
+
 /* Connection */
 typedef struct fetchconn conn_t;
 struct fetchconn {
diff -r aff4ec0fccda -r 951142fe0c30 net/libfetch/files/ftp.c
--- a/net/libfetch/files/ftp.c  Thu Feb 07 17:27:40 2008 +0000
+++ b/net/libfetch/files/ftp.c  Thu Feb 07 17:42:14 2008 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ftp.c,v 1.6 2008/02/07 17:27:40 joerg Exp $    */
+/*     $NetBSD: ftp.c,v 1.7 2008/02/07 17:42:14 joerg Exp $    */
 /*-
  * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav
  * All rights reserved.
@@ -117,7 +117,7 @@
  * Translate IPv4 mapped IPv6 address to IPv4 address
  */
 static void
-unmappedaddr(struct sockaddr_in6 *sin6)
+unmappedaddr(struct sockaddr_in6 *sin6, socklen_t *len)
 {
        struct sockaddr_in *sin4;
        uint32_t addr;
@@ -133,8 +133,8 @@
        sin4->sin_addr.s_addr = addr;
        sin4->sin_port = port;
        sin4->sin_family = AF_INET;
-#if !defined(__sun) && !defined(__hpux) && !defined(__INTERIX) && \
-    !defined(__digital__) && !defined(__linux)
+       *len = sizeof(struct sockaddr_in);
+#ifdef HAVE_SA_LEN
        sin4->sin_len = sizeof(struct sockaddr_in);
 #endif
 }
@@ -656,7 +656,7 @@
        if (getsockname(conn->sd, (struct sockaddr *)&sa, &l) == -1)
                goto sysouch;
        if (sa.ss_family == AF_INET6)
-               unmappedaddr((struct sockaddr_in6 *)&sa);
+               unmappedaddr((struct sockaddr_in6 *)&sa, &l);
 
        /* open data socket */
        if ((sd = socket(sa.ss_family, SOCK_STREAM, IPPROTO_TCP)) == -1) {
@@ -742,7 +742,7 @@
                if (getpeername(conn->sd, (struct sockaddr *)&sa, &l) == -1)
                        goto sysouch;
                if (sa.ss_family == AF_INET6)
-                       unmappedaddr((struct sockaddr_in6 *)&sa);
+                       unmappedaddr((struct sockaddr_in6 *)&sa, &l);
                switch (sa.ss_family) {
                case AF_INET6:
                        sin6 = (struct sockaddr_in6 *)&sa;
@@ -774,7 +774,7 @@
                if (bindaddr != NULL && *bindaddr != '\0' &&
                    fetch_bind(sd, sa.ss_family, bindaddr) != 0)
                        goto sysouch;
-               if (connect(sd, (struct sockaddr *)&sa, sa.ss_len) == -1)
+               if (connect(sd, (struct sockaddr *)&sa, l) == -1)
                        goto sysouch;
 
                /* make the server initiate the transfer */
@@ -803,15 +803,17 @@
                        break;
                case AF_INET:
                        ((struct sockaddr_in *)&sa)->sin_port = 0;
+#ifdef IP_PORTRANGE
                        arg = low ? IP_PORTRANGE_DEFAULT : IP_PORTRANGE_HIGH;
                        if (setsockopt(sd, IPPROTO_IP, IP_PORTRANGE,
                                (char *)&arg, sizeof(arg)) == -1)
                                goto sysouch;
+#endif
                        break;
                }
                if (verbose)
                        fetch_info("binding data socket");
-               if (bind(sd, (struct sockaddr *)&sa, sa.ss_len) == -1)
+               if (bind(sd, (struct sockaddr *)&sa, l) == -1)
                        goto sysouch;
                if (listen(sd, 1) == -1)
                        goto sysouch;
@@ -834,7 +836,7 @@
                        e = -1;
                        sin6 = (struct sockaddr_in6 *)&sa;
                        sin6->sin6_scope_id = 0;
-                       if (getnameinfo((struct sockaddr *)&sa, sa.ss_len,
+                       if (getnameinfo((struct sockaddr *)&sa, l,
                                hname, sizeof(hname),
                                NULL, 0, NI_NUMERICHOST) == 0) {
                                e = ftp_cmd(conn, "EPRT |%d|%s|%d|", 2, hname,



Home | Main Index | Thread Index | Old Index