Marcela Mašláňová 0a4986
--- netkit-ftp-0.17/ftp/ftp.c.multiipv6	2006-08-02 15:03:26.000000000 +0200
Marcela Mašláňová 0a4986
+++ netkit-ftp-0.17/ftp/ftp.c	2006-08-02 15:06:19.000000000 +0200
Marcela Mašláňová 0a4986
@@ -78,9 +78,7 @@
Marcela Mašláňová 0a4986
 #include <netinet/in.h>
Marcela Mašláňová 0a4986
 #include <netinet/ip.h>
Marcela Mašláňová 0a4986
 #include <arpa/ftp.h>
Marcela Mašláňová 0a4986
-#include <arpa/inet.h>
Marcela Mašláňová 0a4986
 #include <arpa/telnet.h>
Marcela Mašláňová 0a4986
-
Marcela Mašláňová 0a4986
 #include <stdio.h>
Marcela Mašláňová 0a4986
 #include <signal.h>
Marcela Mašláňová 0a4986
 #include <string.h>
Marcela Mašláňová 0a4986
@@ -132,7 +130,7 @@
Marcela Mašláňová 0a4986
 static sigjmp_buf ptabort;
Marcela Mašláňová 0a4986
 static int ptabflg = 0;
Marcela Mašláňová 0a4986
 static int abrtflag = 0;
Marcela Mašláňová 0a4986
-struct sockaddr_in source;
Marcela Mašláňová 0a4986
+struct sockaddr_storage source;
Marcela Mašláňová 0a4986
 
Marcela Mašláňová 0a4986
 void lostpeer(int);
Marcela Mašláňová 0a4986
 extern int connected;
Marcela Mašláňová 0a4986
@@ -154,8 +152,8 @@
Marcela Mašláňová 0a4986
 char *
Marcela Mašláňová 0a4986
 hookup(const char *host, const char *port)
Marcela Mašláňová 0a4986
 {
Marcela Mašláňová 0a4986
-	int s, tos, error, alen;
Marcela Mašláňová 0a4986
-	socklen_t len;
Marcela Mašláňová 0a4986
+	int s, tos, error;
Marcela Mašláňová 0a4986
+	socklen_t len, alen;
Marcela Mašláňová 0a4986
 	static char hostnamebuf[256];
Marcela Mašláňová 0a4986
 	struct addrinfo hints, *res, *res0;
Marcela Mašláňová 0a4986
 	char hbuf[MAXHOSTNAMELEN], pbuf[NI_MAXSERV];
Marcela Mašláňová 0a4986
@@ -281,7 +279,15 @@
Marcela Mašláňová 0a4986
 		printf("Connected to %s (%s).\n", hostname, hbuf);
Marcela Mašláňová 0a4986
 	alen = sizeof(source);
Marcela Mašláňová 0a4986
 	getsockname(s,(struct sockaddr*)&source, &alen;;
Marcela Mašláňová 0a4986
-	source.sin_port = 0;    /* We just want the addr, not the port */
Marcela Mašláňová 0a4986
+	switch (source.ss_family) {
Marcela Mašláňová 0a4986
+	    /* We just want the addr, not the port */
Marcela Mašláňová 0a4986
+	    case AF_INET:
Marcela Mašláňová 0a4986
+		((struct sockaddr_in *) &source)->sin_port = 0;
Marcela Mašláňová 0a4986
+	        break;
Marcela Mašláňová 0a4986
+	    case AF_INET6:
Marcela Mašláňová 0a4986
+		((struct sockaddr_in6 *) &source)->sin6_port = 0;
Marcela Mašláňová 0a4986
+	        break;
Marcela Mašláňová 0a4986
+	}
Marcela Mašláňová 0a4986
 
Marcela Mašláňová 0a4986
 	if (getreply(0) > 2) { 	/* read startup message from server    */
Marcela Mašláňová 0a4986
 		if (cin)
Marcela Mašláňová 0a4986
@@ -1260,11 +1266,11 @@
Marcela Mašláňová 0a4986
 			return(1);
Marcela Mašláňová 0a4986
 		}
Marcela Mašláňová 0a4986
 		if((multihome) &&
Marcela Mašláňová 0a4986
-			bind(data, (struct sockaddr*)&source, sizeof(source)) == -1) {
Marcela Mašláňová 0a4986
-			close(data);
Marcela Mašláňová 0a4986
-			data = -1;
Marcela Mašláňová 0a4986
-			perror("ftp multihome bind");
Marcela Mašláňová 0a4986
-			return(1);
Marcela Mašláňová 0a4986
+                       bind(data, (struct sockaddr *)&source, sizeof(source)) == -1) {
Marcela Mašláňová 0a4986
+                       close(data);
Marcela Mašláňová 0a4986
+                       data = -1;
Marcela Mašláňová 0a4986
+                       perror("ftp multihome bind");
Marcela Mašláňová 0a4986
+                       return(1);
Marcela Mašláňová 0a4986
                 }
Marcela Mašláňová 0a4986
 		if (options & SO_DEBUG &&
Marcela Mašláňová 0a4986
 		    setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on,