summaryrefslogtreecommitdiff
path: root/net/wget/patches/patch-ab
blob: a665a697656c30e2639dcad095e0bbbbed6389ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
$NetBSD: patch-ab,v 1.7 2005/01/25 20:07:25 bouyer Exp $

--- src/ftp-basic.c.orig	Sat Nov  8 20:17:55 2003
+++ src/ftp-basic.c	Sun Jan 23 22:20:35 2005
@@ -267,7 +267,7 @@
 
   /* Setting port to 0 lets the system choose a free port.  */
   port = 0;
-  err = bindport (&port, ip_default_family);
+  err = bindport (&port, AF_INET6);
   if (err != BINDOK)	/* Bind the port.  */
     return err;
 
@@ -275,7 +275,8 @@
   if (!conaddr (RBUF_FD (rbuf), &in_addr))
     /* Huh?  This is not BINDERR! */
     return BINDERR;
-  inet_ntop (AF_INET6, &in_addr, ipv6, sizeof (ipv6));
+  inet_ntop (AF_INET6, in_addr.bytes, ipv6, sizeof (ipv6));
+  in_addr.family = AF_INET6;
 
   /* Construct the argument of EPRT (of the form |2|IPv6.ascii|PORT.ascii|). */
   bytes = alloca (3 + strlen (ipv6) + 1 + numdigit (port) + 1 + 1);
@@ -319,8 +320,6 @@
   char bytes[6 * 4 +1];
 
   ip_address in_addr;
-  ip4_address in_addr_4;
-  unsigned char *in_addr4_ptr = (unsigned char *)&in_addr_4;
 
   int nwritten;
   unsigned short port;
@@ -347,16 +346,14 @@
   if (!conaddr (RBUF_FD (rbuf), &in_addr))
     /* Huh?  This is not BINDERR! */
     return BINDERR;
-  if (!map_ip_to_ipv4 (&in_addr, &in_addr_4))
-    return BINDERR;
 
   /* Construct the argument of PORT (of the form a,b,c,d,e,f).  Port
      is unsigned short so (unsigned) (port & 0xff000) >> 8 is the same
      like port >> 8
    */
   sprintf (bytes, "%d,%d,%d,%d,%d,%d",
-	   in_addr4_ptr[0], in_addr4_ptr[1], in_addr4_ptr[2], in_addr4_ptr[3],
-	   port >> 8, port & 0xff);
+	   in_addr.bytes[0], in_addr.bytes[1], in_addr.bytes[2],
+           in_addr.bytes[3], port >> 8, port & 0xff);
   /* Send PORT request.  */
   request = ftp_request ("PORT", bytes);
   nwritten = iwrite (RBUF_FD (rbuf), request, strlen (request));
@@ -426,10 +423,12 @@
     switch(remote.sa.sa_family)
       {
         case AF_INET6:
-          memcpy (addr, &remote.sin6.sin6_addr, 16);
+          memcpy (&addr->bytes[0], &remote.sin6.sin6_addr, 16);
+          addr->family =   AF_INET6;
 	  break;
 	case AF_INET:  
-          map_ipv4_to_ip ((ip4_address *)&ipv4_sock->sin_addr, addr);
+          memcpy (&addr->bytes[0], &remote.sin.sin_addr, 4);
+          addr->family =   AF_INET;
 	  break;
 	default:
 	  abort();
@@ -454,15 +453,12 @@
   unsigned char addr4[4];
 
 #ifdef ENABLE_IPV6
-  if (ip_default_family == AF_INET6) 
-    {
       err = ftp_epsv (rbuf, addr, port, "2");	/* try IPv6 with EPSV */
       if (FTPOK == err) 
         return FTPOK;
       err = ftp_epsv (rbuf, addr, port, "1");	/* try IPv4 with EPSV */
       if (FTPOK == err) 
         return FTPOK;
-    }
 #endif  
   /* Form the request.  */
   request = ftp_request ("PASV", NULL);
@@ -505,9 +501,8 @@
           return FTPINVPASV;
         }
     }
-
-  /* Eventually make an IPv4 in IPv6 adress if needed */
-  map_ipv4_to_ip ((ip4_address *)addr4, addr);
+  memcpy(addr->bytes, addr4, 4);
+  addr->family = AF_INET;
 
   *port=0;
   for (; ISDIGIT (*s); s++)
@@ -526,7 +521,7 @@
       port2 = (*s - '0') + 10 * port2;
     *port = (*port) * 256 + port2;
   }
-  xfree (respline);
+  xfree (respline); 
   return FTPOK;
 }