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