From: Timo Sirainen Date: Sat, 20 Feb 2010 07:32:48 +0000 (+0200) Subject: anvil: Added PENALTY-DUMP command to dump penalty state. X-Git-Tag: 2.0.beta3~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8825740187b8aaca9c39c4fd6a0b79d480eb143f;p=thirdparty%2Fdovecot%2Fcore.git anvil: Added PENALTY-DUMP command to dump penalty state. --HG-- branch : HEAD --- diff --git a/src/anvil/anvil-connection.c b/src/anvil/anvil-connection.c index 915e005328..42d05a351e 100644 --- a/src/anvil/anvil-connection.c +++ b/src/anvil/anvil-connection.c @@ -119,6 +119,8 @@ anvil_connection_request(struct anvil_connection *conn, return -1; } penalty_set_expire_secs(penalty, atoi(args[0])); + } else if (strcmp(cmd, "PENALTY-DUMP") == 0) { + penalty_dump(penalty, conn->output); } else { *error_r = t_strconcat("Unknown command: ", cmd, NULL); return -1; diff --git a/src/anvil/penalty.c b/src/anvil/penalty.c index f258b00e88..3284f58148 100644 --- a/src/anvil/penalty.c +++ b/src/anvil/penalty.c @@ -3,7 +3,10 @@ #include "lib.h" #include "ioloop.h" #include "hash.h" +#include "str.h" +#include "strescape.h" #include "llist.h" +#include "ostream.h" #include "penalty.h" #include @@ -252,3 +255,20 @@ bool penalty_has_checksum(struct penalty *penalty, const char *ident, } return FALSE; } + +void penalty_dump(struct penalty *penalty, struct ostream *output) +{ + const struct penalty_rec *rec; + string_t *str = t_str_new(256); + + for (rec = penalty->oldest; rec != NULL; rec = rec->next) { + str_truncate(str, 0); + str_tabescape_write(str, rec->ident); + str_printfa(str, "\t%u\t%u\t%u\n", + rec->penalty, rec->last_penalty, + rec->last_penalty + rec->last_update); + if (o_stream_send(output, str_data(str), str_len(str)) < 0) + break; + } + (void)o_stream_send(output, "\n", 1); +} diff --git a/src/anvil/penalty.h b/src/anvil/penalty.h index b765907c72..23a182cde4 100644 --- a/src/anvil/penalty.h +++ b/src/anvil/penalty.h @@ -17,5 +17,6 @@ void penalty_inc(struct penalty *penalty, const char *ident, bool penalty_has_checksum(struct penalty *penalty, const char *ident, unsigned int checksum); +void penalty_dump(struct penalty *penalty, struct ostream *output); #endif