From 62fee4b415f9c4e738f7fd5dea441dabe1244d2d Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 23 Nov 2015 09:29:59 +0000 Subject: Add 'reresolve' command to the control interface --- src/libserver/rspamd_control.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'src/libserver/rspamd_control.c') diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c index 5443b81a3..9e17f2120 100644 --- a/src/libserver/rspamd_control.c +++ b/src/libserver/rspamd_control.c @@ -69,17 +69,24 @@ static const struct rspamd_control_cmd_match { { .name = { .begin = "/stat", - .len = 5 + .len = sizeof ("/stat") - 1 }, .type = RSPAMD_CONTROL_STAT }, { .name = { .begin = "/reload", - .len = 7 + .len = sizeof ("/reload") - 1 }, .type = RSPAMD_CONTROL_RELOAD }, + { + .name = { + .begin = "/reresolve", + .len = sizeof ("/reresolve") - 1 + }, + .type = RSPAMD_CONTROL_RERESOLVE + }, }; void @@ -190,6 +197,10 @@ rspamd_control_write_reply (struct rspamd_control_session *session) ucl_object_insert_key (cur, ucl_object_fromint ( elt->reply.reply.reload.status), "status", 0, false); break; + case RSPAMD_CONTROL_RERESOLVE: + ucl_object_insert_key (cur, ucl_object_fromint ( + elt->reply.reply.reresolve.status), "status", 0, false); + break; default: break; } @@ -358,6 +369,7 @@ rspamd_control_default_cmd_handler (gint fd, struct rspamd_control_reply rep; gssize r; struct rusage rusg; + struct rspamd_config *cfg; memset (&rep, 0, sizeof (rep)); rep.type = cmd->type; @@ -379,6 +391,23 @@ rspamd_control_default_cmd_handler (gint fd, break; case RSPAMD_CONTROL_RELOAD: break; + case RSPAMD_CONTROL_RERESOLVE: + if (cd->worker->srv->cfg) { + REF_RETAIN (cd->worker->srv->cfg); + cfg = cd->worker->srv->cfg; + + if (cfg->ups_ctx) { + msg_info_config ("reresolving upstreams"); + rspamd_upstream_reresolve (cfg->ups_ctx); + } + + rep.reply.reresolve.status = 0; + REF_RELEASE (cfg); + } + else { + rep.reply.reresolve.status = EINVAL; + } + break; default: break; } -- cgit v1.2.3