OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall Root: /v/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-src Date: 23-Mar-2006 22:27:03 Branch: HEAD Handle: 2006032321270300 Modified files: openpkg-src/spegla spegla.patch spegla.spec Log: apply a patch from the FreeBSD ports tree which fixes reply code handling for USER command Summary: Revision Changes Path 1.2 +97 -4 openpkg-src/spegla/spegla.patch 1.24 +1 -1 openpkg-src/spegla/spegla.spec ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-src/spegla/spegla.patch ============================================================================ $ cvs diff -u -r1.1 -r1.2 spegla.patch --- openpkg-src/spegla/spegla.patch 14 Jun 2002 12:48:53 -0000 1.1 +++ openpkg-src/spegla/spegla.patch 23 Mar 2006 21:27:03 -0000 1.2 @@ -1,5 +1,6 @@ ---- e_err.c.orig Sun May 14 23:39:39 2000 -+++ e_err.c Thu Feb 1 15:38:37 2001 +Index: e_err.c +--- e_err.c.orig 2000-05-14 16:39:39 +0200 ++++ e_err.c 2006-03-23 22:22:39 +0100 @@ -115,6 +115,7 @@ } @@ -8,8 +9,100 @@ len -= res; p += res; ---- spegla.c.orig Sat May 27 22:38:14 2000 -+++ spegla.c Thu Feb 1 15:39:24 2001 +Index: jftp.c +--- jftp.c.orig 2000-05-27 15:47:43 +0200 ++++ jftp.c 2006-03-23 22:22:39 +0100 +@@ -40,6 +40,7 @@ + #include <netinet/in.h> + #include <arpa/inet.h> + ++#include <ctype.h> + #include <setjmp.h> + #include <signal.h> + #include <stdio.h> +@@ -220,6 +221,7 @@ + int ftp_status, eol, i, islongtext; + ssize_t done, res, size, pos; + char *nfmt; ++ char rescode[5]; + + if (*fmt != ' ') { + if ((nfmt = alloca(strlen(fmt) + 3)) == NULL) { +@@ -267,12 +269,28 @@ + pos += done; + if(eol) { + ftp_status=0; +- res = sscanf(c->ftp_buf, "%3d", &ftp_status); +- if ((res == 1) && (ftp_status >= 100) && (ftp_status <= 999)) { +- /* We have a line that contains a valid reply code */ + +- /* This may be the start of a multi line reply */ +- islongtext = (c->ftp_buf[3] == '-'); ++ /* We are interested in the first 4 bytes */ ++ (void)memset(rescode, '\0', sizeof(rescode)); ++ (void)memcpy(rescode, c->ftp_buf, sizeof(rescode) - 1); ++ ++ if (isdigit(rescode[0]) ++ && isdigit(rescode[1]) ++ && isdigit(rescode[2])) { ++ res = sscanf(rescode, "%3d", &ftp_status); ++ ++ E_LOGX_1(3, "ftp_status: %d", ftp_status); ++ E_LOGX_1(3, "c->ftp_buf: %s", c->ftp_buf); ++ ++ if ((rescode[3] == '-' || rescode[3] == ' ') ++ && (res == 1)) { ++ islongtext = (rescode[3] == '-'); ++ if (ftp_status < 100) { ++ E_LOGX_1(1, "%s", c->ftp_buf); ++ c->ftp_resp = JFTP_ERR; ++ return -1; ++ } ++ } + } + if(islongtext) { + size = sizeof(c->ftp_buf); +@@ -423,17 +441,22 @@ + c->ftp_resp = JFTP_ERR; + return -1; + } +- if (ftp_req(c, "user %s", c->ftp_user_name) < 0 || c->ftp_resp != 331) { ++ if (ftp_req(c, "user %s", c->ftp_user_name) < 0 ++ || (c->ftp_resp != 331 && c->ftp_resp != 230)) { + E_LOGX_1(0, "Username %s: failed", c->ftp_user_name); + FD_CLOSE(c->ftp_com); + c->ftp_resp = JFTP_ERR; + return -1; + } +- if (ftp_req(c, "pass %s", c->ftp_password) < 0 || c->ftp_resp != 230) { +- E_LOGX(0, "Password xxxxx: failed"); +- FD_CLOSE(c->ftp_com); +- c->ftp_resp = JFTP_ERR; +- return -1; ++ /* USER command can respond 230 immediately in some cases */ ++ if (c->ftp_resp != 230) { ++ if (ftp_req(c, "pass %s", c->ftp_password) < 0 ++ || c->ftp_resp != 230) { ++ E_LOGX(0, "Password xxxxx: failed"); ++ FD_CLOSE(c->ftp_com); ++ c->ftp_resp = JFTP_ERR; ++ return -1; ++ } + } + c->ftp_resp = 0; + if (ftp_req(c, "TYPE I") < 0 || c->ftp_resp != 200) { +@@ -836,7 +859,7 @@ + /* Late versions of wu-ftpd does some kind of recursive + * listing if only a '.' is given as directory. + */ +- if (strcmp(dir, ".") == 0) ++ if ((strcmp(dir, ".") == 0) || !*dir) + res = ftp_req(c, "list %s", flags); + else + res = ftp_req(c, "list %s %s", flags, dir); +Index: spegla.c +--- spegla.c.orig 2000-05-27 15:38:14 +0200 ++++ spegla.c 2006-03-23 22:22:39 +0100 @@ -728,7 +728,7 @@ #ifdef ULTRIX if ((f.fd_req.bfreen * 1024) < minfree) @@ . patch -p0 <<'@@ .' Index: openpkg-src/spegla/spegla.spec ============================================================================ $ cvs diff -u -r1.23 -r1.24 spegla.spec --- openpkg-src/spegla/spegla.spec 1 Jan 2006 13:22:37 -0000 1.23 +++ openpkg-src/spegla/spegla.spec 23 Mar 2006 21:27:03 -0000 1.24 @@ -33,7 +33,7 @@ Group: Network License: BSD Version: 1.1p4 -Release: 20040604 +Release: 20060323 # package options %option with_ipv6 no @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List openpkg-cvs@openpkg.org