mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 10:35:40 +08:00
more changes for IPv6 client support
This commit is contained in:
parent
10bc0db2a8
commit
db5c4b1255
35
src/auth.c
35
src/auth.c
@ -205,16 +205,12 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
int done = 0;
|
||||
struct chain * cur;
|
||||
struct chain * redir = NULL;
|
||||
unsigned long targetip;
|
||||
unsigned short targetport;
|
||||
int r2;
|
||||
|
||||
if(param->remsock != INVALID_SOCKET) {
|
||||
return 0;
|
||||
}
|
||||
targetip = param->req.sin_addr.s_addr;
|
||||
targetport = param->req.sin_port;
|
||||
if(!targetip || !targetport) return 100;
|
||||
if(!memcmp(SAADDR(¶m->req),"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",SAADDRLEN(¶m->req)) || !*SAPORT(¶m->req)) return 100;
|
||||
|
||||
r2 = (myrand(param, sizeof(struct clientparam))%1000);
|
||||
|
||||
@ -270,11 +266,16 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else if(!cur->redirip && cur->redirport) param->extport = cur->redirport;
|
||||
else if(!cur->redirport && cur->redirip) param->extip = cur->redirip;
|
||||
else {
|
||||
param->sins.sin_port = cur->redirport;
|
||||
param->sins.sin_addr.s_addr = cur->redirip;
|
||||
else if(!cur->redirport && cur->redirip) {
|
||||
unsigned short port = *SAPORT(¶m->sinsl);
|
||||
*SAFAMILY(¶m->sinsl) = AF_INET;
|
||||
*(unsigned long *)SAADDR(¶m->sinsl) = cur->redirip;
|
||||
*SAPORT(¶m->sinsl) = port;
|
||||
}
|
||||
else if(!cur->redirip && cur->redirport) *SAPORT(¶m->sinsl) = cur->redirport;
|
||||
else if(*SAFAMILY(¶m->req) == AF_INET){
|
||||
*(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip;
|
||||
*SAPORT(¶m->sinsr) = cur->redirport;
|
||||
}
|
||||
|
||||
if((res = alwaysauth(param))){
|
||||
@ -282,7 +283,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
}
|
||||
}
|
||||
else {
|
||||
res = redir?clientnegotiate(redir, param, cur->redirip, cur->redirport):0;
|
||||
res = (redir && *SAFAMILY(¶m->req) == AF_INET)?clientnegotiate(redir, param, cur->redirip, cur->redirport):0;
|
||||
if(res) return res;
|
||||
}
|
||||
redir = cur;
|
||||
@ -305,7 +306,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
}
|
||||
|
||||
if(!connected) return 9;
|
||||
return redir?clientnegotiate(redir, param, targetip, targetport):0;
|
||||
return (redir && *SAFAMILY(¶m->req) == AF_INET)?clientnegotiate(redir, param, *(unsigned long *)SAADDR(¶m->req), *SAPORT(¶m->req)):0;
|
||||
}
|
||||
|
||||
int IPInentry(struct sockaddr *sa, struct iplist *ipentry){
|
||||
@ -339,7 +340,7 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){
|
||||
}
|
||||
if(!ipentry) return 0;
|
||||
}
|
||||
if((acentry->dst && param->req.sin_addr.s_addr) || (acentry->dstnames && param->hostname)) {
|
||||
if((acentry->dst && memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) || (acentry->dstnames && param->hostname)) {
|
||||
for(ipentry = acentry->dst; ipentry; ipentry = ipentry->next)
|
||||
if(IPInentry((struct sockaddr *)¶m->req, ipentry)) {
|
||||
break;
|
||||
@ -374,10 +375,10 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){
|
||||
}
|
||||
if(!ipentry && !hstentry) return 0;
|
||||
}
|
||||
if(acentry->ports && param->req.sin_port) {
|
||||
if(acentry->ports && *SAPORT(¶m->req)) {
|
||||
for (portentry = acentry->ports; portentry; portentry = portentry->next)
|
||||
if(ntohs(param->req.sin_port) >= portentry->startport &&
|
||||
ntohs(param->req.sin_port) <= portentry->endport) {
|
||||
if(ntohs(*SAPORT(¶m->req)) >= portentry->startport &&
|
||||
ntohs(*SAPORT(¶m->req)) <= portentry->endport) {
|
||||
break;
|
||||
}
|
||||
if(!portentry) return 0;
|
||||
@ -970,7 +971,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa
|
||||
struct sockaddr_in sin, *sinsp;
|
||||
|
||||
memset(&sin, 0, sizeof(sin));
|
||||
sinsp = (param && !makeauth)? ¶m->sins : &sin;
|
||||
sinsp = (param && !makeauth && *SAFAMILY(¶m->sinsr) == AF_INET)? (struct sockaddr_in *)¶m->sinsr : &sin;
|
||||
|
||||
|
||||
if((sock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) break;
|
||||
|
76
src/common.c
76
src/common.c
@ -214,22 +214,26 @@ int ceparseargs(const char *str){
|
||||
#endif
|
||||
|
||||
int parsehostname(char *hostname, struct clientparam *param, unsigned short port){
|
||||
char *sp;
|
||||
char *sp,*se;
|
||||
|
||||
if(!hostname || !*hostname)return 1;
|
||||
if ( (sp = strchr(hostname, ':')) ) *sp = 0;
|
||||
if(*hostname == '[') se=strchr(hostname, ']');
|
||||
if ( (sp = strchr(se?se:hostname, ':')) ) *sp = 0;
|
||||
if(se){
|
||||
*se = 0;
|
||||
}
|
||||
if(hostname != param->hostname){
|
||||
if(param->hostname) myfree(param->hostname);
|
||||
param->hostname = (unsigned char *)mystrdup(hostname);
|
||||
param->hostname = (unsigned char *)mystrdup(hostname + (se!=0));
|
||||
}
|
||||
if(sp){
|
||||
port = atoi(sp+1);
|
||||
*sp = ':';
|
||||
}
|
||||
param->req.sin_port=htons(port);
|
||||
param->req.sin_addr.s_addr = getip(param->hostname);
|
||||
param->sins.sin_addr.s_addr = 0;
|
||||
param->sins.sin_port = 0;
|
||||
if(se) *se = ']';
|
||||
getip46(param->srv->family, param->hostname + (se!=0), (struct sockaddr *)¶m->req);
|
||||
*SAPORT(¶m->req) = htons(port);
|
||||
memset(¶m->sinsr, 0, sizeof(param->sinsr));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -318,7 +322,6 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char
|
||||
|
||||
long timezone;
|
||||
unsigned delay;
|
||||
struct in_addr tmpia;
|
||||
|
||||
|
||||
|
||||
@ -432,7 +435,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else i += myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + i, 64);
|
||||
else i += myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf + i, 64);
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
@ -461,14 +464,13 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char
|
||||
}
|
||||
break;
|
||||
case 'e':
|
||||
tmpia.s_addr = param->extip;
|
||||
i += myinet_ntop(AF_INET, &tmpia, (char *)buf + i, 64);
|
||||
i += myinet_ntop(*SAFAMILY(¶m->sinsl), SAADDR(¶m->sinsl), (char *)buf + i, 64);
|
||||
break;
|
||||
case 'C':
|
||||
i += myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + i, 64);
|
||||
break;
|
||||
case 'R':
|
||||
i += myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + i, 64);
|
||||
i += myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf + i, 64);
|
||||
break;
|
||||
case 'Q':
|
||||
i += myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)buf + i, 64);
|
||||
@ -482,11 +484,11 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char
|
||||
i += (int)strlen((char *)buf+i);
|
||||
break;
|
||||
case 'r':
|
||||
sprintf((char *)buf+i, "%hu", ntohs(param->sins.sin_port));
|
||||
sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->sinsr)));
|
||||
i += (int)strlen((char *)buf+i);
|
||||
break;
|
||||
case 'q':
|
||||
sprintf((char *)buf+i, "%hu", ntohs(param->req.sin_port));
|
||||
sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->req)));
|
||||
i += (int)strlen((char *)buf+i);
|
||||
break;
|
||||
case 'I':
|
||||
@ -595,58 +597,52 @@ void logsyslog(struct clientparam * param, const unsigned char *s) {
|
||||
#endif
|
||||
|
||||
int doconnect(struct clientparam * param){
|
||||
SASIZETYPE size = sizeof(param->sins);
|
||||
struct sockaddr_in bindsa;
|
||||
SASIZETYPE size = sizeof(param->sinsr);
|
||||
|
||||
if (*SAFAMILY(¶m->sincr) == *SAFAMILY(¶m->req) && !memcmp(SAADDR(¶m->sincr), SAADDR(¶m->req), SASIZE(param->req)) &&
|
||||
if (*SAFAMILY(¶m->sincr) == *SAFAMILY(¶m->req) && !memcmp(SAADDR(¶m->sincr), SAADDR(¶m->req), SASIZE(¶m->req)) &&
|
||||
*SAPORT(¶m->sincr) == *SAPORT(¶m->req)) return 519;
|
||||
|
||||
if (param->operation == ADMIN || param->operation == DNSRESOLVE || param->operation == BIND || param->operation == UDPASSOC)
|
||||
return 0;
|
||||
if (param->remsock != INVALID_SOCKET){
|
||||
if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sins, &size)==-1) {return (15);}
|
||||
if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sinsr, &size)==-1) {return (15);}
|
||||
}
|
||||
else {
|
||||
struct linger lg;
|
||||
|
||||
if(!param->sins.sin_addr.s_addr)
|
||||
if(!(param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr)) return 100;
|
||||
if(!param->sins.sin_port)param->sins.sin_port = param->req.sin_port;
|
||||
if ((param->remsock=so._socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);}
|
||||
if(!memcmp(SAADDR(¶m->sinsr), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->sinsr))){
|
||||
if(!memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) return 100;
|
||||
*SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req);
|
||||
memcpy(SAADDR(¶m->sinsr), SAADDR(¶m->req), SAADDRLEN(¶m->req));
|
||||
}
|
||||
if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req);
|
||||
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));
|
||||
memset(&bindsa, 0, sizeof(bindsa));
|
||||
bindsa.sin_family = AF_INET;
|
||||
bindsa.sin_port = param->extport;
|
||||
bindsa.sin_addr.s_addr = param->extip;
|
||||
if (param->srv->targetport && !bindsa.sin_port && ntohs(*SAPORT(¶m->sincr)) > 1023) bindsa.sin_port = *SAPORT(¶m->sincr);
|
||||
if(so._bind(param->remsock, (struct sockaddr*)&bindsa, sizeof(bindsa))==-1) {
|
||||
memset(&bindsa, 0, sizeof(bindsa));
|
||||
bindsa.sin_family = AF_INET;
|
||||
bindsa.sin_addr.s_addr = param->extip;
|
||||
bindsa.sin_port = 0;
|
||||
if(so._bind(param->remsock, (struct sockaddr*)&bindsa, sizeof(bindsa))==-1) {
|
||||
if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa));
|
||||
else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6));
|
||||
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) {
|
||||
if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa));
|
||||
else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6));
|
||||
if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) {
|
||||
return 12;
|
||||
}
|
||||
}
|
||||
|
||||
param->sins.sin_family = AF_INET;
|
||||
if(param->operation >= 256 || (param->operation & CONNECT)){
|
||||
#ifdef _WIN32
|
||||
unsigned long ul = 1;
|
||||
#endif
|
||||
if(so._connect(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins))) {return (13);}
|
||||
if(so._connect(param->remsock,(struct sockaddr *)¶m->sinsr,sizeof(param->sinsr))) {return (13);}
|
||||
param->nconnects++;
|
||||
#ifdef _WIN32
|
||||
ioctlsocket(param->remsock, FIONBIO, &ul);
|
||||
#else
|
||||
fcntl(param->remsock,F_SETFL,O_NONBLOCK);
|
||||
#endif
|
||||
if(so._getsockname(param->remsock, (struct sockaddr *)&bindsa, &size)==-1) {return (15);}
|
||||
param->extip = bindsa.sin_addr.s_addr;
|
||||
}
|
||||
else {
|
||||
if(so._getsockname(param->remsock, (struct sockaddr *)¶m->sins, &size)==-1) {return (15);}
|
||||
size = sizeof(param->sinsl);
|
||||
}
|
||||
if(so._getsockname(param->remsock, (struct sockaddr *)¶m->sinsl, &size)==-1) {return (15);}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -633,20 +633,12 @@ static void * ef_client_clisa(struct node * node){
|
||||
return &((struct clientparam *)node->value) -> sincr;
|
||||
}
|
||||
|
||||
static void * ef_client_srvip(struct node * node){
|
||||
return &((struct clientparam *)node->value) -> sins.sin_addr.s_addr;
|
||||
static void * ef_client_srvsa(struct node * node){
|
||||
return &((struct clientparam *)node->value) -> sinsr;
|
||||
}
|
||||
|
||||
static void * ef_client_reqip(struct node * node){
|
||||
return &((struct clientparam *)node->value) -> req.sin_addr.s_addr;
|
||||
}
|
||||
|
||||
static void * ef_client_reqport(struct node * node){
|
||||
return &((struct clientparam *)node->value) -> req.sin_port;
|
||||
}
|
||||
|
||||
static void * ef_client_srvport(struct node * node){
|
||||
return &((struct clientparam *)node->value) -> sins.sin_port;
|
||||
static void * ef_client_reqsa(struct node * node){
|
||||
return &((struct clientparam *)node->value) -> req;
|
||||
}
|
||||
|
||||
static void * ef_client_pwtype(struct node * node){
|
||||
@ -784,15 +776,13 @@ static struct property prop_client[] = {
|
||||
{prop_client + 10, "username", ef_client_username, TYPE_STRING, "client username"},
|
||||
{prop_client + 11, "password", ef_client_password, TYPE_STRING, "client password"},
|
||||
{prop_client + 12, "clisa", ef_client_clisa, TYPE_SA, "client sa"},
|
||||
{prop_client + 13, "srvip", ef_client_srvip, TYPE_IP, "target server ip"},
|
||||
{prop_client + 14, "srvport", ef_client_srvport, TYPE_PORT, "target server port"},
|
||||
{prop_client + 15, "reqip", ef_client_reqip, TYPE_IP, "requested server ip"},
|
||||
{prop_client + 16, "reqport", ef_client_reqport, TYPE_PORT, "requested server port"},
|
||||
{prop_client + 17, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"},
|
||||
{prop_client + 18, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"},
|
||||
{prop_client + 19, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"},
|
||||
{prop_client + 20, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"},
|
||||
{prop_client + 21, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"},
|
||||
{prop_client + 13, "srvsa", ef_client_srvsa, TYPE_IP, "target server sa"},
|
||||
{prop_client + 14, "reqsa", ef_client_reqsa, TYPE_IP, "requested server sa"},
|
||||
{prop_client + 15, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"},
|
||||
{prop_client + 16, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"},
|
||||
{prop_client + 17, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"},
|
||||
{prop_client + 18, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"},
|
||||
{prop_client + 19, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"},
|
||||
{NULL, "next", ef_client_next, TYPE_CLIENT, "next"}
|
||||
|
||||
|
||||
|
23
src/dnspr.c
23
src/dnspr.c
@ -43,10 +43,10 @@ void * dnsprchild(struct clientparam* param) {
|
||||
RETURN(818);
|
||||
}
|
||||
ioctlsocket(param->clisock, FIONBIO, &ul);
|
||||
size = sizeof(struct sockaddr_in);
|
||||
if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sins, &size)) {RETURN(21);};
|
||||
size = sizeof(param->sinsl);
|
||||
if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sinsl, &size)) {RETURN(21);};
|
||||
if(so._setsockopt(param->clisock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&ul, sizeof(int))) {RETURN(820);};
|
||||
if(so._bind(param->clisock,(struct sockaddr *)¶m->sins,sizeof(struct sockaddr_in))) {
|
||||
if(so._bind(param->clisock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) {
|
||||
RETURN(822);
|
||||
}
|
||||
|
||||
@ -136,20 +136,21 @@ void * dnsprchild(struct clientparam* param) {
|
||||
#else
|
||||
fcntl(param->remsock,F_SETFL,O_NONBLOCK);
|
||||
#endif
|
||||
param->sins.sin_family = AF_INET;
|
||||
param->sins.sin_port = htons(0);
|
||||
param->sins.sin_addr.s_addr = htonl(0);
|
||||
if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(struct sockaddr_in))) {
|
||||
*SAFAMILY(¶m->sinsl) = AF_INET;
|
||||
*SAPORT(¶m->sinsl) = htons(0);
|
||||
*(unsigned long*)SAADDR(¶m->sinsl) = htonl(0);
|
||||
if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) {
|
||||
RETURN(819);
|
||||
}
|
||||
param->sins.sin_addr.s_addr = nservers[0];
|
||||
param->sins.sin_port = htons(53);
|
||||
if(socksendto(param->remsock, (struct sockaddr *)¶m->sins, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){
|
||||
*SAFAMILY(¶m->sinsr) = AF_INET;
|
||||
*(unsigned long*)SAADDR(¶m->sinsr) = nservers[0];
|
||||
*SAPORT(¶m->sinsr) = htons(53);
|
||||
if(socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){
|
||||
RETURN(820);
|
||||
}
|
||||
param->statscli64 += i;
|
||||
param->nwrites++;
|
||||
len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, buf, BUFSIZE, 15000);
|
||||
len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sinsr, buf, BUFSIZE, 15000);
|
||||
if(len <= 13) {
|
||||
RETURN(821);
|
||||
}
|
||||
|
10
src/ftp.c
10
src/ftp.c
@ -190,12 +190,14 @@ SOCKET ftpdata(struct clientparam *param){
|
||||
if(sscanf(sb+1, "%lu,%lu,%lu,%lu,%hu,%hu", &b1, &b2, &b3, &b4, &b5, &b6)!=6) return INVALID_SOCKET;
|
||||
rem = param->remsock;
|
||||
param->remsock = INVALID_SOCKET;
|
||||
param->req.sin_family = AF_INET;
|
||||
param->req.sin_port = param->sins.sin_port = htons((unsigned short)((b5<<8)^b6));
|
||||
param->req.sin_addr.s_addr = param->sins.sin_addr.s_addr = htonl((b1<<24)^(b2<<16)^(b3<<8)^b4);
|
||||
memcpy(¶m->req,¶m->sinsr,sizeof(param->req));
|
||||
*SAPORT(¶m->req) = *SAPORT(¶m->sinsr) = htons((unsigned short)((b5<<8)^b6));
|
||||
i = param->operation;
|
||||
param->operation = FTP_DATA;
|
||||
if((param->res = (*param->srv->authfunc)(param))) return INVALID_SOCKET;
|
||||
if((param->res = (*param->srv->authfunc)(param))) {
|
||||
param->remsock = rem;
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
param->operation = i;
|
||||
s = param->remsock;
|
||||
param->remsock = rem;
|
||||
|
@ -189,7 +189,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) {
|
||||
port = starttrafcorrect->port;
|
||||
g_s = starttrafcorrect->p_service;
|
||||
if (starttrafcorrect->p_service == S_NOSERVICE) g_s = param->service;
|
||||
if (starttrafcorrect->port <= 0) port = myhtons(param->sins.sin_port);
|
||||
if (starttrafcorrect->port <= 0) port = myhtons(*SAPORT(¶m->sinsr));
|
||||
|
||||
#ifndef NOPSTDINT
|
||||
statssrv_before = param->statssrv64;
|
||||
@ -199,7 +199,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) {
|
||||
statscli_before = param->statscli;
|
||||
#endif
|
||||
rule++;
|
||||
if (((g_s == param->service) && (port == myhtons(param->sins.sin_port))) ||
|
||||
if (((g_s == param->service) && (port == myhtons(*SAPORT(¶m->sinsr)))) ||
|
||||
( ((starttrafcorrect->type == UDP) &&
|
||||
((param->operation == UDPASSOC)||
|
||||
(param->operation == DNSRESOLVE)||
|
||||
@ -240,7 +240,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) {
|
||||
}
|
||||
if (DBGLEVEL == 1) {
|
||||
#ifndef NOPSTDINT
|
||||
fprintf(stdout, "Port=%hd; Before: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; After: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv64, param->statscli64,param->nreads,param->nwrites,rule);
|
||||
fprintf(stdout, "Port=%hd; Before: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; After: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(*SAPORT(¶m->sinsr)), statssrv_before, statscli_before, param->statssrv64, param->statscli64,param->nreads,param->nwrites,rule);
|
||||
#else
|
||||
fprintf(stdout, "Port=%hd; Before: srv=%lu, cli=%lu; After: srv=%lu, cli=%lu; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv, param->statscli,param->nreads,param->nwrites,rule);
|
||||
#endif
|
||||
@ -250,7 +250,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) {
|
||||
}
|
||||
}
|
||||
if ((!ok) && (DBGLEVEL == 1)) {
|
||||
fprintf(stdout, "No rules specifed: service=%d, port=%d, operation=%d", param->service, param->sins.sin_port,param->operation);
|
||||
fprintf(stdout, "No rules specifed: service=%d, port=%d, operation=%d", param->service, *SAPORT(¶m->sinsr),param->operation);
|
||||
}
|
||||
origlogfunc(param, pz);
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
break;
|
||||
case '4':
|
||||
case '6':
|
||||
srv.family = atoi(argv[i]);
|
||||
srv.family = atoi(argv[i]+1);
|
||||
break;
|
||||
case 'b':
|
||||
srv.bufsize = atoi(argv[i]+2);
|
||||
@ -579,7 +579,7 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){
|
||||
}
|
||||
if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget);
|
||||
memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr));
|
||||
memcpy(¶m->sinsl, &srv->extsa, sizeof(param->sinsl));
|
||||
memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl));
|
||||
}
|
||||
|
||||
void srvfree(struct srvparam * srv){
|
||||
|
@ -1,2 +1,2 @@
|
||||
#define VERSION "3proxy-0.8b-devel"
|
||||
#define BUILDDATE "141019215116"
|
||||
#define BUILDDATE "141021055913"
|
||||
|
Loading…
Reference in New Issue
Block a user