diff options
author | Sadie Powell <sadie@witchery.services> | 2024-06-19 21:28:33 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2024-06-19 22:44:16 +0100 |
commit | 0065a0f4059c4689f10994efca4d5fce96442da8 (patch) | |
tree | 7d7dc62181a54b7868a899e10ab5361a9ff52585 /modules | |
parent | 490f832dc0e5a289e0054d88f0d1da33ec7d378c (diff) |
Only import clones from Atheme if we recognise the database version.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/database/db_atheme.cpp | 137 |
1 files changed, 79 insertions, 58 deletions
diff --git a/modules/database/db_atheme.cpp b/modules/database/db_atheme.cpp index f18a45eb8..377e52a5e 100644 --- a/modules/database/db_atheme.cpp +++ b/modules/database/db_atheme.cpp @@ -128,6 +128,12 @@ struct UserData final time_t vhost_ts = 0; }; +namespace +{ + // Whether we can safely import clones. + bool import_clones = true; +} + class DBAtheme final : public Module { @@ -142,64 +148,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::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 }, + { "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::HandleCLONESDBV }, + { "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) @@ -634,8 +640,23 @@ private: return true; } + bool HandleCLONESDBV(AthemeRow &row) + { + // CLONES-DBV <version> + auto version = row.GetNum<unsigned>(); + if (version != 3) + { + Log(this) << "Clones database is version " << version << " which is not supported!"; + import_clones = false; + } + return true; + } + bool HandleCLONESEX(AthemeRow &row) { + if (!import_clones) + return HandleIgnore(row); + // CLONES-EX <ip> <allowed> <warn> <expires> <reason> auto ip = row.Get(); auto allowed = row.GetNum<unsigned>(); |