summaryrefslogtreecommitdiff
path: root/src/core/enc_none.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/enc_none.cpp')
-rw-r--r--src/core/enc_none.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/core/enc_none.cpp b/src/core/enc_none.cpp
new file mode 100644
index 000000000..280c86bd2
--- /dev/null
+++ b/src/core/enc_none.cpp
@@ -0,0 +1,78 @@
+/* Module for plain text encryption.
+ *
+ * (C) 2003-2010 Anope Team
+ * Contact us at team@anope.org
+ *
+ * This program is free but copyrighted software; see the file COPYING for
+ * details.
+ */
+
+#include "module.h"
+
+class ENone : public Module
+{
+ public:
+ ENone(const std::string &modname, const std::string &creator) : Module(modname, creator)
+ {
+ this->SetAuthor("Anope");
+ this->SetVersion(VERSION_STRING);
+ this->SetType(ENCRYPTION);
+
+ ModuleManager::Attach(I_OnEncrypt, this);
+ ModuleManager::Attach(I_OnEncryptInPlace, this);
+ ModuleManager::Attach(I_OnDecrypt, this);
+ ModuleManager::Attach(I_OnCheckPassword, this);
+ }
+
+ EventReturn OnEncrypt(const std::string &src, std::string &dest)
+ {
+ std::string buf = "plain:";
+ char cpass[1000];
+ b64_encode(src.c_str(), src.size(), cpass, 1000);
+ buf.append(cpass);
+ Alog(LOG_DEBUG_2) << "(enc_none) hashed password from [" << src << "] to [" << buf << "]";
+ dest.assign(buf);
+ return EVENT_ALLOW;
+ }
+
+ EventReturn OnEncryptInPlace(std::string &buf)
+ {
+ return this->OnEncrypt(buf, buf);
+ }
+
+ EventReturn OnDecrypt(const std::string &hashm, const std::string &src, std::string &dest)
+ {
+ if (hashm != "plain")
+ return EVENT_CONTINUE;
+ char cpass[1000];
+ memset(&cpass, 0, sizeof(cpass));
+ size_t pos = src.find(":");
+ std::string buf(src.begin()+pos+1, src.end());
+ b64_decode(buf.c_str(), cpass, 1000);
+ dest.assign(cpass);
+ return EVENT_ALLOW;
+ }
+
+ EventReturn OnCheckPassword(const std::string &hashm, std::string &plaintext, std::string &password)
+ {
+ if (hashm != "plain")
+ return EVENT_CONTINUE;
+ std::string buf;
+ this->OnEncrypt(plaintext, buf);
+ if(!password.compare(buf))
+ {
+ /* if we are NOT the first module in the list,
+ * we want to re-encrypt the pass with the new encryption
+ */
+ if (Config.EncModuleList.front().compare(this->name))
+ {
+ enc_encrypt(plaintext, password);
+ }
+ return EVENT_ALLOW;
+ }
+ return EVENT_STOP;
+ }
+
+};
+
+MODULE_INIT(ENone)