mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-24 02:55:40 +08:00
Support IPv6 subnets in parent extip
This commit is contained in:
parent
34e63ed37c
commit
5861de176e
18
src/auth.c
18
src/auth.c
@ -253,6 +253,24 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
|||||||
if(cur->type == R_EXTIP){
|
if(cur->type == R_EXTIP){
|
||||||
param->sinsl = cur->addr;
|
param->sinsl = cur->addr;
|
||||||
if(SAISNULL(¶m->sinsl))param->sinsl = param->sincr;
|
if(SAISNULL(¶m->sinsl))param->sinsl = param->sincr;
|
||||||
|
#ifndef NOIPV6
|
||||||
|
else if(cur->cidr && *SAFAMILY(¶m->sinsl) == AF_INET6){
|
||||||
|
char c;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; i < 16; i++){
|
||||||
|
if(i%8)myrand(¶m->sincr, sizeof(param->sincr));
|
||||||
|
else if(i%4) myrand(¶m->req, sizeof(param->req));
|
||||||
|
|
||||||
|
if(i*8 >= cur->cidr) ((char *)SAADDR(¶m->sinsl))[i] = rand();
|
||||||
|
else if ((i+1)*8 > cur->cidr){
|
||||||
|
c = rand();
|
||||||
|
c >>= (cur->cidr - (i*8));
|
||||||
|
((char *)SAADDR(¶m->sinsl))[i] |= c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if(cur->next)continue;
|
if(cur->next)continue;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -141,13 +141,13 @@ char* NULLADDR="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
|
|||||||
|
|
||||||
int myrand(void * entropy, int len){
|
int myrand(void * entropy, int len){
|
||||||
int i;
|
int i;
|
||||||
unsigned short init;
|
uint16_t init;
|
||||||
|
|
||||||
init = randomizer;
|
init = randomizer;
|
||||||
for(i=0; i < len/2; i++){
|
for(i=0; i < len/2; i++){
|
||||||
init ^= ((unsigned short *)entropy)[i];
|
init ^= ((uint16_t *)entropy)[i];
|
||||||
}
|
}
|
||||||
srand(init);
|
srand(rand()+init);
|
||||||
randomizer = rand();
|
randomizer = rand();
|
||||||
return rand();
|
return rand();
|
||||||
|
|
||||||
|
12
src/conf.c
12
src/conf.c
@ -608,6 +608,7 @@ static int h_monitor(int argc, char **argv){
|
|||||||
static int h_parent(int argc, char **argv){
|
static int h_parent(int argc, char **argv){
|
||||||
struct ace *acl = NULL;
|
struct ace *acl = NULL;
|
||||||
struct chain *chains;
|
struct chain *chains;
|
||||||
|
char * cidr;
|
||||||
|
|
||||||
acl = conf.acl;
|
acl = conf.acl;
|
||||||
while(acl && acl->next) acl = acl->next;
|
while(acl && acl->next) acl = acl->next;
|
||||||
@ -646,13 +647,16 @@ static int h_parent(int argc, char **argv){
|
|||||||
fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]);
|
fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]);
|
||||||
return(4);
|
return(4);
|
||||||
}
|
}
|
||||||
#ifndef NOIPV6
|
cidr = strchr(argv[3], '/');
|
||||||
if(!getip46(46, argv[3], (struct sockaddr *)&chains->addr)) return 5;
|
if(cidr) *cidr = 0;
|
||||||
#else
|
|
||||||
getip46(46, argv[3], (struct sockaddr *)&chains->addr);
|
getip46(46, argv[3], (struct sockaddr *)&chains->addr);
|
||||||
#endif
|
|
||||||
chains->exthost = mystrdup((char *)argv[3]);
|
chains->exthost = mystrdup((char *)argv[3]);
|
||||||
|
chains->exthost = (unsigned char *)mystrdup((char *)argv[3]);
|
||||||
if(!chains->exthost) return 21;
|
if(!chains->exthost) return 21;
|
||||||
|
if(cidr){
|
||||||
|
*cidr = '/';
|
||||||
|
chains->cidr = atoi(cidr + 1);
|
||||||
|
}
|
||||||
*SAPORT(&chains->addr) = htons((unsigned short)atoi((char *)argv[4]));
|
*SAPORT(&chains->addr) = htons((unsigned short)atoi((char *)argv[4]));
|
||||||
if(argc > 5) chains->extuser = mystrdup((char *)argv[5]);
|
if(argc > 5) chains->extuser = mystrdup((char *)argv[5]);
|
||||||
if(argc > 6) chains->extpass = mystrdup((char *)argv[6]);
|
if(argc > 6) chains->extpass = mystrdup((char *)argv[6]);
|
||||||
|
@ -294,10 +294,11 @@ struct chain {
|
|||||||
#else
|
#else
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
#endif
|
#endif
|
||||||
unsigned short weight;
|
|
||||||
char * exthost;
|
char * exthost;
|
||||||
char * extuser;
|
char * extuser;
|
||||||
char * extpass;
|
char * extpass;
|
||||||
|
unsigned short weight;
|
||||||
|
unsigned short cidr;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct period {
|
struct period {
|
||||||
|
Loading…
Reference in New Issue
Block a user