aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Robin Burchell2012-04-14 14:40:07 -0700
committerGravatar Robin Burchell2012-04-14 14:40:07 -0700
commit8b94aaa438d0e3dfd1394d6a98afca5f67e096cc (patch)
tree9460a8ee200991b531c8398902eb6c76d07af8dc /src/modules
parentMerge pull request #52 from attilamolnar/insp12+rlinefix (diff)
parentRevert "m_ssl_gnutls: remove STARTTLS support" (diff)
Merge pull request #50 from gemina/insp12+starttls
insp12+starttls
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index 88cc575ff..88af84563 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -76,6 +76,37 @@ public:
std::string outbuf;
};
+class CommandStartTLS : public Command
+{
+ Module* Caller;
+ public:
+ CommandStartTLS (InspIRCd* Instance, Module* mod) : Command(Instance,"STARTTLS", 0, 0, true), Caller(mod)
+ {
+ this->source = "m_ssl_gnutls.so";
+ }
+
+ CmdResult Handle (const std::vector<std::string> &parameters, User *user)
+ {
+ if (user->registered == REG_ALL)
+ {
+ user->WriteNumeric(691, "%s :STARTTLS is not permitted after client registration is complete", user->nick.c_str());
+ }
+ else
+ {
+ if (!user->GetIOHook())
+ {
+ user->WriteNumeric(670, "%s :STARTTLS successful, go ahead with TLS handshake", user->nick.c_str());
+ user->AddIOHook(Caller);
+ Caller->OnRawSocketAccept(user->GetFd(), user->GetIPString(), user->GetPort());
+ }
+ else
+ user->WriteNumeric(691, "%s :STARTTLS failure", user->nick.c_str());
+ }
+
+ return CMD_FAILURE;
+ }
+};
+
class ModuleSSLGnuTLS : public Module
{
std::vector<std::string> listenports;
@@ -95,6 +126,8 @@ class ModuleSSLGnuTLS : public Module
int clientactive;
bool cred_alloc;
+ CommandStartTLS* starttls;
+
public:
ModuleSSLGnuTLS(InspIRCd* Me)
@@ -118,6 +151,9 @@ class ModuleSSLGnuTLS : public Module
I_OnBufferFlushed, I_OnRequest, I_OnUnloadModule, I_OnRehash, I_OnModuleRehash,
I_OnPostConnect, I_OnEvent, I_OnHookUserIO };
ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
+
+ starttls = new CommandStartTLS(ServerInstance, this);
+ ServerInstance->AddCommand(starttls);
}
virtual void OnRehash(User* user)
@@ -355,6 +391,7 @@ class ModuleSSLGnuTLS : public Module
{
if (!sslports.empty())
output.append(" SSL=" + sslports);
+ output.append(" STARTTLS");
}
virtual void OnHookUserIO(User* user, const std::string &targetip)