]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Use unix streams with connection when using unix socket
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 31 May 2017 11:39:55 +0000 (14:39 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 12 Jun 2017 10:59:02 +0000 (13:59 +0300)
This makes it easier to send file descriptors over connection

src/lib/connection.c
src/lib/connection.h

index c8a9f433d9ebed2461b148fab96e8820777bb484..6ae929de632d4a6a734dace3a1446d2ccaa9f5d7 100644 (file)
@@ -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++;
index e76860039230836b3d39e3371fdf5a265c8b2d13..b366ee8125b7cf18437bb38b0398d8e2e4cc3b98 100644 (file)
@@ -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 {