diff options
-rw-r--r-- | docs/conf/modules.conf.example | 5 | ||||
-rw-r--r-- | src/modules/m_sslrehashsignal.cpp | 64 |
2 files changed, 69 insertions, 0 deletions
diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index ea658867c..2941fafbe 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -1895,6 +1895,11 @@ #<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 # manually symlink the source for this module from the directory diff --git a/src/modules/m_sslrehashsignal.cpp b/src/modules/m_sslrehashsignal.cpp new file mode 100644 index 000000000..fea32326a --- /dev/null +++ b/src/modules/m_sslrehashsignal.cpp @@ -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) |