mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 18:45:40 +08:00
intport removed, SA macro added
This commit is contained in:
parent
bc7ca3af09
commit
7897b009a1
1
.gitignore
vendored
1
.gitignore
vendored
@ -27,6 +27,7 @@ doc/html/index.html
|
|||||||
verfile.sh
|
verfile.sh
|
||||||
Makefile
|
Makefile
|
||||||
Changelog
|
Changelog
|
||||||
|
res
|
||||||
copytgz.sh
|
copytgz.sh
|
||||||
*~.nib
|
*~.nib
|
||||||
local.properties
|
local.properties
|
||||||
|
50
src/common.c
50
src/common.c
@ -58,7 +58,7 @@ struct extparam conf = {
|
|||||||
NULL,
|
NULL,
|
||||||
{AF_INET},
|
{AF_INET},
|
||||||
INADDR_ANY,
|
INADDR_ANY,
|
||||||
0, 0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
doconnect,
|
doconnect,
|
||||||
@ -463,7 +463,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char
|
|||||||
i += myinet_ntoa(param->req.sin_addr, (char *)buf + i);
|
i += myinet_ntoa(param->req.sin_addr, (char *)buf + i);
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
sprintf((char *)buf+i, "%hu", ntohs(param->srv->intport));
|
sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->srv->intsa)));
|
||||||
i += (int)strlen((char *)buf+i);
|
i += (int)strlen((char *)buf+i);
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
@ -720,60 +720,66 @@ unsigned long getip(unsigned char *name){
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NOIPV6
|
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){
|
||||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa){
|
#ifndef NOIPV6
|
||||||
#else
|
int ndots=0, ncols=0, nhex=0;
|
||||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa){
|
|
||||||
int ndots=0, ncols=0;
|
|
||||||
struct addrinfo *ai, *iter;
|
struct addrinfo *ai, *iter;
|
||||||
struct sockaddr *sa4, *sa6;
|
struct sockaddr *sa4=NULL, *sa6=NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if(!sa) return 0;
|
if(!sa) return 0;
|
||||||
if(!family) {
|
if(!family) {
|
||||||
#endif
|
#endif
|
||||||
memset(sa, 0, sizeof(struct sockaddr_in));
|
|
||||||
((struct sockaddr_in *)sa)->sin_family = AF_INET;
|
((struct sockaddr_in *)sa)->sin_family = AF_INET;
|
||||||
return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0;
|
return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0;
|
||||||
#ifndef NOIPV6
|
#ifndef NOIPV6
|
||||||
}
|
}
|
||||||
for(i=0; name[i]; i++){
|
for(i=0; name[i]; i++){
|
||||||
if(name[i] == '.'){
|
if(name[i] == '.'){
|
||||||
if(++ndots > 3) break;
|
if(++ndots > 3) {
|
||||||
continue;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(name[i] == ':'){
|
else if(name[i] == ':'){
|
||||||
if(++ndots > 7) break;
|
if(++ncols > 7) {
|
||||||
continue;
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(name[i] == '%' || (name[i] >= 'a' && name[i] <= 'f') || (name[i] >= 'A' && name[i] <= 'F')){
|
||||||
|
nhex++;
|
||||||
|
}
|
||||||
|
else if(name[i] <'0' || name[i] >'9') {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if(name[i] <'0' || name[i] >'9') break;
|
|
||||||
}
|
}
|
||||||
if(!name[i]){
|
if(!name[i]){
|
||||||
if(ndots == 3 && ncols == 0){
|
if(ndots == 3 && ncols == 0 && nhex == 0){
|
||||||
return inet_pton(AF_INET, name, sa)? AF_INET : 0;
|
*SAFAMILY(sa)=AF_INET;
|
||||||
|
return inet_pton(AF_INET, name, SAADDR(sa))? AF_INET : 0;
|
||||||
}
|
}
|
||||||
if(ncols >= 2) {
|
if(ncols >= 2) {
|
||||||
return inet_pton(AF_INET6, name, sa)? AF_INET6 : 0;
|
*SAFAMILY(sa)=AF_INET6;
|
||||||
|
return inet_pton(AF_INET6, name, SAADDR(sa))? AF_INET6 : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (getaddrinfo(name, NULL, NULL, &ai)) return 0;
|
if (getaddrinfo(name, NULL, NULL, &ai)) return 0;
|
||||||
for(iter = ai; iter; iter = iter->ai_next){
|
for(iter = ai; iter; iter = iter->ai_next){
|
||||||
if(!sa4 && iter->ai_addr->sa_family == AF_INET) sa4 = iter->ai_addr;
|
if(!sa4 && iter->ai_addr->sa_family == AF_INET) sa4 = iter->ai_addr;
|
||||||
if(!sa6 && iter->ai_addr->sa_family == AF_INET) sa6 = iter->ai_addr;
|
if(!sa6 && iter->ai_addr->sa_family == AF_INET6) sa6 = iter->ai_addr;
|
||||||
}
|
}
|
||||||
if(sa6 && ((family == 6) || (family == 64) || (family == 46 && !sa4))){
|
if(sa6 && ((family == 6) || (family == 64) || (family == 46 && !sa4))){
|
||||||
memcpy(sa, sa6, sizeof(struct sockaddr_in6));
|
*SAFAMILY(sa)=AF_INET6;
|
||||||
|
memcpy(SAADDR(sa), SAADDR(sa6), SAADDRLEN(sa));
|
||||||
freeaddrinfo(ai);
|
freeaddrinfo(ai);
|
||||||
return AF_INET6;
|
return AF_INET6;
|
||||||
}
|
}
|
||||||
else if(sa4 && family != 6){
|
else if(sa4 && family != 6){
|
||||||
memcpy(sa, sa4, sizeof(struct sockaddr_in));
|
*SAFAMILY(sa)=AF_INET;
|
||||||
|
memcpy(SAADDR(sa), SAADDR(sa4), SAADDRLEN(sa));
|
||||||
freeaddrinfo(ai);
|
freeaddrinfo(ai);
|
||||||
return AF_INET;
|
return AF_INET;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
freeaddrinfo(ai);
|
freeaddrinfo(ai);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -77,8 +77,10 @@ static void pr_sa(struct node *node, CBFUNC cbf, void*cb){
|
|||||||
if(node->value)return pr_ip(node, &((struct sockaddr_in *)node->value)->sin_addr.s_addr)
|
if(node->value)return pr_ip(node, &((struct sockaddr_in *)node->value)->sin_addr.s_addr)
|
||||||
#else
|
#else
|
||||||
char buf[64];
|
char buf[64];
|
||||||
*buf = 0;
|
buf[0] = '['
|
||||||
inet_ntop(((struct sockaddr *)node -> value)->sa_family, node->value, buf, sizeof(buf));
|
buf[1] = 0;
|
||||||
|
inet_ntop(*SAFAMILY(node->value), node->value, buf+1, sizeof(buf)-10);
|
||||||
|
sprintf(buf + strlen(buf), "]:hu", (unsigned short)*SAPORT(node->value));
|
||||||
if(node->value)(*cbf)(cb, buf, strlen(buf));
|
if(node->value)(*cbf)(cb, buf, strlen(buf));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -574,10 +576,6 @@ static void * ef_server_extip(struct node * node){
|
|||||||
return &((struct srvparam *)node->value) -> extip;
|
return &((struct srvparam *)node->value) -> extip;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void * ef_server_intport(struct node * node){
|
|
||||||
return &((struct srvparam *)node->value) -> intport;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void * ef_server_extport(struct node * node){
|
static void * ef_server_extport(struct node * node){
|
||||||
return &((struct srvparam *)node->value) -> extport;
|
return &((struct srvparam *)node->value) -> extport;
|
||||||
}
|
}
|
||||||
@ -776,19 +774,18 @@ static struct property prop_server[] = {
|
|||||||
{prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"},
|
{prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"},
|
||||||
{prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"},
|
{prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"},
|
||||||
{prop_server + 6, "extip", ef_server_extip, TYPE_IP, "ip address of external interface"},
|
{prop_server + 6, "extip", ef_server_extip, TYPE_IP, "ip address of external interface"},
|
||||||
{prop_server + 7, "intport", ef_server_intport, TYPE_PORT, "port to listen"},
|
{prop_server + 7, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"},
|
||||||
{prop_server + 8, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"},
|
{prop_server + 8, "auth", ef_server_auth, TYPE_STRING, "service authentication type"},
|
||||||
{prop_server + 9, "auth", ef_server_auth, TYPE_STRING, "service authentication type"},
|
{prop_server + 9, "acl", ef_server_acl, TYPE_ACE, "access control list"},
|
||||||
{prop_server + 10, "acl", ef_server_acl, TYPE_ACE, "access control list"},
|
{prop_server + 10, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"},
|
||||||
{prop_server + 11, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"},
|
{prop_server + 11, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"},
|
||||||
{prop_server + 12, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"},
|
{prop_server + 12, "log", ef_server_log, TYPE_STRING, "type of logging"},
|
||||||
{prop_server + 13, "log", ef_server_log, TYPE_STRING, "type of logging"},
|
{prop_server + 13, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"},
|
||||||
{prop_server + 14, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"},
|
{prop_server + 14, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"},
|
||||||
{prop_server + 15, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"},
|
{prop_server + 15, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"},
|
||||||
{prop_server + 16, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"},
|
{prop_server + 16, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"},
|
||||||
{prop_server + 17, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"},
|
{prop_server + 17, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"},
|
||||||
{prop_server + 18, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"},
|
{prop_server + 18, "child", ef_server_child, TYPE_CLIENT, "connected clients"},
|
||||||
{prop_server + 19, "child", ef_server_child, TYPE_CLIENT, "connected clients"},
|
|
||||||
{NULL, "next", ef_server_next, TYPE_SERVER, "next"}
|
{NULL, "next", ef_server_next, TYPE_SERVER, "next"}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ void * dnsprchild(struct clientparam* param) {
|
|||||||
unsigned a, b, c, d;
|
unsigned a, b, c, d;
|
||||||
sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d);
|
sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d);
|
||||||
ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a);
|
ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a);
|
||||||
if(param->srv->intsa.ss_family == AF_INET && ip == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr){
|
if(*SAFAMILY(¶m->srv->intsa) == AF_INET && ip == *(unsigned long*)SAADDR(¶m->srv->intsa)){
|
||||||
buf[2] = 0x85;
|
buf[2] = 0x85;
|
||||||
buf[3] = 0x80;
|
buf[3] = 0x80;
|
||||||
buf[6] = 0;
|
buf[6] = 0;
|
||||||
|
@ -545,8 +545,8 @@ for(;;){
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if((res = (*param->srv->authfunc)(param))) {RETURN(res);}
|
if((res = (*param->srv->authfunc)(param))) {RETURN(res);}
|
||||||
if (param->srv->intsa.ss_family == AF_INET &&
|
if (*SAFAMILY(¶m->srv->intsa) == AF_INET &&
|
||||||
(param->sins.sin_addr.s_addr == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == param->srv->intport)) {
|
(param->sins.sin_addr.s_addr == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == *SAPORT(¶m->srv->intsa))) {
|
||||||
RETURN(519);
|
RETURN(519);
|
||||||
}
|
}
|
||||||
sasize = sizeof(struct sockaddr_in);
|
sasize = sizeof(struct sockaddr_in);
|
||||||
@ -830,7 +830,7 @@ for(;;){
|
|||||||
if(anonymous!=1){
|
if(anonymous!=1){
|
||||||
sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 ");
|
sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 ");
|
||||||
gethostname((char *)(buf+strlen((char *)buf)), 256);
|
gethostname((char *)(buf+strlen((char *)buf)), 256);
|
||||||
sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(param->srv->intport), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)"");
|
sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)"");
|
||||||
if(!anonymous)myinet_ntoa(param->sinc.sin_addr, (char *)buf + strlen((char *)buf));
|
if(!anonymous)myinet_ntoa(param->sinc.sin_addr, (char *)buf + strlen((char *)buf));
|
||||||
else {
|
else {
|
||||||
unsigned long tmp;
|
unsigned long tmp;
|
||||||
|
@ -188,11 +188,7 @@ int myinet_ntoa(struct in_addr in, char * buf);
|
|||||||
extern unsigned long nservers[MAXNSERVERS];
|
extern unsigned long nservers[MAXNSERVERS];
|
||||||
extern unsigned long authnserver;
|
extern unsigned long authnserver;
|
||||||
unsigned long getip(unsigned char *name);
|
unsigned long getip(unsigned char *name);
|
||||||
#ifdef NOIPV6
|
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa);
|
||||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa);
|
|
||||||
#else
|
|
||||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa);
|
|
||||||
#endif
|
|
||||||
unsigned long myresolver(unsigned char *);
|
unsigned long myresolver(unsigned char *);
|
||||||
unsigned long fakeresolver (unsigned char *name);
|
unsigned long fakeresolver (unsigned char *name);
|
||||||
int initdnshashtable(unsigned nhashsize);
|
int initdnshashtable(unsigned nhashsize);
|
||||||
|
@ -173,13 +173,13 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
getip46(46, argv[i]+2, &srv.intsa);
|
getip46(46, argv[i]+2, (struct sockaddr *)&srv.intsa);
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
srv.extip = getip((unsigned char *)argv[i]+2);
|
srv.extip = getip((unsigned char *)argv[i]+2);
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
srv.intport = htons(atoi(argv[i]+2));
|
*SAPORT(&srv.intsa) = htons(atoi(argv[i]+2));
|
||||||
break;
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
srv.bufsize = atoi(argv[i]+2);
|
srv.bufsize = atoi(argv[i]+2);
|
||||||
@ -259,7 +259,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
else {
|
else {
|
||||||
#endif
|
#endif
|
||||||
#ifndef NOPORTMAP
|
#ifndef NOPORTMAP
|
||||||
if (error || argc != i+3 || *argv[i]=='-'|| (srv.intport = htons((unsigned short)atoi(argv[i])))==0 || (srv.targetport = htons((unsigned short)atoi(argv[i+2])))==0) {
|
if (error || argc != i+3 || *argv[i]=='-'|| (*SAPORT(&srv.intsa) = htons((unsigned short)atoi(argv[i])))==0 || (srv.targetport = htons((unsigned short)atoi(argv[i+2])))==0) {
|
||||||
#ifndef STDMAIN
|
#ifndef STDMAIN
|
||||||
haveerror = 1;
|
haveerror = 1;
|
||||||
conf.threadinit = 0;
|
conf.threadinit = 0;
|
||||||
@ -311,7 +311,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
|
|
||||||
|
|
||||||
srvinit2(&srv, &defparam);
|
srvinit2(&srv, &defparam);
|
||||||
if(!srv.intport) srv.intport = htons(childdef.port);
|
if(!*SAPORT(&srv.intsa)) *SAPORT(&srv.intsa) = htons(childdef.port);
|
||||||
if(!defparam.sinc.sin_port) defparam.sinc.sin_port = htons(childdef.port);
|
if(!defparam.sinc.sin_port) defparam.sinc.sin_port = htons(childdef.port);
|
||||||
if(hostname)parsehostname(hostname, &defparam, childdef.port);
|
if(hostname)parsehostname(hostname, &defparam, childdef.port);
|
||||||
|
|
||||||
@ -329,7 +329,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
if(!isudp){
|
if(!isudp){
|
||||||
lg.l_onoff = 1;
|
lg.l_onoff = 1;
|
||||||
lg.l_linger = conf.timeouts[STRING_L];
|
lg.l_linger = conf.timeouts[STRING_L];
|
||||||
sock=so._socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
|
sock=so._socket(SASOCK(&srv.intsa), SOCK_STREAM, IPPROTO_TCP);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
@ -350,8 +350,8 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
size = sizeof(defparam.sinc);
|
size = sizeof(srv.intsa);
|
||||||
for(sleeptime = SLEEPTIME * 100; so._bind(sock, (struct sockaddr*)&defparam.sinc, size)==-1; usleep(sleeptime)) {
|
for(sleeptime = SLEEPTIME * 100; so._bind(sock, (struct sockaddr*)&srv.intsa, size)==-1; usleep(sleeptime)) {
|
||||||
sprintf((char *)buf, "bind(): %s", strerror(errno));
|
sprintf((char *)buf, "bind(): %s", strerror(errno));
|
||||||
if(!srv.silent)(*srv.logfunc)(&defparam, buf);
|
if(!srv.silent)(*srv.logfunc)(&defparam, buf);
|
||||||
sleeptime = (sleeptime<<1);
|
sleeptime = (sleeptime<<1);
|
||||||
@ -374,8 +374,10 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
sprintf((char *)buf, "Accepting connections [%u/%u]", (unsigned)getpid(), (unsigned)pthread_self());
|
sprintf((char *)buf, "Accepting connections [%u/%u]", (unsigned)getpid(), (unsigned)pthread_self());
|
||||||
(*srv.logfunc)(&defparam, buf);
|
(*srv.logfunc)(&defparam, buf);
|
||||||
}
|
}
|
||||||
defparam.sinc.sin_addr.s_addr = defparam.sins.sin_addr.s_addr = 0;
|
memset(&defparam.sinc, 0, sizeof(defparam.sinc));
|
||||||
defparam.sinc.sin_port = defparam.sins.sin_port = 0;
|
memset(&defparam.sins, 0, sizeof(defparam.sins));
|
||||||
|
*SAFAMILY(&defparam.sinc) = AF_INET;
|
||||||
|
*SAFAMILY(&defparam.sins) = AF_INET;
|
||||||
|
|
||||||
srv.fds.fd = sock;
|
srv.fds.fd = sock;
|
||||||
srv.fds.events = POLLIN;
|
srv.fds.events = POLLIN;
|
||||||
@ -519,7 +521,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){
|
|||||||
param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET;
|
param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET;
|
||||||
param->req.sin_family = param->sins.sin_family = param->sinc.sin_family = AF_INET;
|
param->req.sin_family = param->sins.sin_family = param->sinc.sin_family = AF_INET;
|
||||||
pthread_mutex_init(&srv->counter_mutex, NULL);
|
pthread_mutex_init(&srv->counter_mutex, NULL);
|
||||||
|
memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa));
|
||||||
}
|
}
|
||||||
|
|
||||||
void srvinit2(struct srvparam * srv, struct clientparam *param){
|
void srvinit2(struct srvparam * srv, struct clientparam *param){
|
||||||
@ -535,9 +537,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){
|
|||||||
else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat);
|
else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat);
|
||||||
}
|
}
|
||||||
if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget);
|
if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget);
|
||||||
if(!srv->intsa.ss_family) memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa));
|
if(!*SAFAMILY(&srv->intsa)) *SAFAMILY(&srv->intsa) = AF_INET;
|
||||||
param->sinc.sin_addr.s_addr = ((struct sockaddr_in *)&srv->intsa)->sin_addr.s_addr;
|
param->sinc.sin_addr.s_addr = ((struct sockaddr_in *)&srv->intsa)->sin_addr.s_addr;
|
||||||
param->sinc.sin_port = srv->intport;
|
param->sinc.sin_port = *SAPORT(&srv->intsa);
|
||||||
if(!srv->extip) srv->extip = conf.extip;
|
if(!srv->extip) srv->extip = conf.extip;
|
||||||
param->sins.sin_addr.s_addr = param->extip = srv->extip;
|
param->sins.sin_addr.s_addr = param->extip = srv->extip;
|
||||||
if(!srv->extport) srv->extport = htons(conf.extport);
|
if(!srv->extport) srv->extport = htons(conf.extport);
|
||||||
@ -844,9 +846,9 @@ void freeconf(struct extparam *confp){
|
|||||||
confp->authfunc = ipauth;
|
confp->authfunc = ipauth;
|
||||||
confp->bandlimfunc = NULL;
|
confp->bandlimfunc = NULL;
|
||||||
memset(&confp->intsa, 0, sizeof(confp->intsa));
|
memset(&confp->intsa, 0, sizeof(confp->intsa));
|
||||||
confp->intsa.ss_family = AF_INET;
|
*SAFAMILY(&confp->intsa) = AF_INET;
|
||||||
confp->extip = 0;
|
confp->extip = 0;
|
||||||
confp->intport = confp->extport = 0;
|
*SAPORT(&confp->intsa) = confp->extport = 0;
|
||||||
confp->singlepacket = 0;
|
confp->singlepacket = 0;
|
||||||
confp->maxchild = 100;
|
confp->maxchild = 100;
|
||||||
resolvfunc = NULL;
|
resolvfunc = NULL;
|
||||||
|
@ -101,6 +101,21 @@ int
|
|||||||
#define IM_MSN 0x00400000
|
#define IM_MSN 0x00400000
|
||||||
#define ADMIN 0x01000000
|
#define ADMIN 0x01000000
|
||||||
|
|
||||||
|
|
||||||
|
#define SAFAMILY(sa) (&(((struct sockaddr_in *)sa)->sin_family))
|
||||||
|
|
||||||
|
#ifndef NOIPV6
|
||||||
|
#define SAPORT(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? &((struct sockaddr_in6 *)sa)->sin6_port : &((struct sockaddr_in *)sa)->sin_port)
|
||||||
|
#define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
|
||||||
|
#define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)
|
||||||
|
#define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET)
|
||||||
|
#else
|
||||||
|
#define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port)
|
||||||
|
#define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.a_addr)
|
||||||
|
#define SAADDRLEN(sa) (4)
|
||||||
|
#define SASOCK(sa) (PF_INET)
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CLIENT,
|
CLIENT,
|
||||||
SERVER
|
SERVER
|
||||||
@ -333,7 +348,11 @@ struct srvparam {
|
|||||||
int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv;
|
int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv;
|
||||||
unsigned bufsize;
|
unsigned bufsize;
|
||||||
unsigned logdumpsrv, logdumpcli;
|
unsigned logdumpsrv, logdumpcli;
|
||||||
struct sockaddr_storage intsa;
|
#ifndef NOIPV6
|
||||||
|
struct sockaddr_in6 intsa;
|
||||||
|
#else
|
||||||
|
struct sockaddr_in intsa
|
||||||
|
#endif
|
||||||
unsigned long extip;
|
unsigned long extip;
|
||||||
pthread_mutex_t counter_mutex;
|
pthread_mutex_t counter_mutex;
|
||||||
struct pollfd fds;
|
struct pollfd fds;
|
||||||
@ -347,7 +366,6 @@ struct srvparam {
|
|||||||
unsigned char * logformat;
|
unsigned char * logformat;
|
||||||
unsigned char * logtarget;
|
unsigned char * logtarget;
|
||||||
unsigned char * nonprintable;
|
unsigned char * nonprintable;
|
||||||
unsigned short intport;
|
|
||||||
unsigned short extport;
|
unsigned short extport;
|
||||||
unsigned short targetport;
|
unsigned short targetport;
|
||||||
unsigned char replace;
|
unsigned char replace;
|
||||||
@ -454,9 +472,13 @@ struct extparam {
|
|||||||
unsigned char *logname, **archiver;
|
unsigned char *logname, **archiver;
|
||||||
ROTATION logtype, countertype;
|
ROTATION logtype, countertype;
|
||||||
char * counterfile;
|
char * counterfile;
|
||||||
struct sockaddr_storage intsa;
|
#ifndef NOIPV6
|
||||||
|
struct sockaddr_in6 intsa;
|
||||||
|
#else
|
||||||
|
struct sockaddr_in intsa
|
||||||
|
#endif
|
||||||
unsigned long extip;
|
unsigned long extip;
|
||||||
unsigned short intport, extport;
|
unsigned short extport;
|
||||||
struct passwords *pwl;
|
struct passwords *pwl;
|
||||||
struct auth * authenticate;
|
struct auth * authenticate;
|
||||||
AUTHFUNC authfunc;
|
AUTHFUNC authfunc;
|
||||||
|
Loading…
Reference in New Issue
Block a user