Explorar o código

Support for 'extip' and 'smtp' parent types added

z3APA3A %!s(int64=10) %!d(string=hai) anos
pai
achega
3cc9796583
Modificáronse 5 ficheiros con 18 adicións e 13 borrados
  1. 6 5
      src/auth.c
  2. 6 4
      src/common.c
  3. 2 1
      src/conf.c
  4. 2 2
      src/proxymain.c
  5. 2 1
      src/structures.h

+ 6 - 5
src/auth.c

@@ -241,7 +241,10 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
 			r2 = (myrand(param, sizeof(struct clientparam))%1000);
 		}
 		if(!connected){
-			if(SAISNULL(&cur->addr) && !*SAPORT(&cur->addr)){
+			if(cur->type == R_EXTIP){
+				memcpy(&param->sinsl, &cur->addr, sizeof(cur->addr)); 
+			}
+			else if(SAISNULL(&cur->addr) && !*SAPORT(&cur->addr)){
 				if(cur->extuser){
 					if(param->extusername)
 						myfree(param->extusername);
@@ -266,11 +269,9 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
 					case R_ICQ:
 						param->redirectfunc = icqprchild;
 						break;
-/*
-					case R_MSN:
-						param->redirectfunc = msnprchild;
+					case R_SMTP:
+						param->redirectfunc = smtppchild;
 						break;
-*/
 					default:
 						param->redirectfunc = proxychild;
 				}

+ 6 - 4
src/common.c

@@ -674,12 +674,14 @@ int doconnect(struct clientparam * param){
 	}
 #endif
 
+	if(SAISNULL(&param->sinsl)){
 #ifndef NOIPV6
-	if(*SAFAMILY(&param->sinsr) == AF_INET6) memcpy(&param->sinsl, &param->srv->extsa6, sizeof(param->srv->extsa6));
-	else
+		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));
-	*SAPORT(&param->sinsl) = 0;
+			memcpy(&param->sinsl, &param->srv->extsa, sizeof(param->srv->extsa));
+		*SAPORT(&param->sinsl) = 0;
+	}
 	if(so._bind(param->remsock, (struct sockaddr*)&param->sinsl, SASIZE(&param->sinsl))==-1) {
 		return 12;
 	}

+ 2 - 1
src/conf.c

@@ -705,7 +705,8 @@ static int h_parent(int argc, unsigned char **argv){
 	else if(!strcmp((char *)argv[2], "ftp"))chains->type = R_FTP;
 	else if(!strcmp((char *)argv[2], "admin"))chains->type = R_ADMIN;
 	else if(!strcmp((char *)argv[2], "icq"))chains->type = R_ICQ;
-	else if(!strcmp((char *)argv[2], "msn"))chains->type = R_MSN;
+	else if(!strcmp((char *)argv[2], "extip"))chains->type = R_EXTIP;
+	else if(!strcmp((char *)argv[2], "smtp"))chains->type = R_SMTP;
 	else {
 		fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]);
 		return(4);

+ 2 - 2
src/proxymain.c

@@ -751,9 +751,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){
  memcpy(&param->sincr, &srv->intsa, sizeof(param->sincr));
  memcpy(&param->sincl, &srv->intsa, sizeof(param->sincl));
 #ifndef NOIPV6
- memcpy(&param->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl));
+ memcpy(&param->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsr));
 #else
- memcpy(&param->sinsr, &srv->extsa, sizeof(param->sinsl));
+ memcpy(&param->sinsr, &srv->extsa, sizeof(param->sinsr));
 #endif
 }
 

+ 2 - 1
src/structures.h

@@ -217,6 +217,7 @@ typedef enum {
 	R_SOCKS5,
 	R_HTTP,
 	R_POP3,
+	R_SMTP,
 	R_FTP,
 	R_CONNECTP,
 	R_SOCKS4P,
@@ -225,7 +226,7 @@ typedef enum {
 	R_SOCKS5B,
 	R_ADMIN,
 	R_ICQ,
-	R_MSN
+	R_EXTIP
 } REDIRTYPE;
 
 struct chain {