diff --git a/src/sbbs3/execnet.cpp b/src/sbbs3/execnet.cpp index fac39ad1194f543ed849a9d52110ba64ad0116f0..6cdf9301c5233b6dcf69149d8a227a3e134aefd1 100644 --- a/src/sbbs3/execnet.cpp +++ b/src/sbbs3/execnet.cpp @@ -614,7 +614,7 @@ SOCKET sbbs_t::ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN* addr) ip_addr.dw=ntohl(ctrl_addr.sin_addr.s_addr); port.w=ntohs(addr->sin_port); - sprintf(cmd,"PORT %u,%u,%u,%u,%hu,%hu" + sprintf(cmd,"PORT %u,%u,%u,%u,%u,%u" ,ip_addr.b[3] ,ip_addr.b[2] ,ip_addr.b[1] @@ -666,8 +666,20 @@ bool sbbs_t::ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool d close_socket(data_sock); return(false); } + } - } else { /* Normal (Active) FTP */ + if(dir) + sprintf(cmd,"LIST %s",src); + else + sprintf(cmd,"RETR %s",src); + + if(!ftp_cmd(csi,ctrl_sock,cmd,rsp) + || atoi(rsp)!=150 /* Open data connection */) { + close_socket(data_sock); + return(false); + } + + if(!(csi->ftp_mode&CS_FTP_PASV)) { /* Normal (Active) FTP */ /* Setup for select() */ tv.tv_sec=TIMEOUT_SOCK_LISTEN; @@ -697,17 +709,6 @@ bool sbbs_t::ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool d data_sock=accept_sock; } - if(dir) - sprintf(cmd,"LIST %s",src); - else - sprintf(cmd,"RETR %s",src); - - if(!ftp_cmd(csi,ctrl_sock,cmd,rsp) - || atoi(rsp)!=150 /* Open data connection */) { - close_socket(data_sock); - return(false); - } - if(!dir) if((fp=fopen(dest,"wb"))==NULL) { close_socket(data_sock);