1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
--- src/ftp.c.orig Mon Jul 5 21:26:46 2004
+++ src/ftp.c Mon Jul 5 21:39:05 2004
@@ -798,15 +798,30 @@
int get_msg(int csock, char * msg, int buflen){
int res = 0;
+ char *s;
do {
memset(msg, 0, buflen);
res = recv(csock, msg, buflen-1, 0);
printout(vDEBUG, "%s", msg);
+ /*
+ * Multiline responses should of course only check on the last line.
+ * If there are two \n's from the end of the string in the string,
+ * the check at the start of second last one.
+ */
+ if ((s=strrchr(msg,'\n'))!=NULL) {
+ if ((s=strrchr(s-1,'\n'))!=NULL) {
+ s++;
+ if (*s=='\r') s++;
+ } else
+ s=msg;
+ } else {
+ s=msg;
+ }
/* multiline messages are required by rfc to have a hiphen
* after the command-code (e.g. 250-).
* this counts for all but the last one, so look out for it. */
- } while(msg[3] == '-');
+ } while(s[3] == '-');
return res;
}
|