diff --git a/ftp.spec b/ftp.spec index e397461..7ffa0db 100644 --- a/ftp.spec +++ b/ftp.spec @@ -1,7 +1,7 @@ Summary: The standard UNIX FTP (File Transfer Protocol) client. Name: ftp Version: 0.17 -Release: 27 +Release: 28 License: BSD Group: Applications/Internet Source0: ftp://ftp.uk.linux.org/pub/linux/Networking/netkit-devel/netkit-ftp-%{version}.tar.bz2 @@ -14,6 +14,7 @@ Patch6: netkit-ftp-0.17-runique_mget.patch Patch7: netkit-ftp-locale.patch Patch8: netkit-ftp-0.17-printf.patch Patch9: netkit-ftp-0.17-longint.patch +Patch10: netkit-ftp-0.17-vsftp165083.patch BuildRoot: /var/tmp/%{name}-root BuildRequires: gcc, glibc-devel, readline-devel, ncurses-devel, perl @@ -36,6 +37,7 @@ file transfers. %patch7 -p1 -b .locale %patch8 -p1 -b .printf %patch9 -p1 -b .longint +%patch10 -p1 -b .vsftp165083 %build sh configure --with-c-compiler=gcc --enable-ipv6 @@ -69,7 +71,13 @@ rm -rf ${RPM_BUILD_ROOT} %{_mandir}/man5/netrc.* %changelog -* Mon Aug 22 2005 Petr Raszyk - 0.17-26 +* Tue Aug 30 2005 Petr Raszyk - 0.17-28 +- This 'hack' will avoid a bug in ftp-server + ( < vsftpd-2.0.1-5 ). See #165083 (server prints the + '150 FILE:...' line twice). + This patch can be (later ?) removed. + +* Mon Aug 22 2005 Petr Raszyk - 0.17-27 - overflow using 'hash mode' (printing '#' but not reading data from network - #79367) diff --git a/netkit-ftp-0.17-vsftp165083.patch b/netkit-ftp-0.17-vsftp165083.patch new file mode 100644 index 0000000..9053519 --- /dev/null +++ b/netkit-ftp-0.17-vsftp165083.patch @@ -0,0 +1,47 @@ +--- ./netkit-ftp-0.17/ftp/ftp.c.rasold 2005-08-29 16:07:35.000000000 +0200 ++++ ./netkit-ftp-0.17/ftp/ftp.c 2005-08-30 10:58:10.000000000 +0200 +@@ -582,6 +582,7 @@ + volatile long long bytes = 0, hashbytes = HASHBYTES; + char buf[BUFSIZ], *bufp; + const char *volatile lmode; ++ int old_code_l; + + if (verbose && printnames) { + if (local && *local != '-') +@@ -799,7 +800,35 @@ + (void) fclose(dout); + /* closes data as well, so discard it */ + data = -1; +- (void) getreply(0); ++ old_code_l = code; ++ (void) getreply (0); ++ ++ /* Following "if" will avoid a bug #165083 in ftp-server */ ++ /* It can be later removed. */ ++ if (old_code_l == 150 && code == 150 && cpend == 1 ++ && sunique == 1 && cin != NULL && fileno (cin) >= 0 ) { ++ #include ++ struct pollfd fds_events_l [2] ; ++ int rc; ++ ++ fds_events_l [0] .fd = fileno (cin); ++ fds_events_l [0] .events = POLLIN | POLLERR | POLLHUP; ++ ++ rc = poll (fds_events_l, 1, 5000); ++ switch (rc) { ++ case 1: ++ (void) getreply (0); ++ break; ++ case 0: ++ fprintf (stderr, "ftp: no answer from ftp-server " ++ "(more than 5 sec).\n"); ++ break; ++ case -1: ++ perror("ftp: poll"); ++ break; ++ } ++ } ++ + (void) signal(SIGINT, oldintr); + if (oldintp) + (void) signal(SIGPIPE, oldintp);