diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-04-05 23:13:54 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-04-05 23:13:54 +0000 |
commit | 2248866b4b3c260ae351607700d5fb0abf8c458b (patch) | |
tree | 028be2ce42e32c9103fd2bda14757731fc10799f /src/modules | |
parent | 75150d58c232a88cc09ff10d0236ef7157b325da (diff) |
Fix for bug #216, m_cloaking now tries to cloak a larger amount of the hostname for resolving hosts to fix the issue reported by satmd in bug #216
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6741 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/m_cloaking.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp index ae28075c0..907026df7 100644 --- a/src/modules/m_cloaking.cpp +++ b/src/modules/m_cloaking.cpp @@ -38,6 +38,37 @@ class CloakUser : public ModeHandler unsigned int key4; Module* Sender; Module* HashProvider; + + /** This function takes a domain name string and returns just the last two domain parts, + * or the last domain part if only two are available. Failing that it just returns what it was given. + * + * For example, if it is passed "svn.inspircd.org" it will return ".inspircd.org". + * If it is passed "brainbox.winbot.co.uk" it will return ".co.uk", + * and if it is passed "localhost.localdomain" it will return ".localdomain". + * + * This is used to ensure a significant part of the host is always cloaked (see Bug #216) + */ + std::string LastTwoDomainParts(const std::string &host) + { + int dots = 0; + std::string::size_type splitdot = host.length(); + + for (std::string::size_type x = host.length() - 1; x; --x) + { + if (host[x] == '.') + { + splitdot = x; + dots++; + } + if (dots >= 2) + break; + } + + if (splitdot == host.length()) + return host; + else + return host.substr(splitdot); + } public: CloakUser(InspIRCd* Instance, Module* Source, Module* Hash) : ModeHandler(Instance, 'x', 0, 0, false, MODETYPE_USER, false), Sender(Source), HashProvider(Hash) @@ -81,7 +112,7 @@ class CloakUser : public ModeHandler */ unsigned int iv[] = { key1, key2, key3, key4 }; - std::string a = (n1 ? n1 : n2); + std::string a = LastTwoDomainParts(dest->host); std::string b; /** Reset the Hash module, and send it our IV and hex table */ |