changeset 11883:ab85d17947db

director: Added director_doveadm_port for accepting doveadm TCP connections.
author Timo Sirainen <tss@iki.fi>
date Thu, 22 Jul 2010 16:07:06 +0100
parents ec35e240db6c
children 459bd9621197
files doc/example-config/conf.d/10-director.conf src/director/director-settings.c src/director/director-settings.h src/director/main.c
diffstat 4 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/doc/example-config/conf.d/10-director.conf	Thu Jul 22 13:48:14 2010 +0100
+++ b/doc/example-config/conf.d/10-director.conf	Thu Jul 22 16:07:06 2010 +0100
@@ -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 {
--- a/src/director/director-settings.c	Thu Jul 22 13:48:14 2010 +0100
+++ b/src/director/director-settings.c	Thu Jul 22 16:07:06 2010 +0100
@@ -68,6 +68,7 @@
 	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 @@
 
 	.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 = {
--- a/src/director/director-settings.h	Thu Jul 22 13:48:14 2010 +0100
+++ b/src/director/director-settings.h	Thu Jul 22 16:07:06 2010 +0100
@@ -8,6 +8,7 @@
 	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;
--- a/src/director/main.c	Thu Jul 22 13:48:14 2010 +0100
+++ b/src/director/main.c	Thu Jul 22 16:07:06 2010 +0100
@@ -59,9 +59,14 @@
 
 	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;
 	}