You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.3 KiB
122 lines
3.3 KiB
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 @@ |
|
} |
|
|
|
res = vsnprintf(p, len, fmt, args); |
|
+ if (res >= len) res = len - 1; |
|
len -= res; |
|
p += res; |
|
|
|
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) |
|
#else |
|
- if ((f.f_bsize * f.f_bavail) < minfree) |
|
+ if (((long long)f.f_bsize * f.f_bavail) < minfree) |
|
#endif |
|
e_errx(1, "%s: Not enough space left", path); |
|
|
|
@@ -953,6 +953,7 @@ |
|
} |
|
buf[i] = p[j]; |
|
} |
|
+ buf[i] = '\0'; |
|
*val = buf; |
|
ret: |
|
if (show)
|
|
|