Explorar o código

Redirection fixes

z3APA3A %!s(int64=11) %!d(string=hai) anos
pai
achega
f82d1e296b
Modificáronse 3 ficheiros con 11 adicións e 11 borrados
  1. 8 6
      src/auth.c
  2. 2 4
      src/common.c
  3. 1 1
      src/version.h

+ 8 - 6
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(&param->sinsl);
-				memset(&param->sinsl, 0, sizeof(param->sinsl));
-				*SAFAMILY(&param->sinsl) = AF_INET;
-				*(unsigned long *)SAADDR(&param->sinsl) = cur->redirip;
-				*SAPORT(&param->sinsl) = port;
+				unsigned short port = *SAPORT(&param->sinsr);
+				memset(&param->sinsl, 0, sizeof(param->sinsr));
+				*SAFAMILY(&param->sinsr) = AF_INET;
+				*(unsigned long *)SAADDR(&param->sinsr) = cur->redirip;
+				*SAPORT(&param->sinsr) = port;
 			}
-			else if(!cur->redirip && cur->redirport) *SAPORT(&param->sinsl) = cur->redirport;
+			else if(!cur->redirip && cur->redirport) *SAPORT(&param->sinsr) = cur->redirport;
 			else if(*SAFAMILY(&param->req) == AF_INET){
+				memset(&param->sinsr, 0, sizeof(param->sinsr));
+				*SAFAMILY(&param->sinsr) = AF_INET;
 				*(unsigned long *)SAADDR(&param->sinsr) = cur->redirip;
 				*SAPORT(&param->sinsr) = cur->redirport;
 			}

+ 2 - 4
src/common.c

@@ -619,12 +619,10 @@ int doconnect(struct clientparam * param){
 	if ((param->remsock=so._socket(*SAFAMILY(&param->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(&param->sinsr) == AF_INET)	
+	if(*SAFAMILY(&param->sinsr) == AF_INET6) memcpy(&param->sinsl, &param->srv->extsa6, sizeof(param->srv->extsa6));
+	else
 #endif
 		memcpy(&param->sinsl, &param->srv->extsa, sizeof(param->srv->extsa));
-#ifndef NOIPV6
-	else memcpy(&param->sinsl, &param->srv->extsa6, sizeof(param->srv->extsa6));
-#endif
 	if (param->srv->targetport && !*SAPORT(&param->sinsl) && ntohs(*SAPORT(&param->sincr)) > 1023) *SAPORT(&param->sinsl) = *SAPORT(&param->sincr);
 	if(so._bind(param->remsock, (struct sockaddr*)&param->sinsl, sizeof(param->sinsl))==-1) {
 #ifndef NOIPV6

+ 1 - 1
src/version.h

@@ -1,2 +1,2 @@
 #define VERSION "3proxy-0.8b-devel"
-#define BUILDDATE "141109215219"
+#define BUILDDATE "141126014759"