From f82d1e296b09fc109e546e6f37ec14a50279d8ad Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 26 Nov 2014 01:50:14 +0300 Subject: [PATCH] Redirection fixes --- src/auth.c | 14 ++++++++------ src/common.c | 6 ++---- src/version.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/auth.c b/src/auth.c index cfbf500..912260c 100644 --- a/src/auth.c +++ b/src/auth.c @@ -267,14 +267,16 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ return 0; } else if(!cur->redirport && cur->redirip) { - unsigned short port = *SAPORT(¶m->sinsl); - memset(¶m->sinsl, 0, sizeof(param->sinsl)); - *SAFAMILY(¶m->sinsl) = AF_INET; - *(unsigned long *)SAADDR(¶m->sinsl) = cur->redirip; - *SAPORT(¶m->sinsl) = port; + unsigned short port = *SAPORT(¶m->sinsr); + memset(¶m->sinsl, 0, sizeof(param->sinsr)); + *SAFAMILY(¶m->sinsr) = AF_INET; + *(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip; + *SAPORT(¶m->sinsr) = port; } - else if(!cur->redirip && cur->redirport) *SAPORT(¶m->sinsl) = cur->redirport; + else if(!cur->redirip && cur->redirport) *SAPORT(¶m->sinsr) = cur->redirport; else if(*SAFAMILY(¶m->req) == AF_INET){ + memset(¶m->sinsr, 0, sizeof(param->sinsr)); + *SAFAMILY(¶m->sinsr) = AF_INET; *(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip; *SAPORT(¶m->sinsr) = cur->redirport; } diff --git a/src/common.c b/src/common.c index fdf586a..bfe1146 100644 --- a/src/common.c +++ b/src/common.c @@ -619,12 +619,10 @@ int doconnect(struct clientparam * param){ if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); #ifndef NOIPV6 - if(*SAFAMILY(¶m->sinsr) == AF_INET) + if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); + else #endif memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); -#ifndef NOIPV6 - else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); -#endif if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr); if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { #ifndef NOIPV6 diff --git a/src/version.h b/src/version.h index 17afac9..07ee2a2 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141109215219" +#define BUILDDATE "141126014759"