version 1.84, 2013/12/20 13:44:51 |
version 1.85, 2014/04/22 20:48:41 |
|
|
if (data_addr.su_family != AF_INET) { |
if (data_addr.su_family != AF_INET) { |
fputs( |
fputs( |
"Passive mode AF mismatch. Shouldn't happen!\n", ttyout); |
"Passive mode AF mismatch. Shouldn't happen!\n", ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
if (code / 10 == 22 && code != 227) { |
if (code / 10 == 22 && code != 227) { |
fputs("wrong server: return code must be 227\n", |
fputs("wrong server: return code must be 227\n", |
ttyout); |
ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
error = sscanf(pasv, "%u,%u,%u,%u,%u,%u", |
error = sscanf(pasv, "%u,%u,%u,%u,%u,%u", |
|
|
if (error != 6) { |
if (error != 6) { |
fputs( |
fputs( |
"Passive mode address scan failure. Shouldn't happen!\n", ttyout); |
"Passive mode address scan failure. Shouldn't happen!\n", ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
error = 0; |
|
memset(&data_addr, 0, sizeof(data_addr)); |
memset(&data_addr, 0, sizeof(data_addr)); |
data_addr.su_family = AF_INET; |
data_addr.su_family = AF_INET; |
data_addr.su_len = sizeof(struct sockaddr_in); |
data_addr.su_len = sizeof(struct sockaddr_in); |
|
|
if (code / 10 == 22 && code != 228) { |
if (code / 10 == 22 && code != 228) { |
fputs("wrong server: return code must be 228\n", |
fputs("wrong server: return code must be 228\n", |
ttyout); |
ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
switch (data_addr.su_family) { |
switch (data_addr.su_family) { |
|
|
if (error != 9) { |
if (error != 9) { |
fputs( |
fputs( |
"Passive mode address scan failure. Shouldn't happen!\n", ttyout); |
"Passive mode address scan failure. Shouldn't happen!\n", ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
if (af != 4 || hal != 4 || pal != 2) { |
if (af != 4 || hal != 4 || pal != 2) { |
|
|
goto bad; |
goto bad; |
} |
} |
|
|
error = 0; |
|
memset(&data_addr, 0, sizeof(data_addr)); |
memset(&data_addr, 0, sizeof(data_addr)); |
data_addr.su_family = AF_INET; |
data_addr.su_family = AF_INET; |
data_addr.su_len = sizeof(struct sockaddr_in); |
data_addr.su_len = sizeof(struct sockaddr_in); |
|
|
if (error != 21) { |
if (error != 21) { |
fputs( |
fputs( |
"Passive mode address scan failure. Shouldn't happen!\n", ttyout); |
"Passive mode address scan failure. Shouldn't happen!\n", ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
if (af != 6 || hal != 16 || pal != 2) { |
if (af != 6 || hal != 16 || pal != 2) { |
fputs( |
fputs( |
"Passive mode AF mismatch. Shouldn't happen!\n", ttyout); |
"Passive mode AF mismatch. Shouldn't happen!\n", ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
|
|
error = 0; |
|
memset(&data_addr, 0, sizeof(data_addr)); |
memset(&data_addr, 0, sizeof(data_addr)); |
data_addr.su_family = AF_INET6; |
data_addr.su_family = AF_INET6; |
data_addr.su_len = sizeof(struct sockaddr_in6); |
data_addr.su_len = sizeof(struct sockaddr_in6); |
|
|
data_addr.su_port = htons(pack2(port, 0)); |
data_addr.su_port = htons(pack2(port, 0)); |
break; |
break; |
default: |
default: |
error = 1; |
fputs("Bad family!\n", ttyout); |
|
goto bad; |
} |
} |
} else if (strcmp(pasvcmd, "EPSV") == 0) { |
} else if (strcmp(pasvcmd, "EPSV") == 0) { |
char delim[4]; |
char delim[4]; |
|
|
if (code / 10 == 22 && code != 229) { |
if (code / 10 == 22 && code != 229) { |
fputs("wrong server: return code must be 229\n", |
fputs("wrong server: return code must be 229\n", |
ttyout); |
ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
if (sscanf(pasv, "%c%c%c%d%c", &delim[0], |
if (sscanf(pasv, "%c%c%c%d%c", &delim[0], |
&delim[1], &delim[2], &port[1], |
&delim[1], &delim[2], &port[1], |
&delim[3]) != 5) { |
&delim[3]) != 5) { |
fputs("parse error!\n", ttyout); |
fputs("parse error!\n", ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
if (delim[0] != delim[1] || delim[0] != delim[2] |
if (delim[0] != delim[1] || delim[0] != delim[2] |
|| delim[0] != delim[3]) { |
|| delim[0] != delim[3]) { |
fputs("parse error!\n", ttyout); |
fputs("parse error!\n", ttyout); |
error = 1; |
|
goto bad; |
goto bad; |
} |
} |
data_addr = hisctladdr; |
data_addr = hisctladdr; |