diff options
author | Mike Heffner <mikeh@FreeBSD.org> | 2002-04-26 16:51:03 +0000 |
---|---|---|
committer | Mike Heffner <mikeh@FreeBSD.org> | 2002-04-26 16:51:03 +0000 |
commit | ccb3a87203714318b08be59f5a29f6e916a987ce (patch) | |
tree | 2d3553f3dcfec396b578932ea083969c027d2516 /contrib/lukemftp/src/ftp.c | |
parent | e25f7def37f0ffffe46ea434abca403a1fa6f30c (diff) | |
download | src-ccb3a87203714318b08be59f5a29f6e916a987ce.tar.gz src-ccb3a87203714318b08be59f5a29f6e916a987ce.zip |
Import the FreeBSD differences Luke patched in lukemftp:vendor/tnftp/1.5.FIXESvendor/NetBSD/lukemftp/1.5.FIXES
*) Large file ASCII support
*) -4/-6 options to force IPv4/IPv6 respectively
Also, fix for buffer overflow on PASV from malicious server.
Notes
Notes:
svn path=/vendor/lukemftp/dist/; revision=95504
svn path=/vendor/tnftp/1.5.FIXES/; revision=223303; tag=vendor/tnftp/1.5.FIXES
Diffstat (limited to 'contrib/lukemftp/src/ftp.c')
-rw-r--r-- | contrib/lukemftp/src/ftp.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/contrib/lukemftp/src/ftp.c b/contrib/lukemftp/src/ftp.c index b627b2b534b0..b340e85669d0 100644 --- a/contrib/lukemftp/src/ftp.c +++ b/contrib/lukemftp/src/ftp.c @@ -149,7 +149,7 @@ hookup(char *host, char *port) memset(&hints, 0, sizeof(hints)); portnum = parseport(port, FTP_PORT); hints.ai_flags = AI_CANONNAME; - hints.ai_family = AF_UNSPEC; + hints.ai_family = family; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; error = getaddrinfo(host, NULL, &hints, &res0); @@ -453,9 +453,10 @@ getreply(int expecteof) if (dig > 4 && pflag == 1 && isdigit(c)) pflag = 2; if (pflag == 2) { - if (c != '\r' && c != ')') - *pt++ = c; - else { + if (c != '\r' && c != ')') { + if (pt < &pasv[sizeof(pasv) - 1]) + *pt++ = c; + } else { *pt = '\0'; pflag = 3; } @@ -689,7 +690,7 @@ sendrequest(const char *cmd, const char *local, const char *remote, rc = -1; switch (curtype) { case TYPE_A: - rc = fseek(fin, (long) restart_point, SEEK_SET); + rc = fseeko(fin, restart_point, SEEK_SET); break; case TYPE_I: case TYPE_L: @@ -1134,18 +1135,17 @@ recvrequest(const char *cmd, const char *local, const char *remote, case TYPE_A: if (is_retr && restart_point) { int ch; - long i, n; + off_t i; - if (fseek(fout, 0L, SEEK_SET) < 0) + if (fseeko(fout, (off_t)0, SEEK_SET) < 0) goto done; - n = (long)restart_point; - for (i = 0; i++ < n;) { + for (i = 0; i++ < restart_point;) { if ((ch = getc(fout)) == EOF) goto done; if (ch == '\n') i++; } - if (fseek(fout, 0L, SEEK_CUR) < 0) { + if (fseeko(fout, (off_t)0, SEEK_CUR) < 0) { done: warn("local: %s", local); goto cleanuprecv; |