version 1.35, 2000/05/03 19:50:41 |
version 1.36, 2000/06/21 19:22:54 |
|
|
char hbuf[MAXHOSTNAMELEN]; |
char hbuf[MAXHOSTNAMELEN]; |
char *cause = "unknown"; |
char *cause = "unknown"; |
|
|
|
epsv4bad = 0; |
|
|
memset((char *)&hisctladdr, 0, sizeof (hisctladdr)); |
memset((char *)&hisctladdr, 0, sizeof (hisctladdr)); |
memset(&hints, 0, sizeof(hints)); |
memset(&hints, 0, sizeof(hints)); |
hints.ai_flags = AI_CANONNAME; |
hints.ai_flags = AI_CANONNAME; |
|
|
warn("setsockopt (ignored)"); |
warn("setsockopt (ignored)"); |
switch (data_addr.su_family) { |
switch (data_addr.su_family) { |
case AF_INET: |
case AF_INET: |
result = command(pasvcmd = "EPSV"); |
if (epsv4 && !epsv4bad) { |
if (code / 10 == 22 && code != 229) { |
result = command(pasvcmd = "EPSV"); |
fputs( |
if (code / 10 == 22 && code != 229) { |
|
fputs( |
"wrong server: return code must be 229\n", |
"wrong server: return code must be 229\n", |
ttyout); |
ttyout); |
result = COMPLETE + 1; |
result = COMPLETE + 1; |
|
} |
|
if (result != COMPLETE) { |
|
epsv4bad = 1; |
|
if (debug) { |
|
fputs( |
|
"disabling epsv4 for this connection\n", |
|
ttyout); |
|
} |
|
} |
} |
} |
if (result != COMPLETE) |
if (result != COMPLETE) |
result = command(pasvcmd = "PASV"); |
result = command(pasvcmd = "PASV"); |
|
|
|
|
switch (data_addr.su_family) { |
switch (data_addr.su_family) { |
case AF_INET: |
case AF_INET: |
|
if (!epsv4 || epsv4bad) { |
|
result = COMPLETE +1; |
|
break; |
|
} |
|
/*FALLTHROUGH*/ |
case AF_INET6: |
case AF_INET6: |
af = (data_addr.su_family == AF_INET) ? 1 : 2; |
af = (data_addr.su_family == AF_INET) ? 1 : 2; |
if (getnameinfo((struct sockaddr *)&data_addr, |
if (getnameinfo((struct sockaddr *)&data_addr, |
|
|
} else { |
} else { |
result = command("EPRT |%d|%s|%d|", |
result = command("EPRT |%d|%s|%d|", |
af, hname, ntohs(data_addr.su_port)); |
af, hname, ntohs(data_addr.su_port)); |
|
if (result != COMPLETE) { |
|
epsv4bad = 1; |
|
if (debug) { |
|
fputs( |
|
"disabling epsv4 for this connection\n", |
|
ttyout); |
|
} |
|
} |
} |
} |
break; |
break; |
default: |
default: |