From 6532163f01c9fd09ccda9cda70f6a2ea6ba56cb7 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Wed, 26 Apr 2023 15:04:00 +0300 Subject: [PATCH] Fix connlim issues --- src/auth.c | 3 ++- src/proxymain.c | 2 +- src/structures.h | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/auth.c b/src/auth.c index 8825d76..d425d29 100644 --- a/src/auth.c +++ b/src/auth.c @@ -475,6 +475,7 @@ int startconnlims (struct clientparam *param){ uint64_t rating; int ret = 0; + param->connlim = 1; pthread_mutex_lock(&connlim_mutex); for(ce = conf.connlimiter; ce; ce = ce->next) { if(ACLmatches(ce->ace, param)){ @@ -659,7 +660,7 @@ int alwaysauth(struct clientparam * param){ int countout = 0; - if(conf.connlimiter && param->remsock == INVALID_SOCKET && startconnlims(param)) return 10; + if(conf.connlimiter && !param->connlim && startconnlims(param)) return 10; res = doconnect(param); if(!res){ if(conf.bandlimfunc && (conf.bandlimiter||conf.bandlimiterout)){ diff --git a/src/proxymain.c b/src/proxymain.c index e0ba773..146b4eb 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -1025,7 +1025,7 @@ void freeparam(struct clientparam * param) { } myfree(param->filters); } - if(conf.connlimiter && (param->res != 10 || param->remsock != INVALID_SOCKET)) stopconnlims(param); + if(param->connlim) stopconnlims(param); #endif if(param->clibuf) myfree(param->clibuf); if(param->srvbuf) myfree(param->srvbuf); diff --git a/src/structures.h b/src/structures.h index 8d41374..82c910a 100644 --- a/src/structures.h +++ b/src/structures.h @@ -523,7 +523,8 @@ struct clientparam { transparent, chunked, paused, - version; + version, + connlim; unsigned char *hostname, *username,