aboutsummaryrefslogtreecommitdiff
path: root/net/3proxy
diff options
context:
space:
mode:
authorKurt Jaeger <pi@FreeBSD.org>2016-08-24 04:43:11 +0000
committerKurt Jaeger <pi@FreeBSD.org>2016-08-24 04:43:11 +0000
commit90838000935474a99d656acb418b32a7aa56fa7f (patch)
tree724cb5b5067a6a4bf5a39c9ea4c39e47749f7168 /net/3proxy
parent7be3af88009b5f385d5d2d1ce86799f1c1b4080e (diff)
downloadports-90838000935474a99d656acb418b32a7aa56fa7f.tar.gz
ports-90838000935474a99d656acb418b32a7aa56fa7f.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)
Notes
Notes: svn path=/head/; revision=420760
Diffstat (limited to 'net/3proxy')
-rw-r--r--net/3proxy/Makefile1
-rw-r--r--net/3proxy/files/patch-src_common.c12
-rw-r--r--net/3proxy/files/patch-src_ftp.c40
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 *)&param->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 *)&param->sinsl, &sasize)){return INVALID_SOCKET;}
++ sasize = sizeof(param->sinsr);
++ if(so._getpeername(param->remsock, (struct sockaddr *)&param->sinsr, &sasize)){return INVALID_SOCKET;}
+ rem = param->remsock;
+ param->remsock = INVALID_SOCKET;
+ param->req = param->sinsr;
+ *SAPORT(&param->req) = *SAPORT(&param->sinsr) = htons((unsigned short)((b5<<8)^b6));
++ *SAPORT(&param->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(&param->sinsl, 0, sizeof(param->sinsl));
++ if((param->res = (*param->srv->authfunc)(param))) {
++ param->remsock = rem;
++ return INVALID_SOCKET;
++ }
+ }
+ param->operation = i;
+ s = param->remsock;