diff options
author | pi <pi@FreeBSD.org> | 2016-08-24 12:43:11 +0800 |
---|---|---|
committer | pi <pi@FreeBSD.org> | 2016-08-24 12:43:11 +0800 |
commit | bd7e7813e2aec8c4dac1b1680a45620b2a4d5af4 (patch) | |
tree | 724cb5b5067a6a4bf5a39c9ea4c39e47749f7168 /net | |
parent | 57e6fa9542867c91f91d1f77594ffe19282fc9f9 (diff) | |
download | freebsd-ports-gnome-bd7e7813e2aec8c4dac1b1680a45620b2a4d5af4.tar.gz freebsd-ports-gnome-bd7e7813e2aec8c4dac1b1680a45620b2a4d5af4.tar.zst freebsd-ports-gnome-bd7e7813e2aec8c4dac1b1680a45620b2a4d5af4.zip |
net/3proxy: fix ftppr
- See also: https://github.com/z3APA3A/3proxy/issues/68
PR: 209463
Submitted by: emz@norma.perm.ru
Approved by: Pavel Timofeev <timp87@gmail.com> (maintainer)
Diffstat (limited to 'net')
-rw-r--r-- | net/3proxy/Makefile | 1 | ||||
-rw-r--r-- | net/3proxy/files/patch-src_common.c | 12 | ||||
-rw-r--r-- | net/3proxy/files/patch-src_ftp.c | 40 |
3 files changed, 53 insertions, 0 deletions
diff --git a/net/3proxy/Makefile b/net/3proxy/Makefile index 0f93a0db1710..01f48aa907da 100644 --- a/net/3proxy/Makefile +++ b/net/3proxy/Makefile @@ -4,6 +4,7 @@ PORTNAME= 3proxy PORTVERSION= 0.8.6 DISTVERSIONPREFIX= ${PORTNAME}- +PORTREVISION= 1 CATEGORIES= net MAINTAINER= timp87@gmail.com diff --git a/net/3proxy/files/patch-src_common.c b/net/3proxy/files/patch-src_common.c new file mode 100644 index 000000000000..1cfaa16d09f8 --- /dev/null +++ b/net/3proxy/files/patch-src_common.c @@ -0,0 +1,12 @@ +--- src/common.c.orig 2016-08-24 03:41:59 UTC ++++ src/common.c +@@ -692,8 +692,8 @@ int doconnect(struct clientparam * param + #else + fcntl(param->remsock,F_SETFL,O_NONBLOCK); + #endif +- size = sizeof(param->sinsl); + } ++ size = sizeof(param->sinsl); + if(so._getsockname(param->remsock, (struct sockaddr *)¶m->sinsl, &size)==-1) {return (15);} + } + return 0; diff --git a/net/3proxy/files/patch-src_ftp.c b/net/3proxy/files/patch-src_ftp.c new file mode 100644 index 000000000000..86c1a2d0bcc5 --- /dev/null +++ b/net/3proxy/files/patch-src_ftp.c @@ -0,0 +1,40 @@ +--- src/ftp.c.orig 2016-08-24 03:43:37 UTC ++++ src/ftp.c +@@ -174,6 +174,7 @@ SOCKET ftpdata(struct clientparam *param + SOCKET s = INVALID_SOCKET, rem; + unsigned long b1, b2, b3, b4; + unsigned short b5, b6; ++ SASIZETYPE sasize; + + if(socksend(param->remsock, (unsigned char *)"PASV\r\n", 6, conf.timeouts[STRING_S]) != 6){ + return INVALID_SOCKET; +@@ -187,15 +188,27 @@ SOCKET ftpdata(struct clientparam *param + buf[i-2] = 0; + if(!(sb = strchr(buf+4, '(')) || !(se= strchr(sb, ')'))) return INVALID_SOCKET; + if(sscanf(sb+1, "%lu,%lu,%lu,%lu,%hu,%hu", &b1, &b2, &b3, &b4, &b5, &b6)!=6) return INVALID_SOCKET; ++ sasize = sizeof(param->sinsl); ++ if(so._getsockname(param->remsock, (struct sockaddr *)¶m->sinsl, &sasize)){return INVALID_SOCKET;} ++ sasize = sizeof(param->sinsr); ++ if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sinsr, &sasize)){return INVALID_SOCKET;} + rem = param->remsock; + param->remsock = INVALID_SOCKET; + param->req = param->sinsr; + *SAPORT(¶m->req) = *SAPORT(¶m->sinsr) = htons((unsigned short)((b5<<8)^b6)); ++ *SAPORT(¶m->sinsl) = 0; + i = param->operation; + param->operation = FTP_DATA; + if((param->res = (*param->srv->authfunc)(param))) { +- param->remsock = rem; +- return INVALID_SOCKET; ++ if(param->remsock != INVALID_SOCKET) { ++ so._closesocket(param->remsock); ++ param->remsock = INVALID_SOCKET; ++ } ++ memset(¶m->sinsl, 0, sizeof(param->sinsl)); ++ if((param->res = (*param->srv->authfunc)(param))) { ++ param->remsock = rem; ++ return INVALID_SOCKET; ++ } + } + param->operation = i; + s = param->remsock; |