]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master, global: anvil_client_query() - Add type safety to callback's context
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 1 Feb 2022 15:39:57 +0000 (16:39 +0100)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 8 Feb 2022 09:48:24 +0000 (10:48 +0100)
src/auth/auth-penalty.c
src/director/director.c
src/doveadm/doveadm-kick.c
src/lib-master/anvil-client.c
src/lib-master/anvil-client.h
src/lmtp/lmtp-local.c
src/login-common/sasl-server.c

index 8a8b953003769c510ce2abd447a8f6969984b85d..77b49f3b7dcc90d12ddbc24c4da64fb8cff01db2 100644 (file)
@@ -61,9 +61,10 @@ unsigned int auth_penalty_to_secs(unsigned int penalty)
        return secs < AUTH_PENALTY_MAX_SECS ? secs : AUTH_PENALTY_MAX_SECS;
 }
 
-static void auth_penalty_anvil_callback(const char *reply, void *context)
+static void
+auth_penalty_anvil_callback(const char *reply,
+                           struct auth_penalty_request *request)
 {
-       struct auth_penalty_request *request = context;
        unsigned int penalty = 0;
        unsigned long last_penalty = 0;
        unsigned int secs, drop_penalty;
index 6bc303b696db407ab5ffba4b74df59e1253e7618..97b74e7155a40ed0012560534269832fef0d2d7c 100644 (file)
@@ -1006,9 +1006,10 @@ static void director_user_kill_fail_throttled(unsigned int new_events_count,
        i_error("Failed to kill %u users' connections", new_events_count);
 }
 
-static void director_kill_user_callback(const char *reply, void *context)
+static void
+director_kill_user_callback(const char *reply,
+                           struct director_kill_context *ctx)
 {
-       struct director_kill_context *ctx = context;
        struct user *user;
 
        /* don't try to abort the IPC command anymore */
@@ -1191,10 +1192,8 @@ void director_move_user(struct director *dir, struct director_host *src,
 }
 
 static void
-director_kick_user_callback(const char *reply ATTR_UNUSED, void *context)
+director_kick_user_callback(const char *reply ATTR_UNUSED, struct director *dir)
 {
-       struct director *dir = context;
-
        i_assert(dir->users_kicking_count > 0);
        dir->users_kicking_count--;
        if (dir->kick_callback != NULL)
index 4247bd00620c6d04c9e84925f338c3ea3d293f78..211d75523e61559407160c0b917b3e5e12fe6f98 100644 (file)
@@ -25,9 +25,9 @@ struct kick_context {
        unsigned int kicked_count;
 };
 
-static void kick_user_anvil_callback(const char *reply, void *context)
+static void
+kick_user_anvil_callback(const char *reply, struct kick_context *ctx)
 {
-       struct kick_context *ctx = context;
        unsigned int count;
 
        if (reply != NULL) {
index 08c0487afa9fc7b45a51656168ed28cb3c38959b..42d135ac0e7b601dc6342eeacc90955e253ec260 100644 (file)
@@ -329,6 +329,7 @@ static int anvil_client_send(struct anvil_client *client, const char *cmd)
        return 0;
 }
 
+#undef anvil_client_query
 struct anvil_query *
 anvil_client_query(struct anvil_client *client, const char *query,
                   unsigned int timeout_msecs,
index 33fd59d8d87345dc3666a182a82e1a696a4b8095..b2652f81607d2f317b7da881713de9c3e556fd94 100644 (file)
@@ -44,6 +44,11 @@ struct anvil_query *
 anvil_client_query(struct anvil_client *client, const char *query,
                   unsigned int timeout_msecs,
                   anvil_callback_t *callback, void *context);
+#define anvil_client_query(client, query, timeout_msecs, callback, context) \
+       anvil_client_query(client, query, timeout_msecs, \
+               (anvil_callback_t *)(callback), 1 ? (context) : \
+               CALLBACK_TYPECHECK(callback, \
+                       void (*)(const char *, typeof(context))))
 void anvil_client_query_abort(struct anvil_client *client,
                              struct anvil_query **query);
 /* Send a command to anvil, don't expect any replies. */
index 1e961a9344b9d55a6361e5cc0a7664a8208596ea..94d3f385b8fade122ce24f865024025d3960136c 100644 (file)
@@ -256,10 +256,8 @@ lmtp_local_rcpt_anvil_finish(struct lmtp_local_recipient *llrcpt)
 }
 
 static void
-lmtp_local_rcpt_anvil_cb(const char *reply, void *context)
+lmtp_local_rcpt_anvil_cb(const char *reply, struct lmtp_local_recipient *llrcpt)
 {
-       struct lmtp_local_recipient *llrcpt =
-               (struct lmtp_local_recipient *)context;
        struct client *client = llrcpt->rcpt->client;
        struct smtp_server_recipient *rcpt = llrcpt->rcpt->rcpt;
        const struct mail_storage_service_input *input;
index 3237574e98e727d36182800600bed0d0759b244f..61616440d77b888bfd1c61568bb88dd7acde7bb7 100644 (file)
@@ -215,9 +215,8 @@ static int master_send_request(struct anvil_request *anvil_request)
 }
 
 static void ATTR_NULL(1)
-anvil_lookup_callback(const char *reply, void *context)
+anvil_lookup_callback(const char *reply, struct anvil_request *req)
 {
-       struct anvil_request *req = context;
        struct client *client = req->client;
        const struct login_settings *set = client->set;
        const char *errmsg;