aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_oper_hash.cpp
diff options
context:
space:
mode:
authorGravatar aquanight2008-01-27 00:12:11 +0000
committerGravatar aquanight2008-01-27 00:12:11 +0000
commit20bea3078d67a090ebcca64bf3cdbd7e6ab6adb6 (patch)
tree154357b8fdc476393e110ac48686a1160b508058 /src/modules/m_oper_hash.cpp
parentANNOUNCENENT -> ANNOUNCEMENT (diff)
downloadinspircd++-20bea3078d67a090ebcca64bf3cdbd7e6ab6adb6.tar.gz
inspircd++-20bea3078d67a090ebcca64bf3cdbd7e6ab6adb6.tar.bz2
inspircd++-20bea3078d67a090ebcca64bf3cdbd7e6ab6adb6.zip
Change API OnOperCompare to OnPassCompare, password hashing is now available for <connect:allow>, <power die= restart=>, <title> (m_customtitle.so), <vhost> (m_vhost.so), this works the same was as for <oper>: load m_password_hash.so (after all hasher modules, of course), and add hash="md5/sha256/whatever" to the relevant tag. Also fix m_callerid.cpp crashing on unload.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8755 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_oper_hash.cpp')
-rw-r--r--src/modules/m_oper_hash.cpp158
1 files changed, 0 insertions, 158 deletions
diff --git a/src/modules/m_oper_hash.cpp b/src/modules/m_oper_hash.cpp
deleted file mode 100644
index e0ea8246a..000000000
--- a/src/modules/m_oper_hash.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/* +------------------------------------+
- * | Inspire Internet Relay Chat Daemon |
- * +------------------------------------+
- *
- * InspIRCd: (C) 2002-2008 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
- *
- * This program is free but copyrighted software; see
- * the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-/* $ModDesc: Allows for hashed oper passwords */
-/* $ModDep: m_hash.h */
-
-#include "inspircd.h"
-#include "m_hash.h"
-
-typedef std::map<irc::string, Module*> hashymodules;
-
-/* Handle /MKPASSWD
- */
-class CommandMkpasswd : public Command
-{
- Module* Sender;
- hashymodules &hashers;
- std::deque<std::string> &names;
- public:
- CommandMkpasswd (InspIRCd* Instance, Module* S, hashymodules &h, std::deque<std::string> &n)
- : Command(Instance,"MKPASSWD", 'o', 2), Sender(S), hashers(h), names(n)
- {
- this->source = "m_oper_hash.so";
- syntax = "<hashtype> <any-text>";
- }
-
- void MakeHash(User* user, const char* algo, const char* stuff)
- {
- /* Lets see if they gave us an algorithm which has been implemented */
- hashymodules::iterator x = hashers.find(algo);
- if (x != hashers.end())
- {
- /* Yup, reset it first (Always ALWAYS do this) */
- HashResetRequest(Sender, x->second).Send();
- /* Now attempt to generate a hash */
- user->WriteServ("NOTICE %s :%s hashed password for %s is %s",user->nick, algo, stuff, HashSumRequest(Sender, x->second, stuff).Send() );
- }
- else
- {
- /* I dont do flying, bob. */
- user->WriteServ("NOTICE %s :Unknown hash type, valid hash types are: %s", user->nick, irc::stringjoiner(", ", names, 0, names.size() - 1).GetJoined().c_str() );
- }
- }
-
- CmdResult Handle (const char** parameters, int pcnt, User *user)
- {
- MakeHash(user, parameters[0], parameters[1]);
- /* NOTE: Don't propagate this across the network!
- * We dont want plaintext passes going all over the place...
- * To make sure it goes nowhere, return CMD_FAILURE!
- */
- return CMD_FAILURE;
- }
-};
-
-class ModuleOperHash : public Module
-{
-
- CommandMkpasswd* mycommand;
- ConfigReader* Conf;
- hashymodules hashers; /* List of modules which implement HashRequest */
- std::deque<std::string> names; /* Module names which implement HashRequest */
-
- public:
-
- ModuleOperHash(InspIRCd* Me)
- : Module(Me)
- {
-
- /* Read the config file first */
- Conf = NULL;
- OnRehash(NULL,"");
-
- /* Find all modules which implement the interface 'HashRequest' */
- modulelist* ml = ServerInstance->Modules->FindInterface("HashRequest");
-
- /* Did we find any modules? */
- if (ml)
- {
- /* Yes, enumerate them all to find out the hashing algorithm name */
- for (modulelist::iterator m = ml->begin(); m != ml->end(); m++)
- {
- /* Make a request to it for its name, its implementing
- * HashRequest so we know its safe to do this
- */
- std::string name = HashNameRequest(this, *m).Send();
- /* Build a map of them */
- hashers[name.c_str()] = *m;
- names.push_back(name);
- }
- }
- else
- {
- throw ModuleException("I can't find any modules loaded which implement the HashRequest interface! You probably forgot to load a hashing module such as m_md5.so or m_sha256.so.");
- }
-
- ServerInstance->Modules->UseInterface("HashRequest");
-
- mycommand = new CommandMkpasswd(ServerInstance, this, hashers, names);
- ServerInstance->AddCommand(mycommand);
- Implementation eventlist[] = { I_OnRehash, I_OnOperCompare };
- ServerInstance->Modules->Attach(eventlist, this, 2);
- }
-
- virtual ~ModuleOperHash()
- {
- ServerInstance->Modules->DoneWithInterface("HashRequest");
- }
-
-
- virtual void OnRehash(User* user, const std::string &parameter)
- {
- /* Re-read configuration file */
- if (Conf)
- delete Conf;
-
- Conf = new ConfigReader(ServerInstance);
- }
-
- virtual int OnOperCompare(const std::string &data, const std::string &input, int tagnumber)
- {
- /* First, lets see what hash theyre using on this oper */
- std::string hashtype = Conf->ReadValue("oper", "hash", tagnumber);
- hashymodules::iterator x = hashers.find(hashtype.c_str());
-
- /* Is this a valid hash name? (case insensitive) */
- if (x != hashers.end())
- {
- /* Reset the hashing module */
- HashResetRequest(this, x->second).Send();
- /* Compare the hash in the config to the generated hash */
- if (!strcasecmp(data.c_str(), HashSumRequest(this, x->second, input.c_str()).Send()))
- return 1;
- /* No match, and must be hashed, forbid */
- else return -1;
- }
-
- /* Not a hash, fall through to strcmp in core */
- return 0;
- }
-
- virtual Version GetVersion()
- {
- return Version(1,1,0,1,VF_VENDOR,API_VERSION);
- }
-};
-
-MODULE_INIT(ModuleOperHash)