From: Aki Tuomi Date: Wed, 31 May 2017 11:39:55 +0000 (+0300) Subject: lib: Use unix streams with connection when using unix socket X-Git-Tag: 2.2.31.rc1~112 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ee339bbbd43f174c0c831fbc2e60def177d0e558;p=thirdparty%2Fdovecot%2Fcore.git lib: Use unix streams with connection when using unix socket This makes it easier to send file descriptors over connection --- diff --git a/src/lib/connection.c b/src/lib/connection.c index c8a9f433d9..6ae929de63 100644 --- a/src/lib/connection.c +++ b/src/lib/connection.c @@ -3,7 +3,9 @@ #include "lib.h" #include "ioloop.h" #include "istream.h" +#include "istream-unix.h" #include "ostream.h" +#include "ostream-unix.h" #include "iostream.h" #include "net.h" #include "strescape.h" @@ -130,16 +132,24 @@ static void connection_init_streams(struct connection *conn) conn->version_received = set->major_version == 0; if (set->input_max_size != 0) { - conn->input = i_stream_create_fd(conn->fd_in, - set->input_max_size, FALSE); + if (conn->unix_socket) + conn->input = i_stream_create_unix(conn->fd_in, + set->input_max_size); + else + conn->input = i_stream_create_fd(conn->fd_in, + set->input_max_size, FALSE); i_stream_set_name(conn->input, conn->name); conn->io = io_add_istream(conn->input, *conn->list->v.input, conn); } else { conn->io = io_add(conn->fd_in, IO_READ, *conn->list->v.input, conn); } if (set->output_max_size != 0) { - conn->output = o_stream_create_fd(conn->fd_out, - set->output_max_size, FALSE); + if (conn->unix_socket) + conn->output = o_stream_create_unix(conn->fd_out, + set->output_max_size); + else + conn->output = o_stream_create_fd(conn->fd_out, + set->output_max_size, FALSE); o_stream_set_no_error_handling(conn->output, TRUE); o_stream_set_name(conn->output, conn->name); } @@ -212,6 +222,7 @@ void connection_init_client_unix(struct connection_list *list, conn->fd_in = conn->fd_out = -1; conn->list = list; conn->name = i_strdup(path); + conn->unix_socket = TRUE; DLLIST_PREPEND(&list->connections, conn); list->connections_count++; diff --git a/src/lib/connection.h b/src/lib/connection.h index e768600392..b366ee8125 100644 --- a/src/lib/connection.h +++ b/src/lib/connection.h @@ -99,6 +99,7 @@ struct connection { enum connection_disconnect_reason disconnect_reason; unsigned int version_received:1; + unsigned int unix_socket:1; }; struct connection_list {