doveadm-mail-mailbox-metadata.c revision 504f950c5b60967e413b4fa0e79f7f6b9d6cfd7a
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen/* Copyright (c) 2014-2016 Dovecot authors, see the included COPYING file */
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen const char *key;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainencmd_mailbox_metadata_set_run(struct doveadm_mail_cmd_context *_ctx,
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen struct metadata_cmd_context *ctx = (struct metadata_cmd_context *)_ctx;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ns = mail_namespace_find(user->namespaces, ctx->mailbox);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen box = mailbox_alloc(ns->list, ctx->mailbox, 0);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen mailbox_attribute_unset(trans, ctx->key_type, ctx->key) :
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen mailbox_attribute_set(trans, ctx->key_type, ctx->key, &ctx->value);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen } else if (mailbox_transaction_commit(&trans) < 0) {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainencmd_mailbox_metadata_parse_key(const char *arg,
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen const char **key_r)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen } else if (strncmp(arg, "/shared/", 8) == 0) {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen i_fatal_status(EX_USAGE, "Invalid metadata key '%s': "
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainencmd_mailbox_metadata_set_init(struct doveadm_mail_cmd_context *_ctx,
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen const char *const args[])
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen struct metadata_cmd_context *ctx = (struct metadata_cmd_context *)_ctx;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen const char *key;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen doveadm_mail_help_name("mailbox metadata set");
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen cmd_mailbox_metadata_parse_key(args[1], &ctx->key_type, &key);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx->value.value = p_strdup(_ctx->pool, args[2]);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_metadata_set_alloc(void)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx = doveadm_mail_cmd_alloc(struct metadata_cmd_context);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen ctx->ctx.v.init = cmd_mailbox_metadata_set_init;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx->ctx.v.run = cmd_mailbox_metadata_set_run;
67c47dbb3fde79218320fd38a45c33f61bbf3012Timo Sirainencmd_mailbox_metadata_unset_init(struct doveadm_mail_cmd_context *_ctx,
c4c9be10781e1a16b3b001dc6b0461c4640da101Timo Sirainen const char *const args[])
c4c9be10781e1a16b3b001dc6b0461c4640da101Timo Sirainen struct metadata_cmd_context *ctx = (struct metadata_cmd_context *)_ctx;
c4c9be10781e1a16b3b001dc6b0461c4640da101Timo Sirainen const char *key;
c4c9be10781e1a16b3b001dc6b0461c4640da101Timo Sirainen doveadm_mail_help_name("mailbox metadata unset");
c4c9be10781e1a16b3b001dc6b0461c4640da101Timo Sirainen cmd_mailbox_metadata_parse_key(args[1], &ctx->key_type, &key);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_metadata_unset_alloc(void)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx = doveadm_mail_cmd_alloc(struct metadata_cmd_context);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx->ctx.v.init = cmd_mailbox_metadata_unset_init;
f77ffa31038d46ca9c6d24d93e3d76c9aa8d4d0cTimo Sirainen ctx->ctx.v.run = cmd_mailbox_metadata_set_run;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainencmd_mailbox_metadata_get_run(struct doveadm_mail_cmd_context *_ctx,
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen struct metadata_cmd_context *ctx = (struct metadata_cmd_context *)_ctx;
c4c9be10781e1a16b3b001dc6b0461c4640da101Timo Sirainen ns = mail_namespace_find(user->namespaces, ctx->mailbox);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen box = mailbox_alloc(ns->list, ctx->mailbox, 0);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ret = mailbox_attribute_get_stream(trans, ctx->key_type, ctx->key, &value);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen } else if (ret == 0) {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen /* not found, print as empty */
35083063d0e432d0cf78206b5929750e613ad772Timo Sirainencmd_mailbox_metadata_get_init(struct doveadm_mail_cmd_context *_ctx,
35083063d0e432d0cf78206b5929750e613ad772Timo Sirainen const char *const args[])
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen struct metadata_cmd_context *ctx = (struct metadata_cmd_context *)_ctx;
35083063d0e432d0cf78206b5929750e613ad772Timo Sirainen const char *key;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen doveadm_mail_help_name("mailbox metadata get");
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen cmd_mailbox_metadata_parse_key(args[1], &ctx->key_type, &key);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_metadata_get_alloc(void)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx = doveadm_mail_cmd_alloc(struct metadata_cmd_context);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx->ctx.v.init = cmd_mailbox_metadata_get_init;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx->ctx.v.run = cmd_mailbox_metadata_get_run;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainencmd_mailbox_metadata_list_run_iter(struct metadata_cmd_context *ctx,
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen const char *key;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen iter = mailbox_attribute_iter_init(box, type, ctx->key);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen while ((key = mailbox_attribute_iter_next(iter)) != NULL)
c7194d1d3872ffb2901737e1df337cc227a3fa77Timo Sirainen if (mailbox_attribute_iter_deinit(&iter) < 0) {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen i_error("Mailbox %s: Failed to iterate mailbox attributes: %s",
67c47dbb3fde79218320fd38a45c33f61bbf3012Timo Sirainencmd_mailbox_metadata_list_run(struct doveadm_mail_cmd_context *_ctx,
c4c9be10781e1a16b3b001dc6b0461c4640da101Timo Sirainen struct metadata_cmd_context *ctx = (struct metadata_cmd_context *)_ctx;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen ns = mail_namespace_find(user->namespaces, ctx->mailbox);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen box = mailbox_alloc(ns->list, ctx->mailbox, 0);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen if (ctx->key == NULL || ctx->key_type == MAIL_ATTRIBUTE_TYPE_PRIVATE) {
c8cf8a605e0ddea7cb36fe04551aeca5090e684bTimo Sirainen if (cmd_mailbox_metadata_list_run_iter(ctx, box, MAIL_ATTRIBUTE_TYPE_PRIVATE) < 0) {
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen if (ctx->key == NULL || ctx->key_type == MAIL_ATTRIBUTE_TYPE_SHARED) {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen if (cmd_mailbox_metadata_list_run_iter(ctx, box, MAIL_ATTRIBUTE_TYPE_SHARED) < 0) {
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainencmd_mailbox_metadata_list_init(struct doveadm_mail_cmd_context *_ctx,
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *const args[])
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen struct metadata_cmd_context *ctx = (struct metadata_cmd_context *)_ctx;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen doveadm_mail_help_name("mailbox metadata list");
0d16525a729011f4fced989a3da74d755ea49e6dTimo Sirainen cmd_mailbox_metadata_parse_key(args[1], &ctx->key_type, &key);
67c47dbb3fde79218320fd38a45c33f61bbf3012Timo Sirainen ctx->key = key == NULL ? "" : p_strdup(_ctx->pool, key);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_metadata_list_alloc(void)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx = doveadm_mail_cmd_alloc(struct metadata_cmd_context);
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx->ctx.v.init = cmd_mailbox_metadata_list_init;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ctx->ctx.v.run = cmd_mailbox_metadata_list_run;
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainenstruct doveadm_cmd_ver2 doveadm_cmd_mailbox_metadata_set_ver2 = {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen .usage = DOVEADM_CMD_MAIL_USAGE_PREFIX"<mailbox> <key> <value>",
4654f788834c9d7920a351306b89cf5d1c21772eTimo SirainenDOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
4654f788834c9d7920a351306b89cf5d1c21772eTimo SirainenDOVEADM_CMD_PARAM('\0', "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
4654f788834c9d7920a351306b89cf5d1c21772eTimo SirainenDOVEADM_CMD_PARAM('\0', "value", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainenstruct doveadm_cmd_ver2 doveadm_cmd_mailbox_metadata_unset_ver2 = {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen .usage = DOVEADM_CMD_MAIL_USAGE_PREFIX"<mailbox> <key>",
4654f788834c9d7920a351306b89cf5d1c21772eTimo SirainenDOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
4654f788834c9d7920a351306b89cf5d1c21772eTimo SirainenDOVEADM_CMD_PARAM('\0', "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainenstruct doveadm_cmd_ver2 doveadm_cmd_mailbox_metadata_get_ver2 = {
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen .usage = DOVEADM_CMD_MAIL_USAGE_PREFIX"<mailbox> <key>",
4654f788834c9d7920a351306b89cf5d1c21772eTimo SirainenDOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
67c47dbb3fde79218320fd38a45c33f61bbf3012Timo SirainenDOVEADM_CMD_PARAM('\0', "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)