summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorom <om@e03df62e-2008-0410-955e-edbf42e46eb7>2006-01-25 14:49:12 +0000
committerom <om@e03df62e-2008-0410-955e-edbf42e46eb7>2006-01-25 14:49:12 +0000
commita8d1eab5462e704ccc10e143df54d3136fd5a5cc (patch)
treee0003490dfc6caf28491e7877c8dea63e60bd12b /src
parentbaea829a3d0694c2828c2c220dc2ec498166e047 (diff)
Adding the +e and +I modules m_banexception and m_inviteexception, also adding their shared utility header
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2884 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp14
-rw-r--r--src/modules/m_banexception.cpp87
-rw-r--r--src/modules/m_inviteexception.cpp89
3 files changed, 188 insertions, 2 deletions
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index c2a97e12a..62e6da1e2 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -90,14 +90,17 @@ class ModuleSSL : public Module
if(gnutls_dh_params_init(&dh_params) < 0)
log(DEFAULT, "m_ssl_gnutls.so: Failed to initialise DH parameters");
- OnRehash("");
-
+ OnRehash("ssl");
+
// Void return, guess we assume success
gnutls_certificate_set_dh_params(x509_cred, dh_params);
}
virtual void OnRehash(std::string param)
{
+ if(param != "ssl")
+ return;
+
delete Conf;
Conf = new ConfigReader;
@@ -173,6 +176,12 @@ class ModuleSSL : public Module
if(gnutls_certificate_set_x509_key_file (x509_cred, certfile.c_str(), keyfile.c_str(), GNUTLS_X509_FMT_PEM) < 0)
log(DEFAULT, "m_ssl_gnutls.so: Failed to set X.509 certificate and key files: %s and %s", certfile.c_str(), keyfile.c_str());
+ // This may be on a large (once a day or week) timer eventually.
+ GenerateDHParams();
+ }
+
+ void GenerateDHParams()
+ {
// Generate Diffie Hellman parameters - for use with DHE
// kx algorithms. These should be discarded and regenerated
// once a day, once a week or once a month. Depending on the
@@ -251,6 +260,7 @@ class ModuleSSL : public Module
virtual void OnRawSocketClose(int fd)
{
+ log(DEBUG, "OnRawSocketClose: %d", fd);
CloseSession(&sessions[fd]);
}
diff --git a/src/modules/m_banexception.cpp b/src/modules/m_banexception.cpp
new file mode 100644
index 000000000..7d99e1f47
--- /dev/null
+++ b/src/modules/m_banexception.cpp
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <string>
+#include <vector>
+#include "users.h"
+#include "channels.h"
+#include "modules.h"
+#include "helperfuncs.h"
+#include "u_listmode.h"
+
+/* $ModDesc: Provides support for the +e channel mode */
+
+/* Written by Om<om@inspircd.org>, April 2005. */
+/* Rewritten to use the listmode utility by Om, December 2005 */
+/* Adapted from m_exception, which was originally based on m_chanprotect and m_silence */
+
+// The +e channel mode takes a nick!ident@host, glob patterns allowed,
+// and if a user matches an entry on the +e list then they can join the channel, overriding any (+b) bans set on them
+
+
+class ModuleBanException : public ListModeBaseModule
+{
+public:
+ ModuleBanException(Server* serv) : ListModeBaseModule::ListModeBaseModule(serv, 'e', "End of Channel Exception List", "348", "349")
+ {
+ }
+
+ virtual void Implements(char* List)
+ {
+ this->DoImplements(List);
+ List[I_On005Numeric] = List[I_OnCheckBan] = 1;
+ }
+
+ virtual void On005Numeric(std::string &output)
+ {
+ output.append(" EXCEPTS");
+ output.insert(output.find("CHANMODES=", 0)+10, "e");
+ }
+
+ virtual int OnCheckBan(userrec* user, chanrec* chan)
+ {
+ if(chan != NULL)
+ {
+ modelist* list = (modelist*)chan->GetExt(infokey);
+ Srv->Log(DEBUG, std::string(user->nick)+" is trying to join "+std::string(chan->name)+", checking for ban exceptions");
+
+ if(list)
+ {
+ for (modelist::iterator it = list->begin(); it != list->end(); it++)
+ if(Srv->MatchText(user->GetFullRealHost(), it->mask) || Srv->MatchText(user->GetFullHost(), it->mask))
+ // They match an entry on the list, so let them in.
+ return 1;
+ return 0;
+ }
+ // or if there wasn't a list, there can't be anyone on it, so we don't need to do anything.
+ }
+ return 0;
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version(1, 0, 0, 2, VF_STATIC);
+ }
+};
+
+class ModuleBanExceptionFactory : public ModuleFactory
+{
+ public:
+ ModuleBanExceptionFactory()
+ {
+ }
+
+ ~ModuleBanExceptionFactory()
+ {
+ }
+
+ virtual Module* CreateModule(Server* serv)
+ {
+ return new ModuleBanException(serv);
+ }
+
+};
+
+
+extern "C" void * init_module( void )
+{
+ return new ModuleBanExceptionFactory;
+}
diff --git a/src/modules/m_inviteexception.cpp b/src/modules/m_inviteexception.cpp
new file mode 100644
index 000000000..90abd79e9
--- /dev/null
+++ b/src/modules/m_inviteexception.cpp
@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <string>
+#include <vector>
+#include "users.h"
+#include "channels.h"
+#include "modules.h"
+#include "helperfuncs.h"
+#include "u_listmode.h"
+
+/* $ModDesc: Provides support for the +I channel mode */
+
+/* Written by Om<om@inspircd.org>, April 2005. */
+/* Based on m_exception, which was originally based on m_chanprotect and m_silence */
+
+// The +I channel mode takes a nick!ident@host, glob patterns allowed,
+// and if a user matches an entry on the +I list then they can join the channel, ignoring if +i is set on the channel
+
+class ModuleInviteException : public ListModeBaseModule
+{
+public:
+ ModuleInviteException(Server* serv) : ListModeBaseModule::ListModeBaseModule(serv, 'I', "End of Channel Invite Exception List", "346", "347")
+ {
+ }
+
+ virtual void Implements(char* List)
+ {
+ this->DoImplements(List);
+ List[I_On005Numeric] = List[I_OnCheckInvite] = 1;
+ }
+
+ virtual void On005Numeric(std::string &output)
+ {
+ output.append(" INVEX=999");
+ output.insert(output.find("CHANMODES=", 0)+10, "I");
+ }
+
+ virtual int OnCheckInvite(userrec* user, chanrec* chan)
+ {
+ if(chan != NULL)
+ {
+ modelist* list = (modelist*)chan->GetExt(infokey);
+ Srv->Log(DEBUG, std::string(user->nick)+" is trying to join "+std::string(chan->name)+", checking for invite exceptions");
+ if (list)
+ {
+ for (modelist::iterator it = list->begin(); it != list->end(); it++)
+ {
+ if(Srv->MatchText(user->GetFullRealHost(), it->mask) || Srv->MatchText(user->GetFullHost(), it->mask))
+ {
+ // They match an entry on the list, so let them in.
+ return 1;
+ }
+ }
+ }
+ // or if there wasn't a list, there can't be anyone on it, so we don't need to do anything.
+ }
+
+ return 0;
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version(1, 0, 0, 2, VF_STATIC);
+ }
+};
+
+
+class ModuleInviteExceptionFactory : public ModuleFactory
+{
+ public:
+ ModuleInviteExceptionFactory()
+ {
+ }
+
+ ~ModuleInviteExceptionFactory()
+ {
+ }
+
+ virtual Module * CreateModule(Server* serv)
+ {
+ return new ModuleInviteException(serv);
+ }
+
+};
+
+
+extern "C" void * init_module( void )
+{
+ return new ModuleInviteExceptionFactory;
+}