diff options
author | Sadie Powell <sadie@witchery.services> | 2024-06-19 21:12:28 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2024-06-19 21:12:28 +0100 |
commit | 490f832dc0e5a289e0054d88f0d1da33ec7d378c (patch) | |
tree | 19e7fd3a3b0f578ecd65f9c6f27e19ce678623a0 /modules | |
parent | a44acb6de5017e6752c7e2c687e7c3a1380ad0a7 (diff) |
Fix importing Atheme session limits.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/database/db_atheme.cpp | 146 |
1 files changed, 88 insertions, 58 deletions
diff --git a/modules/database/db_atheme.cpp b/modules/database/db_atheme.cpp index f48f39d3e..f18a45eb8 100644 --- a/modules/database/db_atheme.cpp +++ b/modules/database/db_atheme.cpp @@ -20,6 +20,7 @@ #include "modules/info.h" #include "modules/ns_cert.h" #include "modules/os_forbid.h" +#include "modules/os_session.h" #include "modules/suspend.h" // Handles reading from an Atheme database row. @@ -141,64 +142,64 @@ private: ServiceReference<XLineManager> sqlinemgr; Anope::map<std::function<bool(DBAtheme*,AthemeRow&)>> rowhandlers = { - { "AC", &DBAtheme::HandleIgnore }, - { "AR", &DBAtheme::HandleIgnore }, - { "BE", &DBAtheme::HandleBE }, - { "BLE", &DBAtheme::HandleIgnore }, - { "BOT", &DBAtheme::HandleBOT }, - { "BOT-COUNT", &DBAtheme::HandleIgnore }, - { "BW", &DBAtheme::HandleBW }, - { "CA", &DBAtheme::HandleCA }, - { "CF", &DBAtheme::HandleIgnore }, - { "CFCHAN", &DBAtheme::HandleIgnore }, - { "CFDBV", &DBAtheme::HandleIgnore }, - { "CFMD", &DBAtheme::HandleIgnore }, - { "CFOP", &DBAtheme::HandleIgnore }, - { "CLONES-CD", &DBAtheme::HandleIgnore }, - { "CLONES-CK", &DBAtheme::HandleIgnore }, - { "CLONES-DBV", &DBAtheme::HandleIgnore }, - { "CLONES-EX", &DBAtheme::HandleIgnore }, - { "CLONES-GR", &DBAtheme::HandleIgnore }, - { "CSREQ", &DBAtheme::HandleIgnore }, - { "CSREQ", &DBAtheme::HandleIgnore }, - { "DBV", &DBAtheme::HandleDBV }, - { "GACL", &DBAtheme::HandleIgnore }, - { "GDBV", &DBAtheme::HandleIgnore }, - { "GE", &DBAtheme::HandleIgnore }, - { "GFA", &DBAtheme::HandleIgnore }, - { "GRP", &DBAtheme::HandleIgnore }, - { "GRVER", &DBAtheme::HandleGRVER }, - { "HE", &DBAtheme::HandleIgnore }, - { "HO", &DBAtheme::HandleIgnore }, - { "HR", &DBAtheme::HandleHR }, - { "JM", &DBAtheme::HandleIgnore }, - { "KID", &DBAtheme::HandleIgnore }, - { "KL", &DBAtheme::HandleKL }, - { "LUID", &DBAtheme::HandleIgnore }, - { "MC", &DBAtheme::HandleMC }, - { "MCFP", &DBAtheme::HandleMCFP }, - { "MDA", &DBAtheme::HandleMDA }, - { "MDC", &DBAtheme::HandleMDC }, - { "MDEP", &DBAtheme::HandleIgnore }, - { "MDG", &DBAtheme::HandleIgnore }, - { "MDN", &DBAtheme::HandleMDN }, - { "MDU", &DBAtheme::HandleMDU }, - { "ME", &DBAtheme::HandleME }, - { "MI", &DBAtheme::HandleMI }, - { "MM", &DBAtheme::HandleMM }, - { "MN", &DBAtheme::HandleMN }, - { "MU", &DBAtheme::HandleMU }, - { "NAM", &DBAtheme::HandleNAM }, - { "QID", &DBAtheme::HandleIgnore }, - { "QL", &DBAtheme::HandleQL }, - { "RM", &DBAtheme::HandleIgnore }, - { "RR", &DBAtheme::HandleIgnore }, - { "RW", &DBAtheme::HandleIgnore }, - { "SI", &DBAtheme::HandleIgnore }, - { "SO", &DBAtheme::HandleIgnore }, - { "TS", &DBAtheme::HandleIgnore }, - { "XID", &DBAtheme::HandleIgnore }, - { "XL", &DBAtheme::HandleXL }, + { "AC", &DBAtheme::HandleIgnore }, + { "AR", &DBAtheme::HandleIgnore }, + { "BE", &DBAtheme::HandleBE }, + { "BLE", &DBAtheme::HandleIgnore }, + { "BOT", &DBAtheme::HandleBOT }, + { "BOT-COUNT", &DBAtheme::HandleIgnore }, + { "BW", &DBAtheme::HandleBW }, + { "CA", &DBAtheme::HandleCA }, + { "CF", &DBAtheme::HandleIgnore }, + { "CFCHAN", &DBAtheme::HandleIgnore }, + { "CFDBV", &DBAtheme::HandleIgnore }, + { "CFMD", &DBAtheme::HandleIgnore }, + { "CFOP", &DBAtheme::HandleIgnore }, + { "CLONES-CD", &DBAtheme::HandleIgnore }, + { "CLONES-CK", &DBAtheme::HandleIgnore }, + { "CLONES-DBV", &DBAtheme::HandleIgnore }, + { "CLONES-EX", &DBAtheme::HandleCLONESEX }, + { "CLONES-GR", &DBAtheme::HandleIgnore }, + { "CSREQ", &DBAtheme::HandleIgnore }, + { "CSREQ", &DBAtheme::HandleIgnore }, + { "DBV", &DBAtheme::HandleDBV }, + { "GACL", &DBAtheme::HandleIgnore }, + { "GDBV", &DBAtheme::HandleIgnore }, + { "GE", &DBAtheme::HandleIgnore }, + { "GFA", &DBAtheme::HandleIgnore }, + { "GRP", &DBAtheme::HandleIgnore }, + { "GRVER", &DBAtheme::HandleGRVER }, + { "HE", &DBAtheme::HandleIgnore }, + { "HO", &DBAtheme::HandleIgnore }, + { "HR", &DBAtheme::HandleHR }, + { "JM", &DBAtheme::HandleIgnore }, + { "KID", &DBAtheme::HandleIgnore }, + { "KL", &DBAtheme::HandleKL }, + { "LUID", &DBAtheme::HandleIgnore }, + { "MC", &DBAtheme::HandleMC }, + { "MCFP", &DBAtheme::HandleMCFP }, + { "MDA", &DBAtheme::HandleMDA }, + { "MDC", &DBAtheme::HandleMDC }, + { "MDEP", &DBAtheme::HandleIgnore }, + { "MDG", &DBAtheme::HandleIgnore }, + { "MDN", &DBAtheme::HandleMDN }, + { "MDU", &DBAtheme::HandleMDU }, + { "ME", &DBAtheme::HandleME }, + { "MI", &DBAtheme::HandleMI }, + { "MM", &DBAtheme::HandleMM }, + { "MN", &DBAtheme::HandleMN }, + { "MU", &DBAtheme::HandleMU }, + { "NAM", &DBAtheme::HandleNAM }, + { "QID", &DBAtheme::HandleIgnore }, + { "QL", &DBAtheme::HandleQL }, + { "RM", &DBAtheme::HandleIgnore }, + { "RR", &DBAtheme::HandleIgnore }, + { "RW", &DBAtheme::HandleIgnore }, + { "SI", &DBAtheme::HandleIgnore }, + { "SO", &DBAtheme::HandleIgnore }, + { "TS", &DBAtheme::HandleIgnore }, + { "XID", &DBAtheme::HandleIgnore }, + { "XL", &DBAtheme::HandleXL }, }; void ApplyAccess(Anope::string &in, char flag, Anope::string &out, std::initializer_list<const char*> privs) @@ -633,6 +634,35 @@ private: return true; } + bool HandleCLONESEX(AthemeRow &row) + { + // CLONES-EX <ip> <allowed> <warn> <expires> <reason> + auto ip = row.Get(); + auto allowed = row.GetNum<unsigned>(); + /* auto warn = */ row.GetNum<unsigned>(); + auto expires = row.GetNum<time_t>(); + auto reason = row.GetRemaining(); + + if (!row) + return row.LogError(this); + + if (!session_service) + { + Log(this) << "Unable to import session limit for " << ip << " as os_session is not loaded"; + return true; + } + + auto *exception = session_service->CreateException(); + exception->mask = ip; + exception->limit = allowed; + exception->who = "Unknown"; + exception->time = Anope::CurTime; + exception->expires = expires; + exception->reason = reason; + session_service->AddException(exception); + return true; + } + bool HandleDBV(AthemeRow &row) { // DBV <version> |