]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
anvil: Fixed checking what the master connection is.
authorTimo Sirainen <tss@iki.fi>
Thu, 4 Jun 2009 16:44:37 +0000 (12:44 -0400)
committerTimo Sirainen <tss@iki.fi>
Thu, 4 Jun 2009 16:44:37 +0000 (12:44 -0400)
--HG--
branch : HEAD

src/anvil/anvil-connection.c
src/anvil/anvil-connection.h
src/anvil/main.c

index 19535c21caededd746bf43f11a07aeed8ab18230..79675334b32114ec63a70190596705f7e3f22bd0 100644 (file)
@@ -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;
 }
index 1658b5b0353b6cacafcbc5747c025f68be1158db..453de264c53fd866e3673ad4ece5b91f19ee43d7 100644 (file)
@@ -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);
index 4089b37d6ae1e63371cac2a04b4be95cef09286a..31b1b6a2ec5f1174ba3de3bb5f178d43b938b574 100644 (file)
@@ -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[])