dovecot-2.2: doveadm: When connecting to doveadm socket without ...

dovecot at dovecot.org dovecot at dovecot.org
Sun Feb 24 19:37:51 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/b2bc9dd5f8d9
changeset: 15922:b2bc9dd5f8d9
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Feb 24 19:37:45 2013 +0200
description:
doveadm: When connecting to doveadm socket without :port, use doveadm_port setting.

diffstat:

 src/doveadm/doveadm-util.c      |  25 +++++++++++++++++++------
 src/doveadm/doveadm-util.h      |   2 ++
 src/doveadm/server-connection.c |   3 ++-
 3 files changed, 23 insertions(+), 7 deletions(-)

diffs (83 lines):

diff -r 75d76f1b884d -r b2bc9dd5f8d9 src/doveadm/doveadm-util.c
--- a/src/doveadm/doveadm-util.c	Sun Feb 24 19:35:39 2013 +0200
+++ b/src/doveadm/doveadm-util.c	Sun Feb 24 19:37:45 2013 +0200
@@ -97,15 +97,21 @@
 }
 
 static bool
-parse_hostport(const char *str, const char **host_r, unsigned int *port_r)
+parse_hostport(const char *str, unsigned int default_port,
+	       const char **host_r, unsigned int *port_r)
 {
 	const char *p;
 
 	/* host:port */
 	p = strrchr(str, ':');
-	if (p == NULL || str_to_uint(p+1, port_r) < 0)
-		return FALSE;
-	*host_r = t_strdup_until(str, p);
+	if (p == NULL && default_port != 0) {
+		*host_r = str;
+		*port_r = default_port;
+	} else {
+		if (p == NULL || str_to_uint(p+1, port_r) < 0)
+			return FALSE;
+		*host_r = t_strdup_until(str, p);
+	}
 
 	/* there is any '/' character (unlikely to be found from host names),
 	   assume ':' is part of a file path */
@@ -114,7 +120,8 @@
 	return TRUE;
 }
 
-int doveadm_connect(const char *path)
+int doveadm_connect_with_default_port(const char *path,
+				      unsigned int default_port)
 {
 	struct stat st;
 	const char *host;
@@ -122,7 +129,8 @@
 	unsigned int port, ips_count;
 	int fd, ret;
 
-	if (parse_hostport(path, &host, &port) && stat(path, &st) < 0) {
+	if (parse_hostport(path, default_port, &host, &port) &&
+	    stat(path, &st) < 0) {
 		/* it's a host:port, connect via TCP */
 		ret = net_gethostbyname(host, &ips, &ips_count);
 		if (ret != 0) {
@@ -141,3 +149,8 @@
 	}
 	return fd;
 }
+
+int doveadm_connect(const char *path)
+{
+	return doveadm_connect_with_default_port(path, 0);
+}
diff -r 75d76f1b884d -r b2bc9dd5f8d9 src/doveadm/doveadm-util.h
--- a/src/doveadm/doveadm-util.h	Sun Feb 24 19:35:39 2013 +0200
+++ b/src/doveadm/doveadm-util.h	Sun Feb 24 19:37:45 2013 +0200
@@ -8,6 +8,8 @@
 const char *unixdate2str(time_t timestamp);
 const char *doveadm_plugin_getenv(const char *name);
 int doveadm_connect(const char *path);
+int doveadm_connect_with_default_port(const char *path,
+				      unsigned int default_port);
 
 void doveadm_load_modules(void);
 void doveadm_unload_modules(void);
diff -r 75d76f1b884d -r b2bc9dd5f8d9 src/doveadm/server-connection.c
--- a/src/doveadm/server-connection.c	Sun Feb 24 19:35:39 2013 +0200
+++ b/src/doveadm/server-connection.c	Sun Feb 24 19:37:45 2013 +0200
@@ -317,7 +317,8 @@
 	conn = p_new(pool, struct server_connection, 1);
 	conn->pool = pool;
 	conn->server = server;
-	conn->fd = doveadm_connect(server->name);
+	conn->fd = doveadm_connect_with_default_port(server->name,
+						     doveadm_settings->doveadm_port);
 	net_set_nonblock(conn->fd, TRUE);
 	conn->io = io_add(conn->fd, IO_READ, server_connection_input, conn);
 	conn->input = i_stream_create_fd(conn->fd, MAX_INBUF_SIZE, FALSE);


More information about the dovecot-cvs mailing list