]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Added director_doveadm_port for accepting doveadm TCP connections.
authorTimo Sirainen <tss@iki.fi>
Thu, 22 Jul 2010 15:07:06 +0000 (16:07 +0100)
committerTimo Sirainen <tss@iki.fi>
Thu, 22 Jul 2010 15:07:06 +0000 (16:07 +0100)
doc/example-config/conf.d/10-director.conf
src/director/director-settings.c
src/director/director-settings.h
src/director/main.c

index cd750a556a33f8d187d7568670794c8f2c64e939..d2d76647ef5500dad69104bc1ead67a24c76beb3 100644 (file)
 # any connections.
 #director_user_expire = 15 min
 
+# TCP/IP port that accepts doveadm connections (instead of director connections)
+# If you enable this, you'll also need to add inet_listener for the port.
+#director_doveadm_port = 0
+
 # To enable director service, uncomment the modes and assign a port.
 service director {
   unix_listener login/director {
index d295ce05eceb857dad9b731d8916bb88532ddc2d..fd8fca94536a764e304346ca94eab5a8d6acca14 100644 (file)
@@ -68,6 +68,7 @@ static const struct setting_define director_setting_defines[] = {
        DEF(SET_STR, director_servers),
        DEF(SET_STR, director_mail_servers),
        DEF(SET_TIME, director_user_expire),
+       DEF(SET_UINT, director_doveadm_port),
 
        SETTING_DEFINE_LIST_END
 };
@@ -78,7 +79,8 @@ const struct director_settings director_default_settings = {
 
        .director_servers = "",
        .director_mail_servers = "",
-       .director_user_expire = 60*15
+       .director_user_expire = 60*15,
+       .director_doveadm_port = 0
 };
 
 const struct setting_parser_info director_setting_parser_info = {
index c46e7e81a72bde3c2f3a58786622a099b6746b09..94f659eff6dcbcb2f556c40c3caf13553d1b6602 100644 (file)
@@ -8,6 +8,7 @@ struct director_settings {
        const char *director_servers;
        const char *director_mail_servers;
        unsigned int director_user_expire;
+       unsigned int director_doveadm_port;
 };
 
 extern const struct setting_parser_info director_setting_parser_info;
index aa43fed2a8aaa99a2c948a052ff5e2d836656f1c..d293e92bc934ccecaaa312b403db7b5f998c00a7 100644 (file)
@@ -59,9 +59,14 @@ static void client_connected(struct master_service_connection *conn)
 
        if (net_getpeername(conn->fd, &ip, &port) == 0 &&
            (IPADDR_IS_V4(&ip) || IPADDR_IS_V6(&ip))) {
-               /* TCP/IP connection - this is another director */
-               if (director_client_connected(conn->fd, &ip) == 0)
+               /* TCP/IP connection */
+               if (port == director->set->director_doveadm_port) {
                        master_service_client_connection_accept(conn);
+                       (void)doveadm_connection_init(director, conn->fd);
+               } else {
+                       if (director_client_connected(conn->fd, &ip) == 0)
+                               master_service_client_connection_accept(conn);
+               }
                return;
        }