|
|
@@ -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)
|