mirror of
https://github.com/3proxy/3proxy.git
synced 2025-04-19 10:42:10 +08:00
Fix: IPv6 support in TransparentPlugin
This commit is contained in:
parent
8ad8a9ccd2
commit
cb217d79c1
@ -35,7 +35,7 @@ static void* transparent_filter_open(void * idata, struct srvparam * param){
|
||||
static FILTER_ACTION transparent_filter_client(void *fo, struct clientparam * param, void** fc){
|
||||
|
||||
socklen_t len;
|
||||
char addrbuf[60];
|
||||
char addrbuf[64];
|
||||
int i=0;
|
||||
|
||||
len = sizeof(param->req);
|
||||
@ -44,10 +44,12 @@ static FILTER_ACTION transparent_filter_client(void *fo, struct clientparam * pa
|
||||
#ifdef SO_ORIGINAL_DST
|
||||
|
||||
if(getsockopt(param->clisock,
|
||||
#ifndef NOIPV6
|
||||
#ifdef SOL_IPV6
|
||||
*SAFAMILY(¶m->sincr) == AF_INET6?SOL_IPV6:
|
||||
#endif
|
||||
SOL_IP, SO_ORIGINAL_DST,(struct sockaddr *) ¶m->req, &len) || (!memcmp(((struct sockaddr_in *)¶m->req)->sin_family == AF_INET6? (char *)&((struct sockaddr_in6 *)¶m->req)->sin6_addr : (char *)&((struct sockaddr_in *)¶m->req)->sin_addr.s_addr, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", (((struct sockaddr_in *)¶m->req)->sin_family == AF_INET6? 16:4)))){
|
||||
#endif
|
||||
SOL_IP, SO_ORIGINAL_DST,(struct sockaddr *) ¶m->req, &len) || !memcmp((char *)SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))){
|
||||
return PASS;
|
||||
}
|
||||
#else
|
||||
@ -56,13 +58,13 @@ static FILTER_ACTION transparent_filter_client(void *fo, struct clientparam * pa
|
||||
return REJECT;
|
||||
#endif
|
||||
#else
|
||||
if(memcmp(¶m->req, ¶m->sincl,sizeof(param->req))){
|
||||
param->req = param->sincl;
|
||||
param->sincl = param->srv->intsa;
|
||||
}
|
||||
param->req = param->sincl;
|
||||
param->sincl = param->srv->intsa;
|
||||
#endif
|
||||
pl->myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)addrbuf, sizeof(addrbuf));
|
||||
pl->parsehostname(addrbuf, param, ntohs(*SAPORT(¶m->req)));
|
||||
if(param->hostname) pl->myfree(param->hostname);
|
||||
param->hostname = pl->mystrdup(addrbuf);
|
||||
param->sinsr = param->req;
|
||||
return PASS;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user