From 373c4faf5643db3fa14e85c973bc96ee1fe49c0d Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Fri, 2 Apr 2021 00:17:34 +1000 Subject: [PATCH] * tune csocket replies --- src/daemon.c | 22 +++++++++++++++++----- src/jail.c | 20 ++++++++++++-------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/daemon.c b/src/daemon.c index b2dd3f2..f684dd4 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -136,24 +136,35 @@ f2b_csocket_cmd_process(const f2b_cmd_t *cmd, f2b_buf_t *res) { len = snprintf(buf, sizeof(buf), "- %s\n", jail->name); f2b_buf_append(res, buf, len); } + return; } else if (cmd->type == CMD_JAIL_STATUS) { f2b_jail_cmd_status(buf, sizeof(buf), jail); f2b_buf_append(res, buf, 0); + return; } else if (cmd->type == CMD_JAIL_SET) { f2b_jail_cmd_set(buf, sizeof(buf), jail, cmd->args[3], cmd->args[4]); f2b_buf_append(res, buf, 0); + return; } else if (cmd->type == CMD_JAIL_IP_STATUS) { f2b_jail_cmd_ip_xxx(buf, sizeof(buf), jail, 0, cmd->args[4]); f2b_buf_append(res, buf, 0); + return; } else if (cmd->type == CMD_JAIL_IP_BAN) { f2b_jail_cmd_ip_xxx(buf, sizeof(buf), jail, 1, cmd->args[4]); f2b_buf_append(res, buf, 0); + return; } else if (cmd->type == CMD_JAIL_IP_RELEASE) { f2b_jail_cmd_ip_xxx(buf, sizeof(buf), jail, -1, cmd->args[4]); f2b_buf_append(res, buf, 0); + return; } else if (cmd->type == CMD_JAIL_SOURCE_STATS) { - f2b_source_cmd_stats(buf, sizeof(buf), jail->source); - f2b_buf_append(res, buf, 0); + if (jail->flags & JAIL_HAS_SOURCE) { + f2b_source_cmd_stats(buf, sizeof(buf), jail->source); + f2b_buf_append(res, buf, 0); + } else { + f2b_buf_append(res, "-this jail has no source\n", 0); + } + return; } else if (cmd->type == CMD_JAIL_FILTER_STATS) { if (jail->flags & JAIL_HAS_FILTER) { f2b_filter_cmd_stats(buf, sizeof(buf), jail->filter); @@ -161,6 +172,7 @@ f2b_csocket_cmd_process(const f2b_cmd_t *cmd, f2b_buf_t *res) { } else { f2b_buf_append(res, "-this jail has no filter\n", 0); } + return; } else if (cmd->type == CMD_JAIL_FILTER_RELOAD) { if (jail->flags & JAIL_HAS_FILTER) { f2b_filter_cmd_reload(buf, sizeof(buf), jail->filter); @@ -168,13 +180,13 @@ f2b_csocket_cmd_process(const f2b_cmd_t *cmd, f2b_buf_t *res) { } else { f2b_buf_append(res, "-this jail has no filter\n", 0); } + return; } else { f2b_buf_append(res, "-error: unknown command\n", 0); + return; } - if (res->used == 0) - f2b_buf_append(res, "+ok\n", 0); /* default reply if not set above */ - + f2b_buf_append(res, "+ok\n", 0); /* default reply */ return; } #endif /* WITH_CSOCKET */ diff --git a/src/jail.c b/src/jail.c index 670ab63..b563c9b 100644 --- a/src/jail.c +++ b/src/jail.c @@ -612,9 +612,11 @@ f2b_jail_cmd_set(char *res, size_t ressize, f2b_jail_t *jail, const char *param, assert(param != NULL); assert(value != NULL); - if (f2b_jail_set_param(jail, param, value)) + if (f2b_jail_set_param(jail, param, value)) { + strlcpy(res, "+ok\n", ressize); return; - snprintf(res, ressize, "-parameter not found: %s", param); + } + snprintf(res, ressize, "-parameter not found: %s\n", param); } /** @@ -629,6 +631,7 @@ void f2b_jail_cmd_ip_xxx(char *res, size_t ressize, f2b_jail_t *jail, int op, const char *ip) { f2b_match_t *match = NULL; f2b_ipaddr_t *addr = NULL; + bool ret = false; assert(res != NULL); assert(jail != NULL); @@ -640,7 +643,7 @@ f2b_jail_cmd_ip_xxx(char *res, size_t ressize, f2b_jail_t *jail, int op, const c /* ban */ time_t now = time(NULL); if ((addr = f2b_ipaddr_create(ip)) == NULL) { - snprintf(res, ressize, "-can't parse ip address: %s", ip); + snprintf(res, ressize, "-can't parse ip address: %s\n", ip); return; } addr->lastseen = now; @@ -658,11 +661,12 @@ f2b_jail_cmd_ip_xxx(char *res, size_t ressize, f2b_jail_t *jail, int op, const c } } - if (op > 0) { - f2b_jail_ban(jail, addr); - } else if (op < 0) { - f2b_jail_unban(jail, addr); - } else { + if (op == 0) { f2b_ipaddr_status(addr, res, ressize); + return; } + if (op > 0) { ret = f2b_jail_ban (jail, addr); } + if (op < 0) { ret = f2b_jail_unban(jail, addr); } + strlcpy(res, ret ? "+ok\n" : "-error\n", ressize); + return; }