diff options
| author | 2012-04-14 14:40:07 -0700 | |
|---|---|---|
| committer | 2012-04-14 14:40:07 -0700 | |
| commit | 8b94aaa438d0e3dfd1394d6a98afca5f67e096cc (patch) | |
| tree | 9460a8ee200991b531c8398902eb6c76d07af8dc /src/modules | |
| parent | Merge pull request #52 from attilamolnar/insp12+rlinefix (diff) | |
| parent | Revert "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.cpp | 37 |
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> ¶meters, 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) |
