]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-auth-client: auth-master - Move request-related code to new auth-master-request.c
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 5 Jan 2019 10:22:44 +0000 (11:22 +0100)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 27 Aug 2025 11:34:57 +0000 (13:34 +0200)
src/lib-auth-client/Makefile.am
src/lib-auth-client/auth-master-private.h
src/lib-auth-client/auth-master-request.c [new file with mode: 0644]
src/lib-auth-client/auth-master.c

index 035f8b6fcb453942517cbe8a34a21e98389ef164..acd2e54dc31261335897d9fd61b1ea24a8d750f8 100644 (file)
@@ -12,6 +12,7 @@ libauth_client_la_SOURCES = \
        auth-client-request.c \
        auth-client-connection.c \
        auth-master.c \
+       auth-master-request.c \
        auth-proxy.c
 
 headers = \
index cf5ab58ff86f5163c2ac95cb0896c4570ceabe72..2328059d62085eeec2c00608df20fe70d2d49120 100644 (file)
@@ -36,4 +36,24 @@ struct auth_master_connection {
        bool aborted:1;
 };
 
+/*
+ * Request
+ */
+
+void auth_request_lookup_abort(struct auth_master_connection *conn);
+
+int auth_master_run_cmd_pre(struct auth_master_connection *conn,
+                           const char *cmd);
+int auth_master_run_cmd_post(struct auth_master_connection *conn);
+int auth_master_run_cmd(struct auth_master_connection *conn, const char *cmd);
+
+unsigned int auth_master_next_request_id(struct auth_master_connection *conn);
+
+/*
+ * Connection
+ */
+
+void auth_master_set_io(struct auth_master_connection *conn);
+void auth_master_unset_io(struct auth_master_connection *conn);
+
 #endif
diff --git a/src/lib-auth-client/auth-master-request.c b/src/lib-auth-client/auth-master-request.c
new file mode 100644 (file)
index 0000000..6e13dad
--- /dev/null
@@ -0,0 +1,91 @@
+/* Copyright (c) 2005-2018 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "ioloop.h"
+#include "ostream.h"
+#include "master-service.h"
+
+#include "auth-master-private.h"
+
+void auth_request_lookup_abort(struct auth_master_connection *conn)
+{
+       io_loop_stop(conn->ioloop);
+       conn->aborted = TRUE;
+}
+
+int auth_master_run_cmd_pre(struct auth_master_connection *conn,
+                           const char *cmd)
+{
+       auth_master_set_io(conn);
+
+       if (!conn->connected) {
+               if (auth_master_connect(conn) < 0) {
+                       auth_master_unset_io(conn);
+                       return -1;
+               }
+               i_assert(conn->connected);
+               connection_input_resume(&conn->conn);
+       }
+
+       o_stream_cork(conn->conn.output);
+       if (!conn->sent_handshake) {
+               const struct connection_settings *set = &conn->conn.list->set;
+
+               o_stream_nsend_str(conn->conn.output,
+                       t_strdup_printf("VERSION\t%u\t%u\n",
+                                       set->major_version,
+                                       set->minor_version));
+               conn->sent_handshake = TRUE;
+       }
+
+       o_stream_nsend_str(conn->conn.output, cmd);
+       o_stream_uncork(conn->conn.output);
+
+       if (o_stream_flush(conn->conn.output) < 0) {
+               e_error(conn->event, "write(auth socket) failed: %s",
+                       o_stream_get_error(conn->conn.output));
+               auth_master_unset_io(conn);
+               auth_master_disconnect(conn);
+               return -1;
+       }
+       return 0;
+}
+
+int auth_master_run_cmd_post(struct auth_master_connection *conn)
+{
+       auth_master_unset_io(conn);
+       if (conn->aborted) {
+               conn->aborted = FALSE;
+               auth_master_disconnect(conn);
+               return -1;
+       }
+       return 0;
+}
+
+static void auth_master_stop(struct auth_master_connection *conn)
+{
+       if (master_service_is_killed(master_service)) {
+               auth_request_lookup_abort(conn);
+               io_loop_stop(conn->ioloop);
+       }
+}
+
+int auth_master_run_cmd(struct auth_master_connection *conn, const char *cmd)
+{
+       if (auth_master_run_cmd_pre(conn, cmd) < 0)
+               return -1;
+       /* add stop handler */
+       struct timeout *to = timeout_add_short(100, auth_master_stop, conn);
+       io_loop_run(conn->ioloop);
+       timeout_remove(&to);
+       return auth_master_run_cmd_post(conn);
+}
+
+unsigned int auth_master_next_request_id(struct auth_master_connection *conn)
+{
+       if (++conn->request_counter == 0) {
+               /* avoid zero */
+               conn->request_counter++;
+       }
+       return conn->request_counter;
+}
index 899ff806d42b2764971e7228c11255e69479bb0d..effc6259cc13906ee16b24141234adfcb97ca3a1 100644 (file)
@@ -10,7 +10,6 @@
 #include "ostream.h"
 #include "str.h"
 #include "strescape.h"
-#include "master-service.h"
 
 #include "auth-master-private.h"
 
@@ -21,7 +20,6 @@ static int
 auth_master_handshake_line(struct connection *_conn, const char *line);
 static int auth_master_input_line(struct connection *_conn, const char *line);
 static void auth_master_destroy(struct connection *_conn);
-static void auth_request_lookup_abort(struct auth_master_connection *conn);
 
 static const struct connection_vfuncs auth_master_vfuncs = {
        .destroy = auth_master_destroy,
@@ -270,7 +268,7 @@ int auth_master_connect(struct auth_master_connection *conn)
        return 0;
 }
 
-static void auth_master_set_io(struct auth_master_connection *conn)
+void auth_master_set_io(struct auth_master_connection *conn)
 {
        if (conn->ioloop != NULL)
                return;
@@ -287,7 +285,7 @@ static void auth_master_set_io(struct auth_master_connection *conn)
                                  auth_request_timeout, conn);
 }
 
-static void auth_master_unset_io(struct auth_master_connection *conn)
+void auth_master_unset_io(struct auth_master_connection *conn)
 {
        if (conn->prev_ioloop != NULL) {
                io_loop_set_current(conn->prev_ioloop);
@@ -311,91 +309,6 @@ static void auth_master_unset_io(struct auth_master_connection *conn)
        }
 }
 
-static void auth_request_lookup_abort(struct auth_master_connection *conn)
-{
-       io_loop_stop(conn->ioloop);
-       conn->aborted = TRUE;
-}
-
-static int auth_master_run_cmd_pre(struct auth_master_connection *conn,
-                                  const char *cmd)
-{
-       auth_master_set_io(conn);
-
-       if (!conn->connected) {
-               if (auth_master_connect(conn) < 0) {
-                       auth_master_unset_io(conn);
-                       return -1;
-               }
-               i_assert(conn->connected);
-               connection_input_resume(&conn->conn);
-       }
-
-       o_stream_cork(conn->conn.output);
-       if (!conn->sent_handshake) {
-               const struct connection_settings *set = &conn->conn.list->set;
-
-               o_stream_nsend_str(conn->conn.output,
-                       t_strdup_printf("VERSION\t%u\t%u\n",
-                                       set->major_version,
-                                       set->minor_version));
-               conn->sent_handshake = TRUE;
-       }
-
-       o_stream_nsend_str(conn->conn.output, cmd);
-       o_stream_uncork(conn->conn.output);
-
-       if (o_stream_flush(conn->conn.output) < 0) {
-               e_error(conn->event, "write(auth socket) failed: %s",
-                       o_stream_get_error(conn->conn.output));
-               auth_master_unset_io(conn);
-               auth_master_disconnect(conn);
-               return -1;
-       }
-       return 0;
-}
-
-static int auth_master_run_cmd_post(struct auth_master_connection *conn)
-{
-       auth_master_unset_io(conn);
-       if (conn->aborted) {
-               conn->aborted = FALSE;
-               auth_master_disconnect(conn);
-               return -1;
-       }
-       return 0;
-}
-
-static void auth_master_stop(struct auth_master_connection *conn)
-{
-       if (master_service_is_killed(master_service)) {
-               auth_request_lookup_abort(conn);
-               io_loop_stop(conn->ioloop);
-       }
-}
-
-static int auth_master_run_cmd(struct auth_master_connection *conn,
-                              const char *cmd)
-{
-       if (auth_master_run_cmd_pre(conn, cmd) < 0)
-               return -1;
-       /* add stop handler */
-       struct timeout *to = timeout_add_short(100, auth_master_stop, conn);
-       io_loop_run(conn->ioloop);
-       timeout_remove(&to);
-       return auth_master_run_cmd_post(conn);
-}
-
-static unsigned int
-auth_master_next_request_id(struct auth_master_connection *conn)
-{
-       if (++conn->request_counter == 0) {
-               /* avoid zero */
-               conn->request_counter++;
-       }
-       return conn->request_counter;
-}
-
 struct auth_master_lookup_ctx {
        struct auth_master_connection *conn;
        const char *user;