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){
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
35
src/auth.c
35
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}};
|
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){
|
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))) {
|
if((retval = hashresolv(&dns_table, name, retttl))) {
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
n = (makeauth && authnserver)? 1 : numservers;
|
n = (makeauth && !SAISNULL(&authnserver.addr))? 1 : numservers;
|
||||||
for(i=0; i<n; i++){
|
for(i=0; i<n; i++){
|
||||||
unsigned short nq, na;
|
unsigned short nq, na;
|
||||||
unsigned char b[4098], *buf, *s1, *s2;
|
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));
|
memset(sinsr, 0, sizeof(addr));
|
||||||
|
|
||||||
|
|
||||||
if(makeauth && authnserver){
|
if(makeauth && !SAISNULL(&authnserver.addr)){
|
||||||
if((sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) break;
|
usetcp = authnserver.usetcp;
|
||||||
*SAFAMILY(sinsl) = AF_INET;
|
*SAFAMILY(sinsl) = *SAFAMILY(&authnserver.addr);
|
||||||
*SAFAMILY(sinsr) = AF_INET;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
usetcp = nservers[i].usetcp;
|
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);
|
*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))){
|
if(so._bind(sock,sinsl,sizeof(addr))){
|
||||||
so._shutdown(sock, SHUT_RDWR);
|
so._shutdown(sock, SHUT_RDWR);
|
||||||
so._closesocket(sock);
|
so._closesocket(sock);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(makeauth && authnserver){
|
if(makeauth && !SAISNULL(&authnserver.addr)){
|
||||||
((struct sockaddr_in *)sinsr)->sin_addr.s_addr = authnserver;
|
memcpy(sinsr, &authnserver.addr, sizeof(addr));
|
||||||
((struct sockaddr_in *)sinsr)->sin_port = htons(53);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
memcpy(sinsr, &nservers[i].addr, sizeof(addr));
|
memcpy(sinsr, &nservers[i].addr, sizeof(addr));
|
||||||
@ -1292,18 +1289,4 @@ void logsql(struct clientparam * param, const unsigned char *s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#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+48, "parsestr", (void *) parsestr},
|
||||||
{symbols+49, "make_ace", (void *) make_ace},
|
{symbols+49, "make_ace", (void *) make_ace},
|
||||||
{symbols+50, "freeacl", (void *) freeacl},
|
{symbols+50, "freeacl", (void *) freeacl},
|
||||||
|
{symbols+51, "getip46", (void *) getip46},
|
||||||
{NULL, "", NULL}
|
{NULL, "", NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -109,6 +110,7 @@ struct pluginlink pluginlink = {
|
|||||||
dobuf2,
|
dobuf2,
|
||||||
scanaddr,
|
scanaddr,
|
||||||
getip,
|
getip,
|
||||||
|
getip46,
|
||||||
sockmap,
|
sockmap,
|
||||||
ACLmatches,
|
ACLmatches,
|
||||||
alwaysauth,
|
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 scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask);
|
||||||
int myinet_ntop(int af, void *src, char *dst, socklen_t size);
|
int myinet_ntop(int af, void *src, char *dst, socklen_t size);
|
||||||
extern struct nserver nservers[MAXNSERVERS];
|
extern struct nserver nservers[MAXNSERVERS];
|
||||||
extern unsigned long authnserver;
|
struct nserver authnserver;
|
||||||
unsigned long getip(unsigned char *name);
|
unsigned long getip(unsigned char *name);
|
||||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa);
|
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa);
|
||||||
unsigned long myresolver(unsigned char *);
|
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 (*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);
|
int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask);
|
||||||
unsigned long (*getip)(unsigned char *name);
|
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 (*sockmap)(struct clientparam * param, int timeo);
|
||||||
int (*ACLMatches)(struct ace* acentry, struct clientparam * param);
|
int (*ACLMatches)(struct ace* acentry, struct clientparam * param);
|
||||||
int (*alwaysauth)(struct clientparam * param);
|
int (*alwaysauth)(struct clientparam * param);
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
#define VERSION "3proxy-0.8b-devel"
|
#define VERSION "3proxy-0.8b-devel"
|
||||||
#define BUILDDATE "141213192542"
|
#define BUILDDATE "141213225630"
|
||||||
|
Loading…
Reference in New Issue
Block a user