From: Timo Sirainen Date: Mon, 21 Feb 2022 16:10:37 +0000 (+0100) Subject: anvil: Split off kick_user_iter_more() X-Git-Tag: 2.4.0~4346 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b37825980ce6fea5cf3db91fa8ec88a515dcf5a3;p=thirdparty%2Fdovecot%2Fcore.git anvil: Split off kick_user_iter_more() --- diff --git a/src/anvil/anvil-connection.c b/src/anvil/anvil-connection.c index 5c810f5d17..cb4cf6cb6e 100644 --- a/src/anvil/anvil-connection.c +++ b/src/anvil/anvil-connection.c @@ -244,22 +244,12 @@ kick_user_with_signal(struct anvil_cmd_kick_target *target, const char *cmd) } } -static void -kick_user_iter(struct anvil_connection *conn, struct connect_limit_iter *iter, - bool add_conn_guid) +static void kick_user_iter_more(struct anvil_cmd_kick *kick) { - struct anvil_cmd_kick *kick; struct connect_limit_iter_result result; string_t *cmd = t_str_new(128); - kick = i_new(struct anvil_cmd_kick, 1); - kick->conn = conn; - kick->iter = iter; - kick->add_conn_guid = add_conn_guid; - kick->prev_pid = (pid_t)-1; - conn->refcount++; - - while (connect_limit_iter_next(iter, &result)) { + while (connect_limit_iter_next(kick->iter, &result)) { switch (result.kick_type) { case KICK_TYPE_NONE: break; @@ -274,7 +264,7 @@ kick_user_iter(struct anvil_connection *conn, struct connect_limit_iter *iter, if (kill(result.pid, SIGTERM) == 0) kick->kick_count++; else if (errno != ESRCH) { - e_error(conn->conn.event, + e_error(kick->conn->conn.event, "kill(%ld) failed: %m", (long)result.pid); } @@ -315,11 +305,27 @@ kick_user_iter(struct anvil_connection *conn, struct connect_limit_iter *iter, } kick->prev_pid = result.pid; } - connect_limit_iter_deinit(&iter); + connect_limit_iter_deinit(&kick->iter); if (kick->cmd_refcount == 0) kick_user_finished(kick); } +static void +kick_user_iter(struct anvil_connection *conn, struct connect_limit_iter *iter, + bool add_conn_guid) +{ + struct anvil_cmd_kick *kick; + + kick = i_new(struct anvil_cmd_kick, 1); + kick->conn = conn; + kick->iter = iter; + kick->add_conn_guid = add_conn_guid; + kick->prev_pid = (pid_t)-1; + conn->refcount++; + + kick_user_iter_more(kick); +} + static void kick_user(struct anvil_connection *conn, const char *username, const guid_128_t conn_guid) {