From 78d7cc34e8df1996edb726b33e70b8b6def2d9c8 Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Fri, 9 Feb 2024 23:31:10 +0000 Subject: [PATCH] Load corecaps module when upgrading old config This allows unloading it --- src/znc.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/znc.cpp b/src/znc.cpp index 1713ddfc..ec61686d 100644 --- a/src/znc.cpp +++ b/src/znc.cpp @@ -1050,6 +1050,7 @@ bool CZNC::ReadConfig(CConfig& config, CString& sError) { // create a backup file if necessary CString sSavedVersion; config.FindStringEntry("version", sSavedVersion); + config.AddKeyValuePair("version", sSavedVersion); if (sSavedVersion.empty()) { CUtils::PrintError( "Config does not contain a version identifier. It may be be too " @@ -1092,20 +1093,28 @@ bool CZNC::RehashConfig(CString& sError) { bool CZNC::LoadGlobal(CConfig& config, CString& sError) { sError.clear(); + CString sSavedVersion; + config.FindStringEntry("version", sSavedVersion); + tuple tSavedVersion = + make_tuple(sSavedVersion.Token(0, false, ".").ToUInt(), + sSavedVersion.Token(1, false, ".").ToUInt()); + MCString msModules; // Modules are queued for later loading VCString vsList; config.FindStringVector("loadmodule", vsList); + + // Automatically load corecaps if config was upgraded from old version, but + // don't force it if user explicitly unloaded it + if (tSavedVersion < make_tuple(1, 9)) { + vsList.push_back("corecaps"); + } + for (const CString& sModLine : vsList) { CString sModName = sModLine.Token(0); CString sArgs = sModLine.Token(1, true); // compatibility for pre-1.0 configs - CString sSavedVersion; - config.FindStringEntry("version", sSavedVersion); - tuple tSavedVersion = - make_tuple(sSavedVersion.Token(0, false, ".").ToUInt(), - sSavedVersion.Token(1, false, ".").ToUInt()); if (sModName == "saslauth" && tSavedVersion < make_tuple(0, 207)) { CUtils::PrintMessage( "saslauth module was renamed to cyrusauth. Loading cyrusauth "