diff --git a/src/3proxy.c b/src/3proxy.c index 6fb239b..5909b2a 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -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; } diff --git a/src/auth.c b/src/auth.c index ef1dbda..2c2e5eb 100644 --- a/src/auth.c +++ b/src/auth.c @@ -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; isin_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 + \ No newline at end of file diff --git a/src/plugins.c b/src/plugins.c index 7820822..098aab7 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -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, diff --git a/src/proxy.h b/src/proxy.h index b5898d1..9e13999 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -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 *); diff --git a/src/structures.h b/src/structures.h index 4b7567c..2d8f046 100644 --- a/src/structures.h +++ b/src/structures.h @@ -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); diff --git a/src/version.h b/src/version.h index e426bdc..7e397da 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141213192542" +#define BUILDDATE "141213225630"