From: Timo Sirainen Date: Thu, 13 May 2010 09:47:53 +0000 (+0200) Subject: doveadm: Added convert command to convert mailbox names between mUTF-7/UTF-8 X-Git-Tag: 2.0.beta6~233 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=528651ee9bb34776507b4390aec072380be45c5c;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Added convert command to convert mailbox names between mUTF-7/UTF-8 --HG-- branch : HEAD --- diff --git a/src/doveadm/doveadm-mail-mailbox.c b/src/doveadm/doveadm-mail-mailbox.c index 8395cf516d..acc89dfe2e 100644 --- a/src/doveadm/doveadm-mail-mailbox.c +++ b/src/doveadm/doveadm-mail-mailbox.c @@ -335,6 +335,49 @@ static struct doveadm_mail_cmd_context *cmd_mailbox_rename_alloc(void) return &ctx->ctx.ctx; } +static void cmd_mailbox_convert(int argc, char *argv[]) +{ + string_t *str; + bool from_utf8; + unsigned int i; + int c; + + from_utf8 = TRUE; + while ((c = getopt(argc, argv, "78")) > 0) { + switch (c) { + case '7': + from_utf8 = FALSE; + break; + case '8': + from_utf8 = TRUE; + break; + default: + help(&doveadm_cmd_mailbox_convert); + } + } + argv += optind; + + if (argv[0] == NULL) + help(&doveadm_cmd_mailbox_convert); + + str = t_str_new(128); + for (i = 0; argv[i] != NULL; i++) { + str_truncate(str, 0); + if (from_utf8) { + if (imap_utf8_to_utf7(argv[i], str) < 0) { + i_error("Mailbox name not valid UTF-8: %s", + argv[i]); + } + } else { + if (imap_utf7_to_utf8(argv[i], str) < 0) { + i_error("Mailbox name not valid mUTF-7: %s", + argv[i]); + } + } + printf("%s\n", str_c(str)); + } +} + struct doveadm_mail_cmd cmd_mailbox_list = { cmd_mailbox_list_alloc, "mailbox list", "[-7|-8] [ [...]]" @@ -351,3 +394,7 @@ struct doveadm_mail_cmd cmd_mailbox_rename = { cmd_mailbox_rename_alloc, "mailbox rename", "[-7|-8] " }; +struct doveadm_cmd doveadm_cmd_mailbox_convert = { + cmd_mailbox_convert, "mailbox convert", + "[-7|-8] [...]", NULL +}; diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index 2e89277200..5bed6f3e9e 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -201,6 +201,7 @@ int main(int argc, char *argv[]) doveadm_register_cmd(&doveadm_cmd_who); doveadm_register_cmd(&doveadm_cmd_penalty); doveadm_register_cmd(&doveadm_cmd_kick); + doveadm_register_cmd(&doveadm_cmd_mailbox_convert); doveadm_mail_init(); doveadm_load_modules(); diff --git a/src/doveadm/doveadm.h b/src/doveadm/doveadm.h index f46f474bbb..ba844ea543 100644 --- a/src/doveadm/doveadm.h +++ b/src/doveadm/doveadm.h @@ -19,6 +19,7 @@ extern struct doveadm_cmd doveadm_cmd_pw; extern struct doveadm_cmd doveadm_cmd_who; extern struct doveadm_cmd doveadm_cmd_penalty; extern struct doveadm_cmd doveadm_cmd_kick; +extern struct doveadm_cmd doveadm_cmd_mailbox_convert; extern bool doveadm_verbose, doveadm_debug;