diff options
-rw-r--r-- | src/modules/m_oper_hash.cpp | 170 | ||||
-rw-r--r-- | src/modules/m_opermd5.cpp | 125 | ||||
-rw-r--r-- | src/modules/m_opersha256.cpp | 117 |
3 files changed, 170 insertions, 242 deletions
diff --git a/src/modules/m_oper_hash.cpp b/src/modules/m_oper_hash.cpp new file mode 100644 index 000000000..812228ca5 --- /dev/null +++ b/src/modules/m_oper_hash.cpp @@ -0,0 +1,170 @@ +/* +------------------------------------+ + * | 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. + * + * --------------------------------------------------- + */ + +/* $ModDesc: Allows for hashed oper passwords */ +/* $ModDep: m_md5.h m_sha256.h */ + +using namespace std; + +#include "inspircd_config.h" +#include "users.h" +#include "channels.h" +#include "modules.h" +#include "inspircd.h" + +#include "m_md5.h" +#include "m_sha256.h" + +enum ProviderType +{ + PROV_MD5, + PROV_SHA +}; + +/* Handle /MKPASSWD + */ +class cmd_mkpasswd : public command_t +{ + Module* Provider; + Module* Sender; + ProviderType Prov; + public: + cmd_mkpasswd (InspIRCd* Instance, Module* Sender, Module* Hasher, ProviderType P) : command_t(Instance,"MKPASSWD", 'o', 1), Provider(Hasher), Prov(P) + { + this->source = "m_oper_hash.so"; + syntax = "<any-text>"; + } + + CmdResult Handle (const char** parameters, int pcnt, userrec *user) + { + if (Prov == PROV_MD5) + { + MD5ResetRequest(Sender, Provider).Send(); + user->WriteServ("NOTICE %s :MD5 hashed password for %s is %s",user->nick,parameters[0], MD5SumRequest(Sender, Provider, parameters[0]).Send() ); + } + else + { + SHA256ResetRequest(Sender, Provider).Send(); + user->WriteServ("NOTICE %s :SHA256 hashed password for %s is %s",user->nick,parameters[0], SHA256SumRequest(Sender, Provider, parameters[0]).Send() ); + } + + return CMD_SUCCESS; + } +}; + +class ModuleOperHash : public Module +{ + + cmd_mkpasswd* mycommand; + Module* Provider; + std::string providername; + ProviderType ID; + + public: + + ModuleOperHash(InspIRCd* Me) + : Module::Module(Me) + { + ConfigReader Conf(ServerInstance); + providername = Conf.ReadValue("operhash","algorithm",0); + + if (providername.empty()) + providername = "md5"; + + if (providername == "md5") + ID = PROV_MD5; + else + ID = PROV_SHA; + + /* Try to find the md5 service provider, bail if it can't be found */ + Provider = ServerInstance->FindModule(std::string("m_") + providername + ".so"); + if (!Provider) + throw ModuleException(std::string("Can't find m_") + providername + ".so. Please load m_" + providername + ".so before m_oper_hash.so."); + + mycommand = new cmd_mkpasswd(ServerInstance, this, Provider, ID); + ServerInstance->AddCommand(mycommand); + } + + virtual ~ModuleOperHash() + { + } + + void Implements(char* List) + { + List[I_OnOperCompare] = 1; + } + + virtual int OnOperCompare(const std::string &data, const std::string &input) + { + /* always always reset first */ + if (ID == PROV_MD5) + { + MD5ResetRequest(this, Provider).Send(); + if (data.length() == 32) // if its 32 chars long, try it as an md5 + { + /* Does it match the md5 sum? */ + if (!strcasecmp(data.c_str(), MD5SumRequest(this, Provider, input.c_str()).Send())) + { + return 1; + } + else return 0; + } + } + else + { + SHA256ResetRequest(this, Provider).Send(); + if (data.length() == SHA256_BLOCK_SIZE) + { + if (!strcasecmp(data.c_str(), SHA256SumRequest(this, Provider, input.c_str()).Send())) + { + return 1; + } + else return 0; + } + } + return 0; + } + + virtual Version GetVersion() + { + return Version(1,1,0,1,VF_VENDOR,API_VERSION); + } +}; + + +class ModuleOperHashFactory : public ModuleFactory +{ + public: + ModuleOperHashFactory() + { + } + + ~ModuleOperHashFactory() + { + } + + virtual Module * CreateModule(InspIRCd* Me) + { + return new ModuleOperHash(Me); + } + +}; + + +extern "C" void * init_module( void ) +{ + return new ModuleOperHashFactory; +} diff --git a/src/modules/m_opermd5.cpp b/src/modules/m_opermd5.cpp deleted file mode 100644 index 127bdaa39..000000000 --- a/src/modules/m_opermd5.cpp +++ /dev/null @@ -1,125 +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. - * - * --------------------------------------------------- - */ - -/* $ModDesc: Allows for MD5 encrypted oper passwords */ -/* $ModDep: m_md5.h */ - -using namespace std; - -#include "inspircd_config.h" -#include "users.h" -#include "channels.h" -#include "modules.h" -#include "inspircd.h" - -#include "m_md5.h" - -/* Handle /MKPASSWD - */ -class cmd_mkpasswd : public command_t -{ - Module* MD5Provider; - Module* Sender; - public: - cmd_mkpasswd (InspIRCd* Instance, Module* Sender, Module* MD5) : command_t(Instance,"MKPASSWD", 'o', 1), MD5Provider(MD5) - { - this->source = "m_opermd5.so"; - syntax = "<any-text>"; - } - - CmdResult Handle (const char** parameters, int pcnt, userrec *user) - { - MD5ResetRequest(Sender, MD5Provider).Send(); - user->WriteServ("NOTICE %s :MD5 hashed password for %s is %s",user->nick,parameters[0], MD5SumRequest(Sender, MD5Provider, parameters[0]).Send() ); - return CMD_SUCCESS; - } -}; - -class ModuleOperMD5 : public Module -{ - - cmd_mkpasswd* mycommand; - Module* MD5Provider; - - public: - - ModuleOperMD5(InspIRCd* Me) - : Module::Module(Me) - { - /* Try to find the md5 service provider, bail if it can't be found */ - MD5Provider = ServerInstance->FindModule("m_md5.so"); - if (!MD5Provider) - throw ModuleException("Can't find m_md5.so. Please load m_md5.so before m_opermd5.so."); - - mycommand = new cmd_mkpasswd(ServerInstance, this, MD5Provider); - ServerInstance->AddCommand(mycommand); - } - - virtual ~ModuleOperMD5() - { - } - - void Implements(char* List) - { - List[I_OnOperCompare] = 1; - } - - virtual int OnOperCompare(const std::string &data, const std::string &input) - { - /* always always reset first */ - MD5ResetRequest(this, MD5Provider).Send(); - if (data.length() == 32) // if its 32 chars long, try it as an md5 - { - /* Does it match the md5 sum? */ - if (!strcasecmp(data.c_str(), MD5SumRequest(this, MD5Provider, input.c_str()).Send())) - { - return 1; - } - else return 0; - } - return 0; - } - - virtual Version GetVersion() - { - return Version(1,1,0,1,VF_VENDOR,API_VERSION); - } -}; - - -class ModuleOperMD5Factory : public ModuleFactory -{ - public: - ModuleOperMD5Factory() - { - } - - ~ModuleOperMD5Factory() - { - } - - virtual Module * CreateModule(InspIRCd* Me) - { - return new ModuleOperMD5(Me); - } - -}; - - -extern "C" void * init_module( void ) -{ - return new ModuleOperMD5Factory; -} diff --git a/src/modules/m_opersha256.cpp b/src/modules/m_opersha256.cpp deleted file mode 100644 index 9ed6e65df..000000000 --- a/src/modules/m_opersha256.cpp +++ /dev/null @@ -1,117 +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. - * - * --------------------------------------------------- - */ - -/* m_opersha256 - Originally written by Special <john@yarbbles.com> - * Updated December 2006 by Craig Edwards - */ - -/* $ModDesc: Allows for SHA-256 encrypted oper passwords */ -/* $ModDep: m_sha256.h */ - -#include "inspircd_config.h" -#include "users.h" -#include "channels.h" -#include "modules.h" -#include "inspircd.h" - -#include "m_sha256.h" - -class cmd_mksha256 : public command_t -{ - Module* Source; - Module* SHA256Provider; - public: - cmd_mksha256 (InspIRCd* Instance, Module* Src, Module* SHA256) : command_t(Instance,"MKSHA256", 'o', 1), Source(Src), SHA256Provider(SHA256) - { - this->source = "m_opersha256.so"; - syntax = "<any-text>"; - } - - CmdResult Handle(const char** parameters, int pcnt, userrec *user) - { - SHA256ResetRequest(Source, SHA256Provider).Send(); - user->WriteServ("NOTICE %s :SHA256 hashed password for %s is %s", user->nick, parameters[0], SHA256SumRequest(Source, SHA256Provider, parameters[0]).Send() ); - return CMD_SUCCESS; - } -}; - -class ModuleOperSHA256 : public Module -{ - cmd_mksha256 *mksha256cmd; - Module* SHA256Provider; -public: - - ModuleOperSHA256(InspIRCd* Me) : Module::Module(Me) - { - SHA256Provider = ServerInstance->FindModule("m_sha256.so"); - if (!SHA256Provider) - throw ModuleException("Can't find m_sha256.so. Please load m_sha256.so before m_opersha256.so."); - - mksha256cmd = new cmd_mksha256(ServerInstance, this, SHA256Provider); - ServerInstance->AddCommand(mksha256cmd); - } - - virtual ~ModuleOperSHA256() - { - } - - void Implements(char *List) - { - List[I_OnOperCompare] = 1; - } - - virtual int OnOperCompare(const std::string &data, const std::string &input) - { - SHA256ResetRequest(this, SHA256Provider).Send(); - if (data.length() == SHA256_BLOCK_SIZE) // If the data is as long as a hex sha256 hash, try it as that - { - if (!strcasecmp(data.c_str(), SHA256SumRequest(this, SHA256Provider, input.c_str()).Send() )) - return 1; - else - return -1; - } - return 0; - } - - virtual Version GetVersion() - { - return Version(1, 1, 0, 1, VF_VENDOR, API_VERSION); - } -}; - - -class ModuleOperSHA256Factory : public ModuleFactory -{ -public: - ModuleOperSHA256Factory() - { - } - - ~ModuleOperSHA256Factory() - { - } - - virtual Module *CreateModule(InspIRCd* Me) - { - return new ModuleOperSHA256(Me); - } - -}; - -extern "C" void * init_module( void ) -{ - return new ModuleOperSHA256Factory; -} |