diff options
| author | 2021-01-13 00:53:32 +0000 | |
|---|---|---|
| committer | 2021-01-13 01:02:33 +0000 | |
| commit | bcc3f983772e7042fd969a98f692cef2a9201cae (patch) | |
| tree | bb9c4dfb572dcb39557f2adbde311eb574725883 /src/users.cpp | |
| parent | Merge branch 'insp3' into master. (diff) | |
| parent | Add a shun option to only apply when users are fully connected. (diff) | |
| download | inspircd++-bcc3f983772e7042fd969a98f692cef2a9201cae.tar.gz inspircd++-bcc3f983772e7042fd969a98f692cef2a9201cae.tar.bz2 inspircd++-bcc3f983772e7042fd969a98f692cef2a9201cae.zip | |
Merge branch 'insp3' into master.
Diffstat (limited to 'src/users.cpp')
| -rw-r--r-- | src/users.cpp | 49 |
1 files changed, 19 insertions, 30 deletions
diff --git a/src/users.cpp b/src/users.cpp index 97c92140e..0e049dbef 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -415,6 +415,22 @@ void User::Oper(std::shared_ptr<OperInfo> info) FOREACH_MOD(OnPostOper, (this, oper->name, opername)); } +namespace +{ + void ParseModeList(std::bitset<64>& modeset, std::shared_ptr<ConfigTag> tag, const std::string& field) + { + for (const auto& chr : tag->getString(field)) + { + if (chr == '*') + modeset.set(); + else if (ModeParser::IsModeChar(chr)) + modeset.set(chr - 'A'); + else + ServerInstance->Logs.Log("CONFIG", LOG_DEFAULT, "'%c' is not a valid value for <class:%s>, ignoring...", chr, field.c_str()); + } + } +} + void OperInfo::init() { AllowedOperCommands.Clear(); @@ -428,36 +444,9 @@ void OperInfo::init() { AllowedOperCommands.AddList(tag->getString("commands")); AllowedPrivs.AddList(tag->getString("privs")); - - const std::string umodes = tag->getString("usermodes"); - for (std::string::const_iterator c = umodes.begin(); c != umodes.end(); ++c) - { - const char& chr = *c; - if (chr == '*') - this->AllowedUserModes.set(); - else if (ModeParser::IsModeChar(chr)) - this->AllowedUserModes[chr - 'A'] = true; - } - - const std::string cmodes = tag->getString("chanmodes"); - for (std::string::const_iterator c = cmodes.begin(); c != cmodes.end(); ++c) - { - const char& chr = *c; - if (chr == '*') - this->AllowedChanModes.set(); - else if (ModeParser::IsModeChar(chr)) - this->AllowedChanModes[chr - 'A'] = true; - } - - const std::string snomasks = tag->getString("snomasks", "*"); - for (std::string::const_iterator c = snomasks.begin(); c != snomasks.end(); ++c) - { - const char& chr = *c; - if (chr == '*') - this->AllowedSnomasks.set(); - else if (ModeParser::IsModeChar(chr)) - this->AllowedSnomasks[chr - 'A'] = true; - } + ParseModeList(AllowedChanModes, tag, "chanmodes"); + ParseModeList(AllowedUserModes, tag, "usermodes"); + ParseModeList(AllowedSnomasks, tag, "snomasks"); } } |
