summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_cloaking.cpp72
-rw-r--r--src/modules/m_hash.h (renamed from src/modules/m_sha256.h)0
-rw-r--r--src/modules/m_md5.cpp14
-rw-r--r--src/modules/m_md5.h177
-rw-r--r--src/modules/m_oper_hash.cpp51
-rw-r--r--src/modules/m_sha256.cpp14
6 files changed, 72 insertions, 256 deletions
diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp
index 95b54b522..2eb078bf8 100644
--- a/src/modules/m_cloaking.cpp
+++ b/src/modules/m_cloaking.cpp
@@ -21,10 +21,10 @@
#include "channels.h"
#include "modules.h"
-#include "m_md5.h"
+#include "m_hash.h"
/* $ModDesc: Provides masking of user hostnames */
-/* $ModDep: m_md5.h */
+/* $ModDep: m_hash.h */
/* Used to vary the output a little more depending on the cloak keys */
static const char* xtab[] = {"F92E45D871BCA630", "A1B9D80C72E653F4", "1ABC078934DEF562", "ABCDEF5678901234"};
@@ -40,10 +40,10 @@ class CloakUser : public ModeHandler
unsigned int key3;
unsigned int key4;
Module* Sender;
- Module* MD5Provider;
+ Module* HashProvider;
public:
- CloakUser(InspIRCd* Instance, Module* Source, Module* MD5) : ModeHandler(Instance, 'x', 0, 0, false, MODETYPE_USER, false), Sender(Source), MD5Provider(MD5)
+ CloakUser(InspIRCd* Instance, Module* Source, Module* Hash) : ModeHandler(Instance, 'x', 0, 0, false, MODETYPE_USER, false), Sender(Source), HashProvider(Hash)
{
}
@@ -90,13 +90,13 @@ class CloakUser : public ModeHandler
std::string b;
insp_inaddr testaddr;
- /** Reset the MD5 module, and send it our IV and hex table */
- MD5ResetRequest(Sender, MD5Provider).Send();
- MD5KeyRequest(Sender, MD5Provider, iv).Send();
- MD5HexRequest(Sender, MD5Provider, xtab[0]);
+ /** Reset the Hash module, and send it our IV and hex table */
+ HashResetRequest(Sender, HashProvider).Send();
+ HashKeyRequest(Sender, HashProvider, iv).Send();
+ HashHexRequest(Sender, HashProvider, xtab[0]);
- /* Generate a cloak using specialized MD5 */
- std::string hostcloak = prefix + "-" + MD5SumRequest(Sender, MD5Provider, dest->host).Send() + a;
+ /* Generate a cloak using specialized Hash */
+ std::string hostcloak = prefix + "-" + HashSumRequest(Sender, HashProvider, dest->host).Send() + a;
/* Fix by brain - if the cloaked host is > the max length of a host (64 bytes
* according to the DNS RFC) then tough titty, they get cloaked as an IP.
@@ -154,22 +154,22 @@ class CloakUser : public ModeHandler
octet3 = octet1 + "." + octet2 + "." + octet3;
octet2 = octet1 + "." + octet2;
- /* Reset the MD5 module and send it our IV */
- MD5ResetRequest(Sender, MD5Provider).Send();
- MD5KeyRequest(Sender, MD5Provider, iv).Send();
+ /* Reset the Hash module and send it our IV */
+ HashResetRequest(Sender, HashProvider).Send();
+ HashKeyRequest(Sender, HashProvider, iv).Send();
- /* Send the MD5 module a different hex table for each octet group's MD5 sum */
- MD5HexRequest(Sender, MD5Provider, xtab[(key1+i1) % 4]).Send();
- ra1 = std::string(MD5SumRequest(Sender, MD5Provider, octet1).Send()).substr(0,6);
+ /* Send the Hash module a different hex table for each octet group's Hash sum */
+ HashHexRequest(Sender, HashProvider, xtab[(key1+i1) % 4]).Send();
+ ra1 = std::string(HashSumRequest(Sender, HashProvider, octet1).Send()).substr(0,6);
- MD5HexRequest(Sender, MD5Provider, xtab[(key2+i2) % 4]).Send();
- ra2 = std::string(MD5SumRequest(Sender, MD5Provider, octet2).Send()).substr(0,6);
+ HashHexRequest(Sender, HashProvider, xtab[(key2+i2) % 4]).Send();
+ ra2 = std::string(HashSumRequest(Sender, HashProvider, octet2).Send()).substr(0,6);
- MD5HexRequest(Sender, MD5Provider, xtab[(key3+i3) % 4]).Send();
- ra3 = std::string(MD5SumRequest(Sender, MD5Provider, octet3).Send()).substr(0,6);
+ HashHexRequest(Sender, HashProvider, xtab[(key3+i3) % 4]).Send();
+ ra3 = std::string(HashSumRequest(Sender, HashProvider, octet3).Send()).substr(0,6);
- MD5HexRequest(Sender, MD5Provider, xtab[(key4+i4) % 4]).Send();
- ra4 = std::string(MD5SumRequest(Sender, MD5Provider, octet4).Send()).substr(0,6);
+ HashHexRequest(Sender, HashProvider, xtab[(key4+i4) % 4]).Send();
+ ra4 = std::string(HashSumRequest(Sender, HashProvider, octet4).Send()).substr(0,6);
/* Stick them all together */
return std::string().append(ra1).append(".").append(ra2).append(".").append(ra3).append(".").append(ra4);
@@ -182,27 +182,27 @@ class CloakUser : public ModeHandler
std::string item = "";
int rounds = 0;
- /* Reset the MD5 module and send it our IV */
- MD5ResetRequest(Sender, MD5Provider).Send();
- MD5KeyRequest(Sender, MD5Provider, iv).Send();
+ /* Reset the Hash module and send it our IV */
+ HashResetRequest(Sender, HashProvider).Send();
+ HashKeyRequest(Sender, HashProvider, iv).Send();
for (const char* input = ip; *input; input++)
{
item += *input;
if (item.length() > 5)
{
- /* Send the MD5 module a different hex table for each octet group's MD5 sum */
- MD5HexRequest(Sender, MD5Provider, xtab[(key1+rounds) % 4]).Send();
- hashies.push_back(std::string(MD5SumRequest(Sender, MD5Provider, item).Send()).substr(0,10));
+ /* Send the Hash module a different hex table for each octet group's Hash sum */
+ HashHexRequest(Sender, HashProvider, xtab[(key1+rounds) % 4]).Send();
+ hashies.push_back(std::string(HashSumRequest(Sender, HashProvider, item).Send()).substr(0,10));
item = "";
}
rounds++;
}
if (!item.empty())
{
- /* Send the MD5 module a different hex table for each octet group's MD5 sum */
- MD5HexRequest(Sender, MD5Provider, xtab[(key1+rounds) % 4]).Send();
- hashies.push_back(std::string(MD5SumRequest(Sender, MD5Provider, item).Send()).substr(0,10));
+ /* Send the Hash module a different hex table for each octet group's Hash sum */
+ HashHexRequest(Sender, HashProvider, xtab[(key1+rounds) % 4]).Send();
+ hashies.push_back(std::string(HashSumRequest(Sender, HashProvider, item).Send()).substr(0,10));
item = "";
}
/* Stick them all together */
@@ -236,19 +236,19 @@ class ModuleCloaking : public Module
private:
CloakUser* cu;
- Module* MD5Module;
+ Module* HashModule;
public:
ModuleCloaking(InspIRCd* Me)
: Module::Module(Me)
{
- /* Attempt to locate the MD5 service provider, bail if we can't find it */
- MD5Module = ServerInstance->FindModule("m_md5.so");
- if (!MD5Module)
+ /* Attempt to locate the Hash service provider, bail if we can't find it */
+ HashModule = ServerInstance->FindModule("m_md5.so");
+ if (!HashModule)
throw ModuleException("Can't find m_md5.so. Please load m_md5.so before m_cloaking.so.");
/* Create new mode handler object */
- cu = new CloakUser(ServerInstance, this, MD5Module);
+ cu = new CloakUser(ServerInstance, this, HashModule);
/* Register it with the core */
ServerInstance->AddMode(cu, 'x');
diff --git a/src/modules/m_sha256.h b/src/modules/m_hash.h
index 0c9eecdca..0c9eecdca 100644
--- a/src/modules/m_sha256.h
+++ b/src/modules/m_hash.h
diff --git a/src/modules/m_md5.cpp b/src/modules/m_md5.cpp
index 55e462077..a753ef577 100644
--- a/src/modules/m_md5.cpp
+++ b/src/modules/m_md5.cpp
@@ -15,7 +15,7 @@
*/
/* $ModDesc: Allows for MD5 encrypted oper passwords */
-/* $ModDep: m_md5.h */
+/* $ModDep: m_hash.h */
using namespace std;
@@ -28,7 +28,7 @@ using namespace std;
#include "modules.h"
#include "inspircd.h"
-#include "m_md5.h"
+#include "m_hash.h"
/* The four core functions - F1 is optimized somewhat */
#define F1(x, y, z) (z ^ (x & (y ^ z)))
@@ -291,22 +291,22 @@ class ModuleMD5 : public Module
virtual char* OnRequest(Request* request)
{
- MD5Request* MD5 = (MD5Request*)request;
- if (strcmp("MD5_KEY", request->GetId()) == 0)
+ HashRequest* MD5 = (HashRequest*)request;
+ if (strcmp("KEY", request->GetId()) == 0)
{
this->key = (unsigned int*)MD5->GetKeyData();
}
- else if (strcmp("MD5_HEX", request->GetId()) == 0)
+ else if (strcmp("HEX", request->GetId()) == 0)
{
this->chars = (char*)MD5->GetOutputs();
}
- else if (strcmp("MD5_SUM", request->GetId()) == 0)
+ else if (strcmp("SUM", request->GetId()) == 0)
{
static char data[MAXBUF];
GenHash((const char*)MD5->GetHashData(), data, chars ? chars : "0123456789abcdef", key);
return data;
}
- else if (strcmp("MD5_RESET", request->GetId()) == 0)
+ else if (strcmp("RESET", request->GetId()) == 0)
{
this->chars = NULL;
this->key = NULL;
diff --git a/src/modules/m_md5.h b/src/modules/m_md5.h
deleted file mode 100644
index 448637359..000000000
--- a/src/modules/m_md5.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* +------------------------------------+
- * | Inspire Internet Relay Chat Daemon |
- * +------------------------------------+
- *
- * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
- * E-mail:
- * <brain@chatspike.net>
- * <Craig@chatspike.net>
- *
- * Written by Craig Edwards, Craig McLure, and others.
- * This program is free but copyrighted software; see
- * the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#ifndef __MD5_H__
-#define __MD5_H__
-
-#include "modules.h"
-
-/** MD5Request is the base class used to send MD5 requests to m_md5.so.
- * You should not instantiate classes of type MD5Request directly, instead
- * you should instantiate classes of type MD5ResetRequest, MD5SumRequest,
- * MD5KeyRequest and MD5HexRequest, shown below.
- */
-class MD5Request : public Request
-{
- /** The keys (IV) to use */
- unsigned int* keys;
- /** The output characters (hex sequence) to use */
- const char* outputs;
- /** The string to hash */
- std::string tohash;
- public:
- /** Initialize MD5Request as an MD5_RESET message */
- MD5Request(Module* Me, Module* Target) : Request(Me, Target, "MD5_RESET")
- {
- }
-
- /** Initialize MD5Request as an MD5_SUM message */
- MD5Request(Module* Me, Module* Target, const std::string &hashable) : Request(Me, Target, "MD5_SUM"), keys(NULL), outputs(NULL), tohash(hashable)
- {
- }
-
- /** Initialize MD5Request as an MD5_KEY message */
- MD5Request(Module* Me, Module* Target, unsigned int* k) : Request(Me, Target, "MD5_KEY"), keys(k), outputs(NULL), tohash("")
- {
- }
-
- /** Initialize MD5Request as an MD5_HEX message */
- MD5Request(Module* Me, Module* Target, const char* out) : Request(Me, Target, "MD5_HEX"), keys(NULL), outputs(out), tohash("")
- {
- }
-
- /** Get data to be hashed */
- const char* GetHashData()
- {
- return tohash.c_str();
- }
-
- /** Get keys (IVs) to be used */
- unsigned int* GetKeyData()
- {
- return keys;
- }
-
- /** Get output characters (hex sequence) to be used */
- const char* GetOutputs()
- {
- return outputs;
- }
-};
-
-/** Send this class to m_md5.so to reset the MD5 module to a known state.
- * This will reset the IV to the defaults specified by the MD5 spec,
- * and reset the hex sequence to "0123456789abcdef". It should be sent before
- * ANY other Request types.
- *
- * Example:
- * \code
- * // Reset the MD5 module.
- * MD5ResetRequest(this, MD5Module).Send();
- * \endcode
- */
-class MD5ResetRequest : public MD5Request
-{
- public:
- /** Initialize MD5ResetRequest for sending.
- * @param Me A pointer to the sending module
- * @param Target A pointer to the m_md5.so module
- */
- MD5ResetRequest(Module* Me, Module* Target) : MD5Request(Me, Target)
- {
- }
-};
-
-/** Send this class to m_md5.so to MD5SUM a std::string.
- * You should make sure you know the state of the module before you send this
- * class, e.g. by first sending an MD5ResetRequest class. The hash will be
- * returned when you call Send().
- *
- * Example:
- * \code
- * // ALWAYS ALWAYS reset first, or set your own IV and hex chars.
- * MD5ResetRequest(this, MD5Module).Send();
- * // Get the MD5 sum of the string 'doodads'.
- * std::string result = MD5SumRequest(this, MD5Module, "doodads").Send();
- * \endcode
- */
-class MD5SumRequest : public MD5Request
-{
- public:
- /** Initialize MD5SumRequest for sending.
- * @param Me A pointer to the sending module
- * @param Target A pointer to the m_md5.so module
- * @param data The data to be hashed
- */
- MD5SumRequest(Module* Me, Module* Target, const std::string &data) : MD5Request(Me, Target, data)
- {
- }
-};
-
-/** Send this class to m_md5.so to change the IVs (keys) to use for hashing.
- * You should make sure you know the state of the module before you send this
- * class, e.g. by first sending an MD5ResetRequest class. The default values for
- * the IV's are those specified in the MD5 specification. Only in very special
- * circumstances should you need to change the IV's (see for example m_cloaking.cpp)
- *
- * Example:
- * \code
- * unsigned int iv[] = { 0xFFFFFFFF, 0x00000000, 0xAAAAAAAA, 0xCCCCCCCC };
- * MD5KeyRequest(this, MD5Module, iv);
- * \endcode
- */
-class MD5KeyRequest : public MD5Request
-{
- public:
- /** Initialize MD5KeyRequest for sending.
- * @param Me A pointer to the sending module
- * @param Target A pointer to the m_md5.so module
- * @param data The new IV's. This should be an array of exactly four 32 bit values.
- * On 64-bit architectures, the upper 32 bits of the values will be discarded.
- */
- MD5KeyRequest(Module* Me, Module* Target, unsigned int* data) : MD5Request(Me, Target, data)
- {
- }
-};
-
-/** Send this class to m_md5.so to change the hex sequence to use for generating the returned value.
- * You should make sure you know the state of the module before you send this
- * class, e.g. by first sending an MD5ResetRequest class. The default value for
- * the hex sequence is "0123456789abcdef". Only in very special circumstances should
- * you need to change the hex sequence (see for example m_cloaking.cpp).
- *
- * Example:
- * \code
- * static const char tab[] = "fedcba9876543210";
- * MD5HexRequest(this, MD5Module, tab);
- * \endcode
- */
-class MD5HexRequest : public MD5Request
-{
- public:
- /** Initialize MD5HexRequest for sending.
- * @param Me A pointer to the sending module
- * @param Target A pointer to the m_md5.so module
- * @param data The hex sequence to use. This should contain exactly 16 ASCII characters,
- * terminated by a NULL char.
- */
- MD5HexRequest(Module* Me, Module* Target, const char* data) : MD5Request(Me, Target, data)
- {
- }
-};
-
-#endif
-
diff --git a/src/modules/m_oper_hash.cpp b/src/modules/m_oper_hash.cpp
index d74939a5d..e070bfc87 100644
--- a/src/modules/m_oper_hash.cpp
+++ b/src/modules/m_oper_hash.cpp
@@ -15,7 +15,7 @@
*/
/* $ModDesc: Allows for hashed oper passwords */
-/* $ModDep: m_md5.h m_sha256.h */
+/* $ModDep: m_hash.h */
using namespace std;
@@ -25,8 +25,7 @@ using namespace std;
#include "modules.h"
#include "inspircd.h"
-#include "m_md5.h"
-#include "m_sha256.h"
+#include "m_hash.h"
enum ProviderTypes
{
@@ -50,31 +49,21 @@ class cmd_mkpasswd : public command_t
syntax = "<hashtype> <any-text>";
}
+ void MakeHash(userrec* user, Module* ProviderMod, const char* algo, const char* stuff)
+ {
+ HashResetRequest(Sender, ProviderMod);
+ user->WriteServ("NOTICE %s :%s hashed password for %s is %s",user->nick, algo, stuff, HashSumRequest(Sender, ProviderMod, stuff).Send() );
+ }
+
CmdResult Handle (const char** parameters, int pcnt, userrec *user)
{
- if (!strcasecmp(parameters[0], "md5"))
+ if ((!strcasecmp(parameters[0], "MD5")) && ((Prov & PROV_MD5) > 0))
{
- if ((Prov & PROV_MD5) > 0)
- {
- MD5ResetRequest(Sender, MD5Provider).Send();
- user->WriteServ("NOTICE %s :MD5 hashed password for %s is %s",user->nick, parameters[1], MD5SumRequest(Sender, MD5Provider, parameters[1]).Send() );
- }
- else
- {
- user->WriteServ("NOTICE %s :MD5 hashing is not available (m_md5.so not loaded)");
- }
+ MakeHash(user, MD5Provider, "MD5", parameters[1]);
}
- else if (!strcasecmp(parameters[0], "sha256"))
+ else if ((!strcasecmp(parameters[0], "SHA256")) && ((Prov & PROV_SHA) > 0))
{
- if ((Prov & PROV_SHA) > 0)
- {
- SHA256ResetRequest(Sender, SHAProvider).Send();
- user->WriteServ("NOTICE %s :SHA256 hashed password for %s is %s",user->nick, parameters[1], SHA256SumRequest(Sender, SHAProvider, parameters[1]).Send() );
- }
- else
- {
- user->WriteServ("NOTICE %s :SHA256 hashing is not available (m_sha256.so not loaded)");
- }
+ MakeHash(user, SHAProvider, "SHA256", parameters[1]);
}
else
{
@@ -140,20 +129,24 @@ class ModuleOperHash : public Module
virtual int OnOperCompare(const std::string &data, const std::string &input, int tagnumber)
{
std::string hashtype = Conf->ReadValue("oper", "hash", tagnumber);
+ Module* ModPtr = NULL;
+
if ((hashtype == "sha256") && (data.length() == SHA256_BLOCK_SIZE) && ((ID & PROV_SHA) > 0))
{
- SHA256ResetRequest(this, SHAProvider).Send();
- if (!strcasecmp(data.c_str(), SHA256SumRequest(this, SHAProvider, input.c_str()).Send()))
- return 1;
- else return -1;
+ ModPtr = SHAProvider;
}
else if ((hashtype == "md5") && (data.length() == 32) && ((ID & PROV_MD5) > 0))
{
- MD5ResetRequest(this, MD5Provider).Send();
- if (!strcasecmp(data.c_str(), MD5SumRequest(this, MD5Provider, input.c_str()).Send()))
+ ModPtr = MD5Provider;
+ }
+ if (ModPtr)
+ {
+ HashResetRequest(this, ModPtr).Send();
+ if (!strcasecmp(data.c_str(), HashSumRequest(this, ModPtr, input.c_str()).Send()))
return 1;
else return -1;
}
+
return 0;
}
diff --git a/src/modules/m_sha256.cpp b/src/modules/m_sha256.cpp
index f446633b6..07bcab3ae 100644
--- a/src/modules/m_sha256.cpp
+++ b/src/modules/m_sha256.cpp
@@ -51,7 +51,7 @@
*/
/* $ModDesc: Allows for SHA-256 encrypted oper passwords */
-/* $ModDep: m_sha256.h */
+/* $ModDep: m_hash.h */
#include "inspircd_config.h"
#ifdef HAS_STDINT
@@ -62,7 +62,7 @@
#include "modules.h"
#include "inspircd.h"
-#include "m_sha256.h"
+#include "m_hash.h"
#ifndef HAS_STDINT
typedef unsigned int uint32_t;
@@ -262,22 +262,22 @@ class ModuleSHA256 : public Module
virtual char* OnRequest(Request* request)
{
- SHA256Request* SHA = (SHA256Request*)request;
- if (strcmp("SHA256_KEY", request->GetId()) == 0)
+ HashRequest* SHA = (HashRequest*)request;
+ if (strcmp("KEY", request->GetId()) == 0)
{
this->key = (unsigned int*)SHA->GetKeyData();
}
- else if (strcmp("SHA256_HEX", request->GetId()) == 0)
+ else if (strcmp("HEX", request->GetId()) == 0)
{
this->chars = (char*)SHA->GetOutputs();
}
- else if (strcmp("SHA256_SUM", request->GetId()) == 0)
+ else if (strcmp("SUM", request->GetId()) == 0)
{
static char data[MAXBUF];
SHA256((const char*)SHA->GetHashData(), data, strlen(SHA->GetHashData()), chars ? chars : "0123456789abcdef", key);
return data;
}
- else if (strcmp("SHA256_RESET", request->GetId()) == 0)
+ else if (strcmp("RESET", request->GetId()) == 0)
{
this->chars = NULL;
this->key = NULL;