From d0725163d110669d5e283f0a22f458a8b3489cea Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 6 Oct 2020 14:29:08 +0300 Subject: [PATCH] countall / nocountall ssupport added --- src/auth.c | 11 +++++++---- src/conf.c | 11 ++++++++++- src/datatypes.c | 4 ++++ src/structures.h | 2 ++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/auth.c b/src/auth.c index dac2d4a..b7b3851 100644 --- a/src/auth.c +++ b/src/auth.c @@ -605,10 +605,13 @@ void trafcountfunc(struct clientparam *param){ for(tc = conf.trafcounter; tc; tc = tc->next) { if(ACLmatches(tc->ace, param)){ time_t t; - if(tc->ace->action == NOCOUNTIN) break; + if(tc->ace->action == NOCOUNTIN || tc->ace->action == NOCOUNTALL) { + countout = 1; + break; + } if(tc->ace->action != COUNTIN) { countout = 1; - continue; + if(tc->ace->action != COUNTALL)continue; } tc->traf64 += param->statssrv64; time(&t); @@ -618,8 +621,8 @@ void trafcountfunc(struct clientparam *param){ if(countout) for(tc = conf.trafcounter; tc; tc = tc->next) { if(ACLmatches(tc->ace, param)){ time_t t; - if(tc->ace->action == NOCOUNTOUT) break; - if(tc->ace->action != COUNTOUT) { + if(tc->ace->action == NOCOUNTOUT || tc->ace->action == NOCOUNTALL) break; + if(tc->ace->action != COUNTOUT && tc->ace->action != COUNTALL ) { continue; } tc->traf64 += param->statscli64; diff --git a/src/conf.c b/src/conf.c index fe1fc2a..01b5664 100644 --- a/src/conf.c +++ b/src/conf.c @@ -1113,6 +1113,13 @@ static int h_ace(int argc, unsigned char **argv){ else if(!strcmp((char *)argv[0], "nocountout")){ res = NOCOUNTOUT; } + else if(!strcmp((char *)argv[0], "countall")){ + res = COUNTALL; + offset = 3; + } + else if(!strcmp((char *)argv[0], "nocountall")){ + res = NOCOUNTALL; + } else if(!strcmp((char *)argv[0], "connlim")){ res = CONNLIM; offset = 2; @@ -1224,6 +1231,8 @@ static int h_ace(int argc, unsigned char **argv){ case NOCOUNTIN: case COUNTOUT: case NOCOUNTOUT: + case COUNTALL: + case NOCOUNTALL: tl = myalloc(sizeof(struct trafcount)); if(!tl) { fprintf(stderr, "No memory to create traffic limit filter\n"); @@ -1232,7 +1241,7 @@ static int h_ace(int argc, unsigned char **argv){ memset(tl, 0, sizeof(struct trafcount)); tl->ace = acl; - if((acl->action == COUNTIN)||(acl->action == COUNTOUT)) { + if((acl->action == COUNTIN)||(acl->action == COUNTOUT)||(acl->action == COUNTALL)) { unsigned long lim; tl->comment = ( char *)argv[1]; diff --git a/src/datatypes.c b/src/datatypes.c index d18806a..6613299 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -384,6 +384,10 @@ static void * ef_ace_type(struct node * node){ return "countout"; case NOCOUNTOUT: return "nocountout"; + case COUNTALL: + return "countall"; + case NOCOUNTALL: + return "nocountall"; default: return "unknown"; } diff --git a/src/structures.h b/src/structures.h index 36a76b5..08a14b7 100644 --- a/src/structures.h +++ b/src/structures.h @@ -115,6 +115,8 @@ int #define NOCOUNTOUT 8 #define CONNLIM 9 #define NOCONNLIM 10 +#define COUNTALL 11 +#define NOCOUNTALL 12 #define CONNECT 0x00000001 #define BIND 0x00000002