summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-02-28 21:08:12 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-02-28 21:08:12 +0000
commit0681d96fe6c36199464280cb017090cbac1532d5 (patch)
tree5614a7216c0b21f8d062d7f9fb3714c070d8978b
parent14964459855700c5c6ff71707c89883850fdf7ca (diff)
Added configurable cloakkey and cloakprefix
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3387 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/modules/m_cloaking.cpp64
1 files changed, 45 insertions, 19 deletions
diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp
index c48ff7b9c..044d51198 100644
--- a/src/modules/m_cloaking.cpp
+++ b/src/modules/m_cloaking.cpp
@@ -61,7 +61,12 @@ class ModuleCloaking : public Module
{
private:
- Server *Srv;
+ Server *Srv;
+ std::string prefix;
+ int key1;
+ int key2;
+ int key3;
+ int key4;
void byteSwap(word32 *buf, unsigned words)
{
@@ -77,10 +82,10 @@ class ModuleCloaking : public Module
void xMD5Init(struct xMD5Context *ctx)
{
- ctx->buf[0] = 0x67452301;
- ctx->buf[1] = 0xefcdab89;
- ctx->buf[2] = 0x98badcfe;
- ctx->buf[3] = 0x10325476;
+ ctx->buf[0] = key1;
+ ctx->buf[1] = key2;
+ ctx->buf[2] = key3;
+ ctx->buf[3] = key4;
ctx->bytes[0] = 0;
ctx->bytes[1] = 0;
@@ -280,17 +285,9 @@ class ModuleCloaking : public Module
// we must create a new mode. Set the parameters so the
// mode doesn't require oper, and is a client usermode
// with no parameters (actually, you cant have params for a umode!)
- if (!Srv->AddExtendedMode('x',MT_CLIENT,false,0,0))
- {
- // we couldn't claim mode x... possibly anther module has it,
- // this might become likely to happen if there are a lot of 3rd
- // party modules around in the future -- any 3rd party modules
- // SHOULD implement a system of configurable mode letters (e.g.
- // from a config file)
- Srv->Log(DEFAULT,"*** m_cloaking: ERROR, failed to allocate user mode +x!");
- printf("Could not claim usermode +x for this module!");
- return;
- }
+ Srv->AddExtendedMode('x',MT_CLIENT,false,0,0);
+
+ OnRehash("");
}
virtual ~ModuleCloaking()
@@ -304,9 +301,38 @@ class ModuleCloaking : public Module
return Version(1,0,0,1,VF_STATIC|VF_VENDOR);
}
+ virtual void OnRehash(std::string parameter)
+ {
+ ConfigReader* Conf = new ConfigReader();
+ key1 = key2 = key3 = key4 = 0;
+ key1 = Conf->ReadInteger("cloak","key1",0,false);
+ key2 = Conf->ReadInteger("cloak","key2",0,false);
+ key3 = Conf->ReadInteger("cloak","key3",0,false);
+ key4 = Conf->ReadInteger("cloak","key4",0,false);
+ prefix = Conf->ReadValue("cloak","prefix",0);
+ if (prefix == "")
+ {
+ prefix = Srv->GetNetworkName();
+ }
+ if (!key1 && !key2 && !key3 && !key4)
+ {
+ key1 = 0x67452301;
+ key2 = 0xefcdab89;
+ key3 = 0x98badcfe;
+ key4 = 0x10325476;
+ Srv->Log("WARNING! You have not defined cloak keys for m_cloaking!!! THIS IS INSECURE AND SHOULD BE CHECKED!");
+ Srv->Log("Using default builtin keys (INSECURE): 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476");
+ }
+
+ /*ctx->buf[0] = 0x67452301;
+ ctx->buf[1] = 0xefcdab89;
+ ctx->buf[2] = 0x98badcfe;
+ ctx->buf[3] = 0x10325476;*/
+ }
+
void Implements(char* List)
{
- List[I_OnExtendedMode] = List[I_OnUserConnect] = 1;
+ List[I_OnRehash] = List[I_OnExtendedMode] = List[I_OnUserConnect] = 1;
}
virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params)
@@ -349,12 +375,12 @@ class ModuleCloaking : public Module
if (!inet_aton(dest->host,&testaddr))
{
// if they have a hostname, make something appropriate
- b = Srv->GetNetworkName() + "-" + std::string(ra) + a;
+ b = prefix + "-" + std::string(ra) + a;
}
else
{
// else, they have an ip
- b = std::string(ra) + "." + Srv->GetNetworkName() + ".cloak";
+ b = std::string(ra) + "." + prefix + ".cloak";
}
Srv->Log(DEBUG,"cloak: allocated "+b);
Srv->ChangeHost(dest,b);