From: Timo Sirainen Date: Thu, 22 Jul 2010 15:07:06 +0000 (+0100) Subject: director: Added director_doveadm_port for accepting doveadm TCP connections. X-Git-Tag: 2.0.rc4~52 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=861f53be0cc2fa5665f3c107a7576e2a53bb2eb0;p=thirdparty%2Fdovecot%2Fcore.git director: Added director_doveadm_port for accepting doveadm TCP connections. --- diff --git a/doc/example-config/conf.d/10-director.conf b/doc/example-config/conf.d/10-director.conf index cd750a556a..d2d76647ef 100644 --- a/doc/example-config/conf.d/10-director.conf +++ b/doc/example-config/conf.d/10-director.conf @@ -21,6 +21,10 @@ # 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 { diff --git a/src/director/director-settings.c b/src/director/director-settings.c index d295ce05ec..fd8fca9453 100644 --- a/src/director/director-settings.c +++ b/src/director/director-settings.c @@ -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 = { diff --git a/src/director/director-settings.h b/src/director/director-settings.h index c46e7e81a7..94f659eff6 100644 --- a/src/director/director-settings.h +++ b/src/director/director-settings.h @@ -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; diff --git a/src/director/main.c b/src/director/main.c index aa43fed2a8..d293e92bc9 100644 --- a/src/director/main.c +++ b/src/director/main.c @@ -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; }