Browse Source

countall / nocountall ssupport added

z3APA3A 5 years ago
parent
commit
d0725163d1
4 changed files with 23 additions and 5 deletions
  1. 7 4
      src/auth.c
  2. 10 1
      src/conf.c
  3. 4 0
      src/datatypes.c
  4. 2 0
      src/structures.h

+ 7 - 4
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;

+ 10 - 1
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];

+ 4 - 0
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";
 	}

+ 2 - 0
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