diff options
| author | 2016-08-17 12:49:48 +0200 | |
|---|---|---|
| committer | 2016-08-17 12:49:48 +0200 | |
| commit | b9e11915a976daaf790ebc763aff56e19fd49e0f (patch) | |
| tree | 7c69dc9427a8a0470ff12f772846b956e747bf78 /src/modules/m_dccallow.cpp | |
| parent | core_hostname_lookup: find answer record of the correct type instead of assum... (diff) | |
| parent | Release v2.0.22 (diff) | |
| download | inspircd++-b9e11915a976daaf790ebc763aff56e19fd49e0f.tar.gz inspircd++-b9e11915a976daaf790ebc763aff56e19fd49e0f.tar.bz2 inspircd++-b9e11915a976daaf790ebc763aff56e19fd49e0f.zip | |
Merge insp20
Diffstat (limited to 'src/modules/m_dccallow.cpp')
| -rw-r--r-- | src/modules/m_dccallow.cpp | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/modules/m_dccallow.cpp b/src/modules/m_dccallow.cpp index 21cc97aa5..d8fbef69a 100644 --- a/src/modules/m_dccallow.cpp +++ b/src/modules/m_dccallow.cpp @@ -323,29 +323,43 @@ class ModuleDCCAllow : public Module return MOD_RES_PASSTHRU; } - // tokenize - std::stringstream ss(text); - std::string buf; - std::vector<std::string> tokens; - - while (ss >> buf) - tokens.push_back(buf); - - if (tokens.size() < 2) + std::string buf = text.substr(5); + size_t s = buf.find(' '); + if (s == std::string::npos) return MOD_RES_PASSTHRU; - irc::string type = tokens[1].c_str(); + irc::string type = assign(buf.substr(0, s)); ConfigTag* conftag = ServerInstance->Config->ConfValue("dccallow"); bool blockchat = conftag->getBool("blockchat"); if (type == "SEND") { - if (tokens.size() < 3) + size_t first; + + buf = buf.substr(s + 1); + + if (!buf.empty() && buf[0] == '"') + { + s = buf.find('"', 1); + + if (s == std::string::npos || s <= 1) + return MOD_RES_PASSTHRU; + + --s; + first = 1; + } + else + { + s = buf.find(' '); + first = 0; + } + + if (s == std::string::npos) return MOD_RES_PASSTHRU; std::string defaultaction = conftag->getString("action"); - std::string filename = tokens[2]; + std::string filename = buf.substr(first, s); bool found = false; for (unsigned int i = 0; i < bfl.size(); i++) |
