From: Timo Sirainen Date: Thu, 4 Jun 2009 16:44:37 +0000 (-0400) Subject: anvil: Fixed checking what the master connection is. X-Git-Tag: 2.0.alpha1~612 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c405d7235ba2e21a306eacc9fc0f15e66f9ee718;p=thirdparty%2Fdovecot%2Fcore.git anvil: Fixed checking what the master connection is. --HG-- branch : HEAD --- diff --git a/src/anvil/anvil-connection.c b/src/anvil/anvil-connection.c index 19535c21ca..79675334b3 100644 --- a/src/anvil/anvil-connection.c +++ b/src/anvil/anvil-connection.c @@ -27,6 +27,7 @@ struct anvil_connection { unsigned int version_received:1; unsigned int handshaked:1; + unsigned int master:1; }; struct anvil_connection *anvil_connections = NULL; @@ -73,7 +74,7 @@ anvil_connection_request(struct anvil_connection *conn, *error_r = "KILL: Not enough parameters"; return -1; } - if (conn->fd != MASTER_LISTEN_FD_FIRST) { + if (!conn->master) { *error_r = "KILL sent by a non-master connection"; return -1; } @@ -134,7 +135,7 @@ static void anvil_connection_input(void *context) } } -struct anvil_connection *anvil_connection_create(int fd) +struct anvil_connection *anvil_connection_create(int fd, bool master) { struct anvil_connection *conn; @@ -143,6 +144,7 @@ struct anvil_connection *anvil_connection_create(int fd) conn->input = i_stream_create_fd(fd, MAX_INBUF_SIZE, FALSE); conn->output = o_stream_create_fd(fd, (size_t)-1, FALSE); conn->io = io_add(fd, IO_READ, anvil_connection_input, conn); + conn->master = master; DLLIST_PREPEND(&anvil_connections, conn); return conn; } diff --git a/src/anvil/anvil-connection.h b/src/anvil/anvil-connection.h index 1658b5b035..453de264c5 100644 --- a/src/anvil/anvil-connection.h +++ b/src/anvil/anvil-connection.h @@ -1,7 +1,7 @@ #ifndef ANVIL_CONNECTION_H #define ANVIL_CONNECTION_H -struct anvil_connection *anvil_connection_create(int fd); +struct anvil_connection *anvil_connection_create(int fd, bool master); void anvil_connection_destroy(struct anvil_connection *conn); void anvil_connections_destroy_all(void); diff --git a/src/anvil/main.c b/src/anvil/main.c index 4089b37d6a..31b1b6a2ec 100644 --- a/src/anvil/main.c +++ b/src/anvil/main.c @@ -4,6 +4,7 @@ #include "array.h" #include "env-util.h" #include "master-service.h" +#include "master-interface.h" #include "connect-limit.h" #include "anvil-connection.h" @@ -14,7 +15,9 @@ struct connect_limit *connect_limit; static void client_connected(const struct master_service_connection *conn) { - anvil_connection_create(conn->fd); + bool master = conn->listen_fd == MASTER_LISTEN_FD_FIRST; + + anvil_connection_create(conn->fd, master); } int main(int argc, char *argv[])