mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 02:25:40 +08:00
IPv6 support for authnserver
This commit is contained in:
parent
8a6632f0d1
commit
50db0015d3
10
src/3proxy.c
10
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;
|
||||
}
|
||||
|
||||
|
33
src/auth.c
33
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; 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));
|
||||
@ -1293,17 +1290,3 @@ 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
|
||||
|
@ -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,
|
||||
|
@ -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 *);
|
||||
|
@ -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);
|
||||
|
@ -1,2 +1,2 @@
|
||||
#define VERSION "3proxy-0.8b-devel"
|
||||
#define BUILDDATE "141213192542"
|
||||
#define BUILDDATE "141213225630"
|
||||
|
Loading…
Reference in New Issue
Block a user