handlerlogin: use std::atomic for counter and lockguard in ban check

Αυτή η υποβολή περιλαμβάνεται σε:
2019-05-12 21:14:26 +02:00
γονέας d02e8d0dce
υποβολή 232ff75ae0

@@ -18,12 +18,15 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
*/ */
#include <atomic>
#include <mutex>
#include <openssl/evp.h> #include <openssl/evp.h>
#include "handlerlogin.h" #include "handlerlogin.h"
#include "../logger.h" #include "../logger.h"
struct LoginFail struct LoginFail
{ {
unsigned int count; std::mutex mutex;
std::atomic<unsigned int> count;
time_t lastfail; time_t lastfail;
}; };
static std::map<std::string, LoginFail> loginFails; static std::map<std::string, LoginFail> loginFails;
@@ -34,6 +37,7 @@ bool HandlerLogin::isBanned(std::string ip)
if(utils::hasKey(loginFails, ip)) if(utils::hasKey(loginFails, ip))
{ {
LoginFail &fl = loginFails[ip]; LoginFail &fl = loginFails[ip];
std::lock_guard<std::mutex> lock(fl.mutex);
return fl.count > 5 && (time(nullptr) - fl.lastfail) < 1200; return fl.count > 5 && (time(nullptr) - fl.lastfail) < 1200;
} }