IPv6 support for authnserver

This commit is contained in:
z3APA3A 2014-12-13 22:56:31 +03:00
parent 8a6632f0d1
commit 50db0015d3
6 changed files with 23 additions and 29 deletions

View File

@ -1022,8 +1022,16 @@ static int h_nserver(int argc, unsigned char **argv){
}
static int h_authnserver(int argc, unsigned char **argv){
char *str;
authnserver = getip(argv[1]);
if((str = strchr((char *)argv[1], '/')))
*str = 0;
if(!getip46(46, argv[1], (struct sockaddr *)&authnserver.addr)) return 1;
*SAPORT(&authnserver.addr) = htons(53);
if(str) {
authnserver.usetcp = strstr(str + 1, "tcp")? 1:0;
*str = '/';
}
return 0;
}

View File

@ -957,7 +957,7 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign
}
struct nserver nservers[MAXNSERVERS] = {{{0},0}, {{0},0}, {{0},0}, {{0},0}, {{0},0}};
unsigned long authnserver;
struct nserver authnserver;
unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientparam* param, int makeauth){
@ -968,7 +968,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa
if((retval = hashresolv(&dns_table, name, retttl))) {
return retval;
}
n = (makeauth && authnserver)? 1 : numservers;
n = (makeauth && !SAISNULL(&authnserver.addr))? 1 : numservers;
for(i=0; i<n; i++){
unsigned short nq, na;
unsigned char b[4098], *buf, *s1, *s2;
@ -993,25 +993,22 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa
memset(sinsr, 0, sizeof(addr));
if(makeauth && authnserver){
if((sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) break;
*SAFAMILY(sinsl) = AF_INET;
*SAFAMILY(sinsr) = AF_INET;
if(makeauth && !SAISNULL(&authnserver.addr)){
usetcp = authnserver.usetcp;
*SAFAMILY(sinsl) = *SAFAMILY(&authnserver.addr);
}
else {
usetcp = nservers[i].usetcp;
if((sock=so._socket(SASOCK(&nservers[i].addr), usetcp?SOCK_STREAM:SOCK_DGRAM, usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) break;
*SAFAMILY(sinsl) = *SAFAMILY(&nservers[i].addr);
}
if((sock=so._socket(SASOCK(sinsl), usetcp?SOCK_STREAM:SOCK_DGRAM, usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) break;
if(so._bind(sock,sinsl,sizeof(addr))){
so._shutdown(sock, SHUT_RDWR);
so._closesocket(sock);
break;
}
if(makeauth && authnserver){
((struct sockaddr_in *)sinsr)->sin_addr.s_addr = authnserver;
((struct sockaddr_in *)sinsr)->sin_port = htons(53);
if(makeauth && !SAISNULL(&authnserver.addr)){
memcpy(sinsr, &authnserver.addr, sizeof(addr));
}
else {
memcpy(sinsr, &nservers[i].addr, sizeof(addr));
@ -1292,18 +1289,4 @@ void logsql(struct clientparam * param, const unsigned char *s) {
}
#endif
#ifdef WITHMAIN
int main(int argc, unsigned char * argv[]) {
unsigned ip = 0;
WSADATA wd;
WSAStartup(MAKEWORD( 1, 1 ), &wd);
if(argc == 2)ip=getip(argv[1]);
if(!hp) {
printf("Not found");
return 0;
}
printf("Name: '%s'\n", getnamebyip(ip);
return 0;
}
#endif

View File

@ -79,6 +79,7 @@ struct symbol symbols[] = {
{symbols+48, "parsestr", (void *) parsestr},
{symbols+49, "make_ace", (void *) make_ace},
{symbols+50, "freeacl", (void *) freeacl},
{symbols+51, "getip46", (void *) getip46},
{NULL, "", NULL}
};
@ -109,6 +110,7 @@ struct pluginlink pluginlink = {
dobuf2,
scanaddr,
getip,
getip46,
sockmap,
ACLmatches,
alwaysauth,

View File

@ -185,7 +185,7 @@ unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nb
int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask);
int myinet_ntop(int af, void *src, char *dst, socklen_t size);
extern struct nserver nservers[MAXNSERVERS];
extern unsigned long authnserver;
struct nserver authnserver;
unsigned long getip(unsigned char *name);
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa);
unsigned long myresolver(unsigned char *);

View File

@ -655,6 +655,7 @@ struct pluginlink {
int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format);
int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask);
unsigned long (*getip)(unsigned char *name);
unsigned long (*getip46)(int family, unsigned char *name, struct sockaddr *sa);
int (*sockmap)(struct clientparam * param, int timeo);
int (*ACLMatches)(struct ace* acentry, struct clientparam * param);
int (*alwaysauth)(struct clientparam * param);

View File

@ -1,2 +1,2 @@
#define VERSION "3proxy-0.8b-devel"
#define BUILDDATE "141213192542"
#define BUILDDATE "141213225630"