]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-auth-client: auth-master - Consolidate reply_callback arguments into a reply...
authorStephan Bosch <stephan.bosch@dovecot.fi>
Mon, 2 Oct 2017 13:48:09 +0000 (15:48 +0200)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 27 Aug 2025 11:35:32 +0000 (13:35 +0200)
src/lib-auth-client/auth-master-private.h
src/lib-auth-client/auth-master.c
src/lib-auth-client/auth-master.h

index 0550547e1906ec6ca26452f7558f937da1cb0dae..5ad539810ff056a55baf18b7fbb1df493d36060f 100644 (file)
@@ -27,10 +27,7 @@ struct auth_master_connection {
 
        unsigned int id_counter;
 
-       /* Returns 1 upon full completion, 0 upon successful partial
-          completion (will be called again) and -1 upon error. */
-       int (*reply_callback)(const char *cmd, const char *const *args,
-                             void *context);
+       auth_master_request_callback_t *reply_callback;
        void *reply_context;
 
        unsigned int timeout_msecs;
index 47b5ebfdc95909239970ce33c75ab8c429a801d6..6c6a8d30f6fb02dd5c5a4cb01fa21ea1775e5d0a 100644 (file)
@@ -229,9 +229,11 @@ auth_master_handle_input(struct auth_master_connection *conn,
        e_debug(conn->conn.event, "auth input: %s",
                t_strarray_join(args, "\t"));
 
-       /* Returns 1 upon full completion, 0 upon successful partial
-          completion (will be called again) and -1 upon error. */
-       return conn->reply_callback(args[0], args + 2, conn->reply_context);
+       struct auth_master_reply mreply = {
+               .reply = args[0],
+               .args = args + 2,
+       };
+       return conn->reply_callback(&mreply, conn->reply_context);
 }
 
 static int
@@ -552,16 +554,16 @@ parse_reply(struct auth_master_lookup *lookup, const char *reply,
 }
 
 static int
-auth_lookup_reply_callback(const char *cmd, const char *const *args,
-                          void *context)
+auth_lookup_reply_callback(const struct auth_master_reply *reply, void *context)
 {
        struct auth_master_lookup *lookup = context;
        const char *value;
+       const char *const *args = reply->args;
        unsigned int i, len;
 
        io_loop_stop(lookup->conn->ioloop);
 
-       lookup->return_value = parse_reply(lookup, cmd, args);
+       lookup->return_value = parse_reply(lookup, reply->reply, args);
 
        len = str_array_length(args);
        i_assert(*args != NULL || len == 0); /* for static analyzer */
@@ -792,16 +794,17 @@ struct auth_master_user_list_ctx {
 };
 
 static int
-auth_user_list_reply_callback(const char *cmd, const char *const *args,
+auth_user_list_reply_callback(const struct auth_master_reply *reply,
                              void *context)
 {
        struct auth_master_user_list_ctx *ctx = context;
        struct auth_master_connection *conn = ctx->conn;
+       const char *const *args = reply->args;
 
        timeout_reset(ctx->conn->to);
        io_loop_stop(ctx->conn->ioloop);
 
-       if (strcmp(cmd, "DONE") == 0) {
+       if (strcmp(reply->reply, "DONE") == 0) {
                if (args[0] != NULL && strcmp(args[0], "fail") == 0) {
                        e_error(conn->event, "User listing returned failure");
                        ctx->failed = TRUE;
@@ -809,7 +812,7 @@ auth_user_list_reply_callback(const char *cmd, const char *const *args,
                ctx->finished = TRUE;
                return 1;
        }
-       if (strcmp(cmd, "LIST") != 0 || args[0] == NULL) {
+       if (strcmp(reply->reply, "LIST") != 0 || args[0] == NULL) {
                e_error(conn->event, "User listing returned invalid input");
                ctx->failed = TRUE;
                return -1;
@@ -955,12 +958,13 @@ struct auth_master_cache_ctx {
 };
 
 static int
-auth_cache_flush_reply_callback(const char *cmd, const char *const *args,
+auth_cache_flush_reply_callback(const struct auth_master_reply *reply,
                                void *context)
 {
        struct auth_master_cache_ctx *ctx = context;
+       const char *const *args = reply->args;
 
-       if (strcmp(cmd, "OK") != 0)
+       if (strcmp(reply->reply, "OK") != 0)
                ctx->failed = TRUE;
        else if (args[0] == NULL || str_to_uint(args[0], &ctx->count) < 0)
                ctx->failed = TRUE;
index 9aaee83926bb830999b02e8be3999e2303b5cb2c..d9b75a170da191fb790e099519728fb756a5aebf 100644 (file)
@@ -12,6 +12,21 @@ enum auth_master_flags {
        AUTH_MASTER_FLAG_NO_INNER_IOLOOP        = 0x04,
 };
 
+/*
+ * Request
+ */
+
+struct auth_master_reply {
+       const char *reply;
+       const char *const *args;
+};
+
+/* Returns 1 upon full completion, 0 upon successful partial completion (will
+   be called again) and -1 upon error. */
+typedef int
+auth_master_request_callback_t(const struct auth_master_reply *reply,
+                              void *context);
+
 /*
  * Connection
  */