Sfoglia il codice sorgente

intport removed, SA macro added

Vladimir Dubrovin 11 anni fa
parent
commit
7897b009a1
8 ha cambiato i file con 94 aggiunte e 70 eliminazioni
  1. 1 0
      .gitignore
  2. 30 24
      src/common.c
  3. 16 19
      src/datatypes.c
  4. 1 1
      src/dnspr.c
  5. 3 3
      src/proxy.c
  6. 1 5
      src/proxy.h
  7. 16 14
      src/proxymain.c
  8. 26 4
      src/structures.h

+ 1 - 0
.gitignore

@@ -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

+ 30 - 24
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(&param->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_in *sa){
-#else
-unsigned long getip46(int family, unsigned char *name,  struct sockaddr_storage *sa){
-	int ndots=0, ncols=0;
+unsigned long getip46(int family, unsigned char *name,  struct sockaddr *sa){
+#ifndef NOIPV6
+	int ndots=0, ncols=0, nhex=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;
-			continue;
+			if(++ndots > 3) {
+				break;
+			}
 		}
 		}
 		else if(name[i] == ':'){
 		else if(name[i] == ':'){
-			if(++ndots > 7) break;
-			continue;
+			if(++ncols > 7) {
+				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){
-			return inet_pton(AF_INET, name, sa)? AF_INET : 0; 
+		if(ndots == 3 && ncols == 0 && nhex == 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);
-		return 0;
-	}	
+	freeaddrinfo(ai);
+	return 0;
 #endif
 #endif
 }
 }

+ 16 - 19
src/datatypes.c

@@ -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;
-	inet_ntop(((struct sockaddr *)node -> value)->sa_family, node->value, buf, sizeof(buf));
+	buf[0] = '['
+	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 + 8, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"},
-	{prop_server + 9, "auth", ef_server_auth, TYPE_STRING, "service authentication type"},
-	{prop_server + 10, "acl", ef_server_acl, TYPE_ACE, "access control list"},
-	{prop_server + 11, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"},
-	{prop_server + 12, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"},
-	{prop_server + 13, "log", ef_server_log, TYPE_STRING, "type of logging"},
-	{prop_server + 14, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"},
-	{prop_server + 15, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"},
-	{prop_server + 16, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"},
-	{prop_server + 17, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"},
-	{prop_server + 18, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"},
-	{prop_server + 19, "child", ef_server_child, TYPE_CLIENT, "connected clients"},
+	{prop_server + 7, "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, "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, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"},
+	{prop_server + 12, "log", ef_server_log, TYPE_STRING, "type of logging"},
+	{prop_server + 13, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"},
+	{prop_server + 14, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"},
+	{prop_server + 15, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"},
+	{prop_server + 16, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"},
+	{prop_server + 17, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"},
+	{prop_server + 18, "child", ef_server_child, TYPE_CLIENT, "connected clients"},
 	{NULL, "next", ef_server_next, TYPE_SERVER, "next"}
 	{NULL, "next", ef_server_next, TYPE_SERVER, "next"}
 };
 };
 
 

+ 1 - 1
src/dnspr.c

@@ -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 *)&param->srv->intsa)->sin_addr.s_addr){
+	if(*SAFAMILY(&param->srv->intsa) == AF_INET &&  ip == *(unsigned long*)SAADDR(&param->srv->intsa)){
 		buf[2] = 0x85;
 		buf[2] = 0x85;
 		buf[3] = 0x80;
 		buf[3] = 0x80;
 		buf[6] = 0;
 		buf[6] = 0;

+ 3 - 3
src/proxy.c

@@ -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 &&
-	(param->sins.sin_addr.s_addr == ((struct sockaddr_in *)&param->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == param->srv->intport)) {
+ if (*SAFAMILY(&param->srv->intsa) == AF_INET &&
+	(param->sins.sin_addr.s_addr == ((struct sockaddr_in *)&param->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == *SAPORT(&param->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(&param->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;

+ 1 - 5
src/proxy.h

@@ -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_in *sa);
-#else
-unsigned long getip46(int family, unsigned char *name,  struct sockaddr_storage *sa);
-#endif
+unsigned long getip46(int family, unsigned char *name,  struct sockaddr *sa);
 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);

+ 16 - 14
src/proxymain.c

@@ -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);
- for(sleeptime = SLEEPTIME * 100; so._bind(sock, (struct sockaddr*)&defparam.sinc, size)==-1; usleep(sleeptime)) {
+ size = sizeof(srv.intsa);
+ 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;
- defparam.sinc.sin_port = defparam.sins.sin_port = 0;
+ memset(&defparam.sinc, 0, sizeof(defparam.sinc));
+ 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;

+ 26 - 4
src/structures.h

@@ -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;