From 481b9e389f1ff91187c35fdb787d04388658c850 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 27 Jun 2017 23:28:17 +0300 Subject: [PATCH] EPSV support for ftppr --- src/ftppr.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ftppr.c b/src/ftppr.c index 057d245..684a227 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -88,6 +88,7 @@ void * ftpprchild(struct clientparam* param) { } else if (status >= 3 && ( (!strncasecmp((char *)buf, "PASV", 4) && (pasv = 1)) || + (!strncasecmp((char *)buf, "EPSV", 4) && (pasv = 2)) || (!strncasecmp((char *)buf, "PORT ", 5) && !(pasv = 0)) )){ #ifndef WITHMAIN @@ -125,8 +126,9 @@ void * ftpprchild(struct clientparam* param) { if(so._listen(clidatasock, 1)) {RETURN(823);} sasize = sizeof(param->sincl); if(so._getsockname(clidatasock, (struct sockaddr *)¶m->sincl, &sasize)){RETURN(824);} - if(*SAFAMILY(¶m->sincl) == AF_INET) - sprintf((char *)buf, "227 OK (%u,%u,%u,%u,%u,%u)\r\n", + if(pasv == 1){ + if(*SAFAMILY(¶m->sincl) == AF_INET) + sprintf((char *)buf, "227 OK (%u,%u,%u,%u,%u,%u)\r\n", (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[0]), (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[1]), (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[2]), @@ -134,10 +136,16 @@ void * ftpprchild(struct clientparam* param) { (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[0]), (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[1]) ); - else sprintf((char *)buf, "227 OK (127,0,0,1,%u,%u)\r\n", + else sprintf((char *)buf, "227 OK (127,0,0,1,%u,%u)\r\n", (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[0]), (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[1]) - ); + ); + } + else { + sprintf((char *)buf, "227 OK (|||%u|)\r\n", + (unsigned)ntohs(*SAPORT(¶m->sincl)) + ); + } } else { unsigned long b1, b2, b3, b4;