ircd: support restarting ssld processes
Add REHASH SSLD (admins only) that starts new sslds and marks the existing ones as inactive until all their clients disconnect. Very useful whenever the SSL library has a vulnerability because new connections can use a new version of the library without disconnecting existing clients/servers. Add STATS S (admins only) to list ssld processes, status, and client count.
This commit is contained in:
parent
dea27a087c
commit
eb1b303d56
6 changed files with 88 additions and 5 deletions
|
@ -49,6 +49,7 @@
|
|||
#include "reject.h"
|
||||
#include "whowas.h"
|
||||
#include "irc_radixtree.h"
|
||||
#include "sslproc.h"
|
||||
|
||||
static int m_stats (struct Client *, struct Client *, int, const char **);
|
||||
|
||||
|
@ -109,6 +110,7 @@ static void stats_operedup(struct Client *);
|
|||
static void stats_ports(struct Client *);
|
||||
static void stats_tresv(struct Client *);
|
||||
static void stats_resv(struct Client *);
|
||||
static void stats_ssld(struct Client *);
|
||||
static void stats_usage(struct Client *);
|
||||
static void stats_tstats(struct Client *);
|
||||
static void stats_uptime(struct Client *);
|
||||
|
@ -162,6 +164,8 @@ static struct StatsStruct stats_cmd_table[] = {
|
|||
{'Q', stats_resv, 1, 0, },
|
||||
{'r', stats_usage, 1, 0, },
|
||||
{'R', stats_usage, 1, 0, },
|
||||
{'s', stats_ssld, 1, 1, },
|
||||
{'S', stats_ssld, 1, 1, },
|
||||
{'t', stats_tstats, 1, 0, },
|
||||
{'T', stats_tstats, 1, 0, },
|
||||
{'u', stats_uptime, 0, 0, },
|
||||
|
@ -884,6 +888,24 @@ stats_resv(struct Client *source_p)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
stats_ssld_foreach(void *data, pid_t pid, int cli_count, enum ssld_status status)
|
||||
{
|
||||
struct Client *source_p = data;
|
||||
|
||||
sendto_one_numeric(source_p, RPL_STATSDEBUG,
|
||||
"S :%u %c %u",
|
||||
pid,
|
||||
status == SSLD_DEAD ? 'D' : (status == SSLD_SHUTDOWN ? 'S' : 'A'),
|
||||
cli_count);
|
||||
}
|
||||
|
||||
static void
|
||||
stats_ssld(struct Client *source_p)
|
||||
{
|
||||
ssld_foreach_info(stats_ssld_foreach, source_p);
|
||||
}
|
||||
|
||||
static void
|
||||
stats_usage (struct Client *source_p)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue