]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dict: Implement DICT_PROTOCOL_CMD_HIDE_LOG_VALUES for dict and dict-proxy
authorMarkus Valentin <markus.valentin@open-xchange.com>
Thu, 1 Dec 2022 10:13:16 +0000 (11:13 +0100)
committerMarkus Valentin <markus.valentin@open-xchange.com>
Mon, 12 Dec 2022 13:26:19 +0000 (14:26 +0100)
src/dict/dict-commands.c
src/lib-dict/dict-client.c
src/lib-dict/dict-client.h

index df31ac38937ac1741ab535b143ed247fd420f5ad..da6accedc3501910412c11eeffcb785a20435245 100644 (file)
@@ -656,6 +656,34 @@ static int cmd_timestamp(struct dict_connection_cmd *cmd, const char *const *arg
        return 0;
 }
 
+static int
+cmd_hide_log_values(struct dict_connection_cmd *cmd, const char *const *args)
+{
+       struct dict_connection_transaction *trans;
+       bool value;
+
+       /* <id> <hide_log_values> */
+       if (str_array_length(args) != 2 ) {
+               e_error(cmd->event, "HIDE_LOG_VALUES: broken input");
+               return -1;
+       }
+       if (strcasecmp(args[1], "yes") == 0 || strcasecmp(args[1], "y") == 0 ||
+           strcmp(args[1], "1") == 0)
+               value = TRUE;
+       else if (strcasecmp(args[1], "no") == 0)
+               value = FALSE;
+       else {
+               e_error(cmd->event, "HIDE_LOG_VALUES: broken input");
+               return -1;
+       }
+
+       if (dict_connection_transaction_lookup_parse(cmd->conn, args[0], &trans) < 0)
+               return -1;
+
+       dict_transaction_set_hide_log_values(trans->ctx, value);
+       return 0;
+}
+
 static const struct dict_cmd_func cmds[] = {
        { DICT_PROTOCOL_CMD_LOOKUP, cmd_lookup },
        { DICT_PROTOCOL_CMD_ITERATE, cmd_iterate },
@@ -667,6 +695,7 @@ static const struct dict_cmd_func cmds[] = {
        { DICT_PROTOCOL_CMD_UNSET, cmd_unset },
        { DICT_PROTOCOL_CMD_ATOMIC_INC, cmd_atomic_inc },
        { DICT_PROTOCOL_CMD_TIMESTAMP, cmd_timestamp },
+       { DICT_PROTOCOL_CMD_HIDE_LOG_VALUES, cmd_hide_log_values },
 
        { 0, NULL }
 };
index 32b2da1108104c98ebf30ed1bfc833f2009f0854..2c688efa54ca2d8f51d849ca23366e8063b1f713 100644 (file)
@@ -1468,6 +1468,21 @@ static void client_dict_set_timestamp(struct dict_transaction_context *_ctx,
        client_dict_send_transaction_query(ctx, query);
 }
 
+static void client_dict_set_hide_log_values(struct dict_transaction_context *_ctx,
+                                           bool hide_log_values)
+{
+       struct client_dict_transaction_context *ctx =
+               container_of(_ctx, struct client_dict_transaction_context, ctx);
+       const char *query;
+
+       query = t_strdup_printf("%c%u\t%s",
+                               DICT_PROTOCOL_CMD_HIDE_LOG_VALUES,
+                               ctx->id,
+                               hide_log_values ? "yes" : "no");
+
+        client_dict_send_transaction_query(ctx, query);
+}
+
 struct dict dict_driver_client = {
        .name = "proxy",
 
@@ -1488,5 +1503,6 @@ struct dict dict_driver_client = {
                .lookup_async = client_dict_lookup_async,
                .switch_ioloop = client_dict_switch_ioloop,
                .set_timestamp = client_dict_set_timestamp,
+               .set_hide_log_values = client_dict_set_hide_log_values,
        }
 };
index 5c14f73a6e40efca7a4604d78e3585ec90f133f8..95e2fb09c9c00353290bd2ceaa2f1450a966ec07 100644 (file)
@@ -28,6 +28,7 @@ enum dict_protocol_cmd {
        DICT_PROTOCOL_CMD_UNSET = 'U', /* <id> <key> */
        DICT_PROTOCOL_CMD_ATOMIC_INC = 'A', /* <id> <key> <diff> */
        DICT_PROTOCOL_CMD_TIMESTAMP = 'T', /* <id> <secs> <nsecs> */
+       DICT_PROTOCOL_CMD_HIDE_LOG_VALUES = 'V', /* <id> <hide_log_values> */
 };
 
 enum dict_protocol_reply {