]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Added convert command to convert mailbox names between mUTF-7/UTF-8
authorTimo Sirainen <tss@iki.fi>
Thu, 13 May 2010 09:47:53 +0000 (11:47 +0200)
committerTimo Sirainen <tss@iki.fi>
Thu, 13 May 2010 09:47:53 +0000 (11:47 +0200)
--HG--
branch : HEAD

src/doveadm/doveadm-mail-mailbox.c
src/doveadm/doveadm.c
src/doveadm/doveadm.h

index 8395cf516dc2316b8124b09a7f76e1b5621bf11b..acc89dfe2edea1e6284e4b3e962be9701630ea96 100644 (file)
@@ -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] [<mailbox> [...]]"
@@ -351,3 +394,7 @@ struct doveadm_mail_cmd cmd_mailbox_rename = {
        cmd_mailbox_rename_alloc, "mailbox rename",
        "[-7|-8] <old name> <new name>"
 };
+struct doveadm_cmd doveadm_cmd_mailbox_convert = {
+       cmd_mailbox_convert, "mailbox convert",
+       "[-7|-8] <name> [...]", NULL
+};
index 2e89277200c85449293c8ea70287a1ceef1de5c5..5bed6f3e9ec646fffe38ebe206204daadf81593d 100644 (file)
@@ -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();
 
index f46f474bbbe32be333219aef5f398a257a8b1ce5..ba844ea543f83964b5c3dace8985f6888b524e3e 100644 (file)
@@ -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;