time_t stamp;
pid_t pid;
+ if (conn->conn_type == ANVIL_CONNECTION_TYPE_AUTH_PENALTY &&
+ !str_begins_with(cmd, "PENALTY-")) {
+ *error_r = "Only PENALTY-* commands allowed";
+ return -1;
+ }
+
anvil_global_cmd_counter++;
anvil_refresh_proctitle_delayed();
enum anvil_connection_type {
ANVIL_CONNECTION_TYPE_DEFAULT,
ANVIL_CONNECTION_TYPE_MASTER,
+ ANVIL_CONNECTION_TYPE_AUTH_PENALTY,
};
/* Error is set and reply=NULL on internal errors. */
{ "unix_listener/anvil/group", "$SET:default_internal_group" },
{ "unix_listener/anvil-auth-penalty/path", "anvil-auth-penalty" },
+ { "unix_listener/anvil-auth-penalty/type", "penalty" },
#ifdef DOVECOT_PRO_EDITION
/* Should use OX Abuse Shield instead */
{ "unix_listener/anvil-auth-penalty/mode", "0" },
if (conn->listen_fd == MASTER_LISTEN_FD_FIRST)
type = ANVIL_CONNECTION_TYPE_MASTER;
- else
- type = ANVIL_CONNECTION_TYPE_DEFAULT;
+ else {
+ const char *type_str = master_service_connection_get_type(conn);
+
+ if (strcmp(type_str, "penalty") == 0)
+ type = ANVIL_CONNECTION_TYPE_AUTH_PENALTY;
+ else
+ type = ANVIL_CONNECTION_TYPE_DEFAULT;
+ }
master_service_client_connection_accept(conn);
anvil_connection_create(conn->fd, type, conn->fifo);