parentretries command added

This commit is contained in:
z3APA3A 2021-01-19 14:40:18 +03:00
parent 49f9daadde
commit 0a7987c6fb
4 changed files with 25 additions and 7 deletions

View File

@ -605,7 +605,6 @@ void trafcountfunc(struct clientparam *param){
pthread_mutex_lock(&tc_mutex); pthread_mutex_lock(&tc_mutex);
for(tc = conf.trafcounter; tc; tc = tc->next) { for(tc = conf.trafcounter; tc; tc = tc->next) {
if(ACLmatches(tc->ace, param)){ if(ACLmatches(tc->ace, param)){
time_t t;
if(tc->ace->action == NOCOUNTIN) { if(tc->ace->action == NOCOUNTIN) {
countout = 1; countout = 1;
@ -622,7 +621,6 @@ void trafcountfunc(struct clientparam *param){
} }
if(countout) for(tc = conf.trafcounter; tc; tc = tc->next) { if(countout) for(tc = conf.trafcounter; tc; tc = tc->next) {
if(ACLmatches(tc->ace, param)){ if(ACLmatches(tc->ace, param)){
time_t t;
if(tc->ace->action == NOCOUNTOUT || tc->ace->action == NOCOUNTALL) break; if(tc->ace->action == NOCOUNTOUT || tc->ace->action == NOCOUNTALL) break;
if(tc->ace->action != COUNTOUT && tc->ace->action != COUNTALL ) { if(tc->ace->action != COUNTOUT && tc->ace->action != COUNTALL ) {
continue; continue;
@ -701,6 +699,7 @@ int checkACL2(struct clientparam * param, int pre){
param->weight = acentry->weight; param->weight = acentry->weight;
if(acentry->action == 2) { if(acentry->action == 2) {
struct ace dup; struct ace dup;
int res=60,i=0;
if(param->operation < 256 && !(param->operation & CONNECT)){ if(param->operation < 256 && !(param->operation & CONNECT)){
continue; continue;
@ -708,8 +707,17 @@ int checkACL2(struct clientparam * param, int pre){
if(param->redirected && acentry->chains && SAISNULL(&acentry->chains->addr) && !*SAPORT(&acentry->chains->addr)) { if(param->redirected && acentry->chains && SAISNULL(&acentry->chains->addr) && !*SAPORT(&acentry->chains->addr)) {
continue; continue;
} }
if(param->remsock != INVALID_SOCKET) {
return 0;
}
for(; i < conf.parentretries; i++){
dup = *acentry; dup = *acentry;
return handleredirect(param, &dup); res = handleredirect(param, &dup);
if(!res) break;
if(param->remsock != INVALID_SOCKET) closesocket(param->remsock);
param->remsock = INVALID_SOCKET;
}
return res;
} }
} }
return acentry->action; return acentry->action;

View File

@ -102,7 +102,7 @@ struct extparam conf = {
NULL, /* struct srvparam *services; */ NULL, /* struct srvparam *services; */
0, /* int stacksize, */ 0, /* int stacksize, */
0, -1, 0, 0, 0, 0, /* threadinit, counterd, haveerror, rotate, paused, archiverc, */ 0, -1, 0, 0, 0, 0, /* threadinit, counterd, haveerror, rotate, paused, archiverc, */
0, 250, 0, 0, 0, 0, 0, /* demon, maxchild, needreload, timetoexit, version, noforce, bandlimver; */ 0, 250, 0, 0, 0, 0, 0, 2, /* demon, maxchild, needreload, timetoexit, version, noforce, bandlimver, parenretries; */
6, 600, /* int authcachetype, authcachetime; */ 6, 600, /* int authcachetype, authcachetime; */
1048576, /* int filtermaxsize; */ 1048576, /* int filtermaxsize; */
NULL, /* **archiver; */ NULL, /* **archiver; */

View File

@ -528,6 +528,15 @@ static int h_nscache(int argc, char **argv){
} }
return 0; return 0;
} }
static int h_parentretries(int argc, char **argv){
int res;
res = atoi((char *)argv[1]);
if(res > 0) conf.parentretries = res;
return 0;
}
static int h_nscache6(int argc, char **argv){ static int h_nscache6(int argc, char **argv){
int res; int res;
@ -1472,8 +1481,9 @@ struct commands commandhandlers[]={
{commandhandlers+59, "stacksize", h_stacksize, 2, 2}, {commandhandlers+59, "stacksize", h_stacksize, 2, 2},
{commandhandlers+60, "force", h_force, 1, 1}, {commandhandlers+60, "force", h_force, 1, 1},
{commandhandlers+61, "noforce", h_noforce, 1, 1}, {commandhandlers+61, "noforce", h_noforce, 1, 1},
{commandhandlers+62, "parentretries", h_parentretries, 2, 2},
#ifndef NORADIUS #ifndef NORADIUS
{commandhandlers+62, "radius", h_radius, 3, 0}, {commandhandlers+63, "radius", h_radius, 3, 0},
#endif #endif
{specificcommands, "", h_noop, 1, 0} {specificcommands, "", h_noop, 1, 0}
}; };

View File

@ -611,7 +611,7 @@ struct extparam {
struct srvparam *services; struct srvparam *services;
int stacksize, int stacksize,
threadinit, counterd, haveerror, rotate, paused, archiverc, threadinit, counterd, haveerror, rotate, paused, archiverc,
demon, maxchild, needreload, timetoexit, version, noforce, bandlimver; demon, maxchild, needreload, timetoexit, version, noforce, bandlimver, parentretries;
int authcachetype, authcachetime; int authcachetype, authcachetime;
int filtermaxsize; int filtermaxsize;
char **archiver; char **archiver;