From 370d35900df013571cf0559e181fd55ddf78c2d9 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Sat, 5 Apr 1997 23:52:02 +0000 Subject: [PATCH] Fix passive mode. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1550 ec53bebd-3082-4978-b11e-865c3cabbd6b --- appl/ftp/ftp/ftp.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/appl/ftp/ftp/ftp.c b/appl/ftp/ftp/ftp.c index 3716fd40e..97287d8cd 100644 --- a/appl/ftp/ftp/ftp.c +++ b/appl/ftp/ftp/ftp.c @@ -375,6 +375,19 @@ getreply(int expecteof) osa.sa_handler != SIG_IGN) osa.sa_handler(SIGINT); #endif + if(code == 227){ + char *p, *q; + pasv[0] = 0; + p = strchr(reply_string, '('); + if(p){ + p++; + q = strchr(p, ')'); + if(q){ + strncpy(pasv, p, q - p); + pasv[q - p] = 0; + } + } + } return code / 100; } }else{ @@ -1165,19 +1178,21 @@ initconn(void) "Shouldn't happen!\n"); goto bad; } - + if(a0 < 0 || a0 > 255 || + a1 < 0 || a1 > 255 || + a2 < 0 || a2 > 255 || + a3 < 0 || a3 > 255 || + p0 < 0 || p0 > 255 || + p1 < 0 || p1 > 255){ + printf("Can't parse passive mode string.\n"); + goto bad; + } + memset(&data_addr, 0, sizeof(data_addr)); data_addr.sin_family = AF_INET; - tmpaddr = data_addr.sin_addr.s_addr; - a = (char *)&tmpaddr; - a[0] = a0 & 0xff; - a[1] = a1 & 0xff; - a[2] = a2 & 0xff; - a[3] = a3 & 0xff; - tmpport = data_addr.sin_port; - p = (char *)&tmpport; - p[0] = p0 & 0xff; - p[1] = p1 & 0xff; + data_addr.sin_addr.s_addr = htonl((a0 << 24) | (a1 << 16) | + (a2 << 8) | a3); + data_addr.sin_port = htons((p0 << 8) | p1); if (connect(data, (struct sockaddr *)&data_addr, sizeof(data_addr)) < 0) {