]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add a module which rehashes SSL modules on receiving SIGUSR1.
authorPeter Powell <petpow@saberuk.com>
Thu, 25 Jan 2018 11:51:14 +0000 (11:51 +0000)
committerPeter Powell <petpow@saberuk.com>
Thu, 25 Jan 2018 11:51:14 +0000 (11:51 +0000)
This has been imported from inspircd-extras where it was known as
m_rehashsslsignal. The name has been changed slightly to match the
other modules which do SSL stuff (sslmodes, sslinfo).

docs/conf/modules.conf.example
src/modules/m_sslrehashsignal.cpp [new file with mode: 0644]

index ea658867ccfbcab894f6a633f0a8c1575ca99eae..2941fafbe7a4ae17d98a732ca3424eb5c8551926 100644 (file)
 # with 2.0 servers. You can enable it by uncommenting this:
 #<sslmodes enableumode="yes">
 
+#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
+# SSL rehash signal module: Allows the SSL modules to be rehashed by
+# sending SIGUSR1 to a running InspIRCd process.
+#<module name="sslrehashsignal">
+
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # GnuTLS SSL module: Adds support for SSL connections using GnuTLS,
 # if enabled. You must answer 'yes' in ./configure when asked or
diff --git a/src/modules/m_sslrehashsignal.cpp b/src/modules/m_sslrehashsignal.cpp
new file mode 100644 (file)
index 0000000..fea3232
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ *   Copyright (C) 2018 Peter Powell <petpow@saberuk.com>
+ *   Copyright (C) 2016 Attila Molnar <attilamolnar@hush.com>
+ *
+ * This file is part of InspIRCd.  InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "inspircd.h"
+
+static volatile sig_atomic_t signaled;
+
+class ModuleSSLRehashSignal : public Module
+{
+ private:
+       static void SignalHandler(int)
+       {
+               signaled = 1;
+       }
+
+ public:
+       ~ModuleSSLRehashSignal()
+       {
+               signal(SIGUSR1, SIG_DFL);
+       }
+
+       void init()
+       {
+               signal(SIGUSR1, SignalHandler);
+       }
+
+       void OnBackgroundTimer(time_t)
+       {
+               if (!signaled)
+                       return;
+
+               const std::string feedbackmsg = "Got SIGUSR1, reloading SSL credentials";
+               ServerInstance->SNO->WriteGlobalSno('a', feedbackmsg);
+               ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, feedbackmsg);
+
+               const std::string str = "ssl";
+               FOREACH_MOD(OnModuleRehash, (NULL, str));
+               signaled = 0;
+       }
+
+       Version GetVersion()
+       {
+               return Version("Reloads SSL credentials on SIGUSR1", VF_VENDOR);
+       }
+};
+
+MODULE_INIT(ModuleSSLRehashSignal)