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){
|
static FILTER_ACTION transparent_filter_client(void *fo, struct clientparam * param, void** fc){
|
||||||
|
|
||||||
socklen_t len;
|
socklen_t len;
|
||||||
char addrbuf[60];
|
char addrbuf[64];
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
||||||
len = sizeof(param->req);
|
len = sizeof(param->req);
|
||||||
@ -44,10 +44,12 @@ static FILTER_ACTION transparent_filter_client(void *fo, struct clientparam * pa
|
|||||||
#ifdef SO_ORIGINAL_DST
|
#ifdef SO_ORIGINAL_DST
|
||||||
|
|
||||||
if(getsockopt(param->clisock,
|
if(getsockopt(param->clisock,
|
||||||
|
#ifndef NOIPV6
|
||||||
#ifdef SOL_IPV6
|
#ifdef SOL_IPV6
|
||||||
*SAFAMILY(¶m->sincr) == AF_INET6?SOL_IPV6:
|
*SAFAMILY(¶m->sincr) == AF_INET6?SOL_IPV6:
|
||||||
#endif
|
#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;
|
return PASS;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -56,13 +58,13 @@ static FILTER_ACTION transparent_filter_client(void *fo, struct clientparam * pa
|
|||||||
return REJECT;
|
return REJECT;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
if(memcmp(¶m->req, ¶m->sincl,sizeof(param->req))){
|
param->req = param->sincl;
|
||||||
param->req = param->sincl;
|
param->sincl = param->srv->intsa;
|
||||||
param->sincl = param->srv->intsa;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
pl->myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)addrbuf, sizeof(addrbuf));
|
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;
|
return PASS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user