From 01884cb328a677fb8e75807da52b2fd9a96b2225 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sat, 17 Apr 2021 22:18:17 +0100 Subject: Rename censor_t to CensorMap as the _t suffix is reserved by POSIX. --- src/modules/m_censor.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_censor.cpp b/src/modules/m_censor.cpp index bd63809ed..b78364b0b 100644 --- a/src/modules/m_censor.cpp +++ b/src/modules/m_censor.cpp @@ -28,12 +28,12 @@ #include "inspircd.h" #include "modules/exemption.h" -typedef insp::flat_map censor_t; +typedef insp::flat_map CensorMap; class ModuleCensor : public Module { CheckExemption::EventProvider exemptionprov; - censor_t censors; + CensorMap censors; SimpleUserModeHandler cu; SimpleChannelModeHandler cc; @@ -77,7 +77,7 @@ class ModuleCensor : public Module return MOD_RES_PASSTHRU; } - for (censor_t::iterator index = censors.begin(); index != censors.end(); index++) + for (CensorMap::const_iterator index = censors.begin(); index != censors.end(); ++index) { size_t censorpos; while ((censorpos = irc::find(details.text, index->first)) != std::string::npos) @@ -104,8 +104,7 @@ class ModuleCensor : public Module * reload our config file on rehash - we must destroy and re-allocate the classes * to call the constructor again and re-read our data. */ - censor_t newcensors; - + CensorMap newcensors; ConfigTagList badwords = ServerInstance->Config->ConfTags("badword"); for (ConfigIter i = badwords.first; i != badwords.second; ++i) { -- cgit v1.3.1-10-gc9f91 From 033127f583ba344dfe2306f37325ef3987fd42e3 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Mon, 19 Apr 2021 00:51:58 +0100 Subject: Update hideoper for the /STATS P change in the previous commit. --- src/modules/m_hideoper.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_hideoper.cpp b/src/modules/m_hideoper.cpp index 3b64c23c4..64872850a 100644 --- a/src/modules/m_hideoper.cpp +++ b/src/modules/m_hideoper.cpp @@ -160,8 +160,9 @@ class ModuleHideOper if (!oper->server->IsULine() && (stats.GetSource()->IsOper() || !oper->IsModeSet(hm))) { LocalUser* lu = IS_LOCAL(oper); - stats.AddRow(249, oper->nick + " (" + oper->ident + "@" + oper->GetDisplayedHost() + ") Idle: " + - (lu ? ConvToStr(ServerInstance->Time() - lu->idle_lastmsg) + " secs" : "unavailable")); + const std::string idle = lu ? InspIRCd::DurationString(ServerInstance->Time() - lu->idle_lastmsg) : "unavailable"; + stats.AddRow(249, InspIRCd::Format("%s (%s@%s) Idle: %s", oper->nick.c_str(), + oper->ident.c_str(), oper->GetDisplayedHost().c_str(), idle.c_str())); count++; } } -- cgit v1.3.1-10-gc9f91 From bde0e7e84668df48afaffda7a52eddc0aca543d3 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Mon, 19 Apr 2021 17:52:38 +0100 Subject: Improve the message sent when a mode does not exist. --- src/mode.cpp | 4 +++- src/modules/m_disable.cpp | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'src/modules') diff --git a/src/mode.cpp b/src/mode.cpp index 306d39c5d..3ce7ee10f 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -388,7 +388,9 @@ void ModeParser::ModeParamsToChangeList(User* user, ModeType type, const std::ve if (!mh) { /* No mode handler? Unknown mode character then. */ - user->WriteNumeric(type == MODETYPE_CHANNEL ? ERR_UNKNOWNMODE : ERR_UNKNOWNSNOMASK, modechar, "is an unknown mode character"); + int numeric = (type == MODETYPE_CHANNEL ? ERR_UNKNOWNMODE : ERR_UNKNOWNSNOMASK); + const char* typestr = (type == MODETYPE_CHANNEL ? "channel" : "user"); + user->WriteNumeric(numeric, modechar, InspIRCd::Format("is not a recognised %s mode.", typestr)); continue; } diff --git a/src/modules/m_disable.cpp b/src/modules/m_disable.cpp index 95fcd8b4c..6ba5243c9 100644 --- a/src/modules/m_disable.cpp +++ b/src/modules/m_disable.cpp @@ -171,8 +171,9 @@ class ModuleDisable : public Module { // The server administrator has specified that disabled modes should be // treated as if they do not exist. - user->WriteNumeric(mh->GetModeType() == MODETYPE_CHANNEL ? ERR_UNKNOWNMODE : ERR_UNKNOWNSNOMASK, - mh->GetModeChar(), "is an unknown mode character"); + int numeric = (mh->GetModeType() == MODETYPE_CHANNEL ? ERR_UNKNOWNMODE : ERR_UNKNOWNSNOMASK); + const char* typestr = (mh->GetModeType() == MODETYPE_CHANNEL ? "channel" : "user"); + user->WriteNumeric(numeric, mh->GetModeChar(), InspIRCd::Format("is not a recognised %s mode.", typestr)); return MOD_RES_DENY; } -- cgit v1.3.1-10-gc9f91 From 9ec004958f2af816fc90f753964338eb19961186 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Mon, 19 Apr 2021 19:58:03 +0100 Subject: Improve the messages sent when loading/unloading/reloading modules. --- src/configreader.cpp | 16 ++++++++-------- src/coremods/core_reloadmodule.cpp | 13 +++++++++---- src/modules.cpp | 2 +- src/modules/m_globalload.cpp | 2 +- 4 files changed, 19 insertions(+), 14 deletions(-) (limited to 'src/modules') diff --git a/src/configreader.cpp b/src/configreader.cpp index 381d28d1b..2d3ecc3de 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -607,16 +607,16 @@ void ServerConfig::ApplyModules(User* user) ServerInstance->SNO->WriteGlobalSno('a', "*** REHASH UNLOADED MODULE: %s", modname.c_str()); if (user) - user->WriteNumeric(RPL_UNLOADEDMODULE, modname, InspIRCd::Format("Module %s successfully unloaded.", modname.c_str())); + user->WriteNumeric(RPL_UNLOADEDMODULE, modname, InspIRCd::Format("The %s module was unloaded.", modname.c_str())); else - ServerInstance->SNO->WriteGlobalSno('a', "Module %s successfully unloaded.", modname.c_str()); + ServerInstance->SNO->WriteGlobalSno('a', "The %s module was unloaded.", modname.c_str()); } else { if (user) - user->WriteNumeric(ERR_CANTUNLOADMODULE, modname, InspIRCd::Format("Failed to unload module %s: %s", modname.c_str(), ServerInstance->Modules->LastError().c_str())); + user->WriteNumeric(ERR_CANTUNLOADMODULE, modname, InspIRCd::Format("Failed to unload the %s module: %s", modname.c_str(), ServerInstance->Modules->LastError().c_str())); else - ServerInstance->SNO->WriteGlobalSno('a', "Failed to unload module %s: %s", modname.c_str(), ServerInstance->Modules->LastError().c_str()); + ServerInstance->SNO->WriteGlobalSno('a', "Failed to unload the %s module: %s", modname.c_str(), ServerInstance->Modules->LastError().c_str()); } } @@ -630,16 +630,16 @@ void ServerConfig::ApplyModules(User* user) { ServerInstance->SNO->WriteGlobalSno('a', "*** REHASH LOADED MODULE: %s",adding->c_str()); if (user) - user->WriteNumeric(RPL_LOADEDMODULE, *adding, InspIRCd::Format("Module %s successfully loaded.", adding->c_str())); + user->WriteNumeric(RPL_LOADEDMODULE, *adding, InspIRCd::Format("The %s module was loaded.", adding->c_str())); else - ServerInstance->SNO->WriteGlobalSno('a', "Module %s successfully loaded.", adding->c_str()); + ServerInstance->SNO->WriteGlobalSno('a', "The %s module was loaded.", adding->c_str()); } else { if (user) - user->WriteNumeric(ERR_CANTLOADMODULE, *adding, InspIRCd::Format("Failed to load module %s: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str())); + user->WriteNumeric(ERR_CANTLOADMODULE, *adding, InspIRCd::Format("Failed to load the %s module: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str())); else - ServerInstance->SNO->WriteGlobalSno('a', "Failed to load module %s: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str()); + ServerInstance->SNO->WriteGlobalSno('a', "Failed to load the %s module: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str()); } } } diff --git a/src/coremods/core_reloadmodule.cpp b/src/coremods/core_reloadmodule.cpp index ef0b13962..f3299db90 100644 --- a/src/coremods/core_reloadmodule.cpp +++ b/src/coremods/core_reloadmodule.cpp @@ -729,16 +729,21 @@ class ReloadAction : public ActionBase { Module* newmod = ServerInstance->Modules->Find(name); datakeeper.Restore(newmod); + ServerInstance->SNO->WriteGlobalSno('a', "The %s module was reloaded.", passedname.c_str()); } else + { datakeeper.Fail(); + ServerInstance->SNO->WriteGlobalSno('a', "Failed to reload the %s module.", passedname.c_str()); + } - ServerInstance->SNO->WriteGlobalSno('a', "RELOAD MODULE: %s %ssuccessfully reloaded", passedname.c_str(), result ? "" : "un"); User* user = ServerInstance->FindUUID(uuid); if (user) { - int numeric = result ? RPL_LOADEDMODULE : ERR_CANTUNLOADMODULE; - user->WriteNumeric(numeric, passedname, InspIRCd::Format("Module %ssuccessfully reloaded.", (result ? "" : "un"))); + if (result) + user->WriteNumeric(RPL_LOADEDMODULE, passedname, InspIRCd::Format("The %s module was reloaded.", passedname.c_str())); + else + user->WriteNumeric(ERR_CANTUNLOADMODULE, passedname, InspIRCd::Format("Failed to reload the %s module.", passedname.c_str())); } ServerInstance->GlobalCulls.AddItem(this); @@ -764,7 +769,7 @@ CmdResult CommandReloadmodule::Handle(User* user, const Params& parameters) } else { - user->WriteNumeric(ERR_CANTUNLOADMODULE, parameters[0], "Could not find module by that name"); + user->WriteNumeric(ERR_CANTUNLOADMODULE, parameters[0], "Could not find a loaded module by that name"); return CMD_FAILURE; } } diff --git a/src/modules.cpp b/src/modules.cpp index fb7fa55dd..6bb789753 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -442,7 +442,7 @@ void ModuleManager::DoSafeUnload(Module* mod) Modules.erase(modfind); ServerInstance->GlobalCulls.AddItem(mod); - ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, "Module %s unloaded",mod->ModuleSourceFile.c_str()); + ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, "The %s module was unloaded", mod->ModuleSourceFile.c_str()); ServerInstance->ISupport.Build(); } diff --git a/src/modules/m_globalload.cpp b/src/modules/m_globalload.cpp index bba31ee43..01e9bbc6d 100644 --- a/src/modules/m_globalload.cpp +++ b/src/modules/m_globalload.cpp @@ -143,7 +143,7 @@ class CommandGReloadModule : public Command } else { - user->WriteRemoteNumeric(ERR_CANTUNLOADMODULE, parameters[0], "Could not find module by that name"); + user->WriteRemoteNumeric(ERR_CANTUNLOADMODULE, parameters[0], "Could not find a loaded module by that name"); return CMD_FAILURE; } } -- cgit v1.3.1-10-gc9f91 From d9b177227279d0c312c489634a8abe8b25a83f8a Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 21 Apr 2021 19:46:34 +0100 Subject: Update the module descriptions. --- src/modules/extra/m_regex_pcre.cpp | 2 +- src/modules/extra/m_regex_posix.cpp | 2 +- src/modules/extra/m_regex_re2.cpp | 2 +- src/modules/extra/m_regex_stdlib.cpp | 2 +- src/modules/extra/m_regex_tre.cpp | 2 +- src/modules/m_allowinvite.cpp | 2 +- src/modules/m_callerid.cpp | 2 +- src/modules/m_channelban.cpp | 2 +- src/modules/m_classban.cpp | 2 +- src/modules/m_gecosban.cpp | 2 +- src/modules/m_geoban.cpp | 2 +- src/modules/m_muteban.cpp | 2 +- src/modules/m_nopartmsg.cpp | 2 +- src/modules/m_regex_glob.cpp | 2 +- src/modules/m_serverban.cpp | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) (limited to 'src/modules') diff --git a/src/modules/extra/m_regex_pcre.cpp b/src/modules/extra/m_regex_pcre.cpp index fd5a30cde..cba7025d2 100644 --- a/src/modules/extra/m_regex_pcre.cpp +++ b/src/modules/extra/m_regex_pcre.cpp @@ -89,7 +89,7 @@ class ModuleRegexPCRE : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Provides a regular expression engine which uses the PCRE library.", VF_VENDOR); + return Version("Provides the pcre regular expression engine which uses the PCRE library.", VF_VENDOR); } }; diff --git a/src/modules/extra/m_regex_posix.cpp b/src/modules/extra/m_regex_posix.cpp index 19b4f3eaa..d63b83acf 100644 --- a/src/modules/extra/m_regex_posix.cpp +++ b/src/modules/extra/m_regex_posix.cpp @@ -86,7 +86,7 @@ class ModuleRegexPOSIX : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Provides a regular expression engine which uses the POSIX.2 regular expression matching system.", VF_VENDOR); + return Version("Provides the posix regular expression engine which uses the POSIX.2 regular expression matching system.", VF_VENDOR); } void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE diff --git a/src/modules/extra/m_regex_re2.cpp b/src/modules/extra/m_regex_re2.cpp index aaeea87ab..35414baf1 100644 --- a/src/modules/extra/m_regex_re2.cpp +++ b/src/modules/extra/m_regex_re2.cpp @@ -88,7 +88,7 @@ class ModuleRegexRE2 : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Provides a regular expression engine which uses the RE2 library.", VF_VENDOR); + return Version("Provides the re2 regular expression engine which uses the RE2 library.", VF_VENDOR); } }; diff --git a/src/modules/extra/m_regex_stdlib.cpp b/src/modules/extra/m_regex_stdlib.cpp index b9602fe01..ed1297d71 100644 --- a/src/modules/extra/m_regex_stdlib.cpp +++ b/src/modules/extra/m_regex_stdlib.cpp @@ -70,7 +70,7 @@ public: Version GetVersion() CXX11_OVERRIDE { - return Version("Provides a regular expression engine which uses the C++11 std::regex regular expression matching system.", VF_VENDOR); + return Version("Provides the stdregex regular expression engine which uses the C++11 std::regex regular expression matching system.", VF_VENDOR); } void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE diff --git a/src/modules/extra/m_regex_tre.cpp b/src/modules/extra/m_regex_tre.cpp index a7002c467..f736699a2 100644 --- a/src/modules/extra/m_regex_tre.cpp +++ b/src/modules/extra/m_regex_tre.cpp @@ -92,7 +92,7 @@ class ModuleRegexTRE : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Provides a regular expression engine which uses the TRE library.", VF_VENDOR); + return Version("Provides the tre regular expression engine which uses the TRE library.", VF_VENDOR); } }; diff --git a/src/modules/m_allowinvite.cpp b/src/modules/m_allowinvite.cpp index 0ec9359da..177a9e894 100644 --- a/src/modules/m_allowinvite.cpp +++ b/src/modules/m_allowinvite.cpp @@ -63,7 +63,7 @@ class ModuleAllowInvite : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Adds channel mode A (allowinvite) which allows unprivileged users to use the /INVITE command and extended ban A which bans specific masks from using the /INVITE command.", VF_VENDOR); + return Version("Adds channel mode A (allowinvite) which allows unprivileged users to use the /INVITE command and extended ban A: which bans specific masks from using the /INVITE command.", VF_VENDOR); } }; diff --git a/src/modules/m_callerid.cpp b/src/modules/m_callerid.cpp index 2f47912ae..14f7012b6 100644 --- a/src/modules/m_callerid.cpp +++ b/src/modules/m_callerid.cpp @@ -398,7 +398,7 @@ public: Version GetVersion() CXX11_OVERRIDE { - return Version("Provides user mode g (bot) which allows users to require that other users are on their whitelist before messaging them.", VF_COMMON | VF_VENDOR); + return Version("Provides user mode g (callerid) which allows users to require that other users are on their whitelist before messaging them.", VF_COMMON | VF_VENDOR); } void On005Numeric(std::map& tokens) CXX11_OVERRIDE diff --git a/src/modules/m_channelban.cpp b/src/modules/m_channelban.cpp index ea31e90dc..fbbc1a202 100644 --- a/src/modules/m_channelban.cpp +++ b/src/modules/m_channelban.cpp @@ -30,7 +30,7 @@ class ModuleBadChannelExtban : public Module public: Version GetVersion() CXX11_OVERRIDE { - return Version("Adds the j: extended ban which checks whether users are in a channel matching the specified glob pattern.", VF_OPTCOMMON|VF_VENDOR); + return Version("Adds extended ban j: which checks whether users are in a channel matching the specified glob pattern.", VF_OPTCOMMON|VF_VENDOR); } ModResult OnCheckBan(User *user, Channel *c, const std::string& mask) CXX11_OVERRIDE diff --git a/src/modules/m_classban.cpp b/src/modules/m_classban.cpp index b2cbb1e59..a43a256ec 100644 --- a/src/modules/m_classban.cpp +++ b/src/modules/m_classban.cpp @@ -55,7 +55,7 @@ class ModuleClassBan : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Adds the n: extended ban which check whether users are in a connect class matching the specified glob pattern.", VF_VENDOR | VF_OPTCOMMON); + return Version("Adds extended ban n: which check whether users are in a connect class matching the specified glob pattern.", VF_VENDOR | VF_OPTCOMMON); } }; diff --git a/src/modules/m_gecosban.cpp b/src/modules/m_gecosban.cpp index 896eaaacf..6b14d9134 100644 --- a/src/modules/m_gecosban.cpp +++ b/src/modules/m_gecosban.cpp @@ -30,7 +30,7 @@ class ModuleGecosBan : public Module public: Version GetVersion() CXX11_OVERRIDE { - return Version("Adds the r: extended ban which checks whether users have a real name (gecos) matching the specified glob pattern.", VF_OPTCOMMON|VF_VENDOR); + return Version("Adds extended ban r: which checks whether users have a real name (gecos) matching the specified glob pattern.", VF_OPTCOMMON|VF_VENDOR); } ModResult OnCheckBan(User *user, Channel *c, const std::string& mask) CXX11_OVERRIDE diff --git a/src/modules/m_geoban.cpp b/src/modules/m_geoban.cpp index 483c5a769..49d309004 100644 --- a/src/modules/m_geoban.cpp +++ b/src/modules/m_geoban.cpp @@ -44,7 +44,7 @@ class ModuleGeoBan Version GetVersion() CXX11_OVERRIDE { - return Version("Adds extended ban G which matches against two letter country codes.", VF_OPTCOMMON|VF_VENDOR); + return Version("Adds extended ban G: which matches against two letter country codes.", VF_OPTCOMMON|VF_VENDOR); } void On005Numeric(std::map& tokens) CXX11_OVERRIDE diff --git a/src/modules/m_muteban.cpp b/src/modules/m_muteban.cpp index 13150b0d0..e0be4c647 100644 --- a/src/modules/m_muteban.cpp +++ b/src/modules/m_muteban.cpp @@ -46,7 +46,7 @@ class ModuleQuietBan Version GetVersion() CXX11_OVERRIDE { - return Version("Adds extended ban m which bans specific masks from speaking in a channel.", VF_OPTCOMMON|VF_VENDOR); + return Version("Adds extended ban m: which bans specific masks from speaking in a channel.", VF_OPTCOMMON|VF_VENDOR); } ModResult HandleMessage(User* user, const MessageTarget& target, bool& echo_original) diff --git a/src/modules/m_nopartmsg.cpp b/src/modules/m_nopartmsg.cpp index bd738a2da..d75ecc7b9 100644 --- a/src/modules/m_nopartmsg.cpp +++ b/src/modules/m_nopartmsg.cpp @@ -30,7 +30,7 @@ class ModulePartMsgBan : public Module public: Version GetVersion() CXX11_OVERRIDE { - return Version("Adds the p: extended ban which blocks the part message of matching users.", VF_OPTCOMMON|VF_VENDOR); + return Version("Adds extended ban p: which blocks the part message of matching users.", VF_OPTCOMMON|VF_VENDOR); } void OnUserPart(Membership* memb, std::string &partmessage, CUList& excepts) CXX11_OVERRIDE diff --git a/src/modules/m_regex_glob.cpp b/src/modules/m_regex_glob.cpp index 1b62bbebb..cd1887073 100644 --- a/src/modules/m_regex_glob.cpp +++ b/src/modules/m_regex_glob.cpp @@ -61,7 +61,7 @@ public: Version GetVersion() CXX11_OVERRIDE { - return Version("Provides a regular expression engine which uses the built-in glob matching system.", VF_VENDOR); + return Version("Provides the glob regular expression engine which uses the built-in glob matching system.", VF_VENDOR); } }; diff --git a/src/modules/m_serverban.cpp b/src/modules/m_serverban.cpp index 405703f84..7a59ae021 100644 --- a/src/modules/m_serverban.cpp +++ b/src/modules/m_serverban.cpp @@ -30,7 +30,7 @@ class ModuleServerBan : public Module public: Version GetVersion() CXX11_OVERRIDE { - return Version("Adds the s: extended ban which check whether users are on a server matching the specified glob pattern.", VF_OPTCOMMON|VF_VENDOR); + return Version("Adds extended ban s: which check whether users are on a server matching the specified glob pattern.", VF_OPTCOMMON|VF_VENDOR); } ModResult OnCheckBan(User *user, Channel *c, const std::string& mask) CXX11_OVERRIDE -- cgit v1.3.1-10-gc9f91 From c73666dd8ee5796180afb1435ffa20787a8a4f1b Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 25 Apr 2021 18:06:23 +0100 Subject: Send the max line length to remote servers on link. --- src/modules/m_spanningtree/capab.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/modules') diff --git a/src/modules/m_spanningtree/capab.cpp b/src/modules/m_spanningtree/capab.cpp index 9894dd413..de5982952 100644 --- a/src/modules/m_spanningtree/capab.cpp +++ b/src/modules/m_spanningtree/capab.cpp @@ -218,6 +218,7 @@ void TreeSocket::SendCapabilities(int phase) " MAXREAL="+ConvToStr(ServerInstance->Config->Limits.MaxReal)+ " MAXAWAY="+ConvToStr(ServerInstance->Config->Limits.MaxAway)+ " MAXHOST="+ConvToStr(ServerInstance->Config->Limits.MaxHost)+ + " MAXLINE="+ConvToStr(ServerInstance->Config->Limits.MaxLine)+ extra+ " CASEMAPPING="+ServerInstance->Config->CaseMapping+ // XXX: Advertise the presence or absence of m_globops in CAPAB CAPABILITIES. -- cgit v1.3.1-10-gc9f91