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

Reply via email to