X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodules%2Fm_check.cpp;h=ddac033c1088ce65916aef450f3ce56238088509;hb=f0debf907a36846e3b48767e9797880135a4583b;hp=95e063e4dc12cfe8a9222a08766aebeefeb4082e;hpb=1520f1d71654f45f4faec367ac02f03e27fd8960;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index 95e063e4d..ddac033c1 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -65,6 +65,22 @@ class CheckContext modelist.Flush(); } + void DumpExt(Extensible* ext) + { + CheckContext::List extlist(*this, "metadata"); + for(Extensible::ExtensibleStore::const_iterator i = ext->GetExtList().begin(); i != ext->GetExtList().end(); ++i) + { + ExtensionItem* item = i->first; + std::string value = item->serialize(FORMAT_USER, ext, i->second); + if (!value.empty()) + Write("meta:" + item->name, value); + else if (!item->name.empty()) + extlist.Add(item->name); + } + + extlist.Flush(); + } + class List : public Numeric::GenericBuilder<' ', false, Numeric::WriteRemoteNumericSink> { public: @@ -111,22 +127,6 @@ class CommandCheck : public Command return ret; } - void dumpExt(CheckContext& context, Extensible* ext) - { - CheckContext::List extlist(context, "metadata"); - for(Extensible::ExtensibleStore::const_iterator i = ext->GetExtList().begin(); i != ext->GetExtList().end(); i++) - { - ExtensionItem* item = i->first; - std::string value = item->serialize(FORMAT_USER, ext, i->second); - if (!value.empty()) - context.Write("meta:" + item->name, value); - else if (!item->name.empty()) - extlist.Add(item->name); - } - - extlist.Flush(); - } - CmdResult Handle (const std::vector ¶meters, User *user) { if (parameters.size() > 1 && parameters[1] != ServerInstance->Config->ServerName) @@ -184,10 +184,10 @@ class CommandCheck : public Command for(char c='A'; c <= 'z'; c++) { ModeHandler* mh = ServerInstance->Modes->FindMode(c, MODETYPE_USER); - if (mh && mh->NeedsOper() && loctarg->HasModePermission(c, MODETYPE_USER)) + if (mh && mh->NeedsOper() && loctarg->HasModePermission(mh)) umodes.push_back(c); mh = ServerInstance->Modes->FindMode(c, MODETYPE_CHANNEL); - if (mh && mh->NeedsOper() && loctarg->HasModePermission(c, MODETYPE_CHANNEL)) + if (mh && mh->NeedsOper() && loctarg->HasModePermission(mh)) cmodes.push_back(c); } context.Write("modeperms", "user=" + umodes + " channel=" + cmodes); @@ -230,7 +230,7 @@ class CommandCheck : public Command chanlist.Flush(); - dumpExt(context, targuser); + context.DumpExt(targuser); } else if (targchan) { @@ -268,7 +268,7 @@ class CommandCheck : public Command for (ModeParser::ListModeList::const_iterator i = listmodes.begin(); i != listmodes.end(); ++i) context.DumpListMode((*i)->GetList(targchan)); - dumpExt(context, targchan); + context.DumpExt(targchan); } else { @@ -301,7 +301,7 @@ class CommandCheck : public Command RouteDescriptor GetRouting(User* user, const std::vector& parameters) { - if (parameters.size() > 1) + if ((parameters.size() > 1) && (parameters[1].find('.') != std::string::npos)) return ROUTE_OPT_UCAST(parameters[1]); return ROUTE_LOCALONLY; }