Fixes several crashes. Apparently can still break with mboxes, although it works with me..
Today, Timo Sirainen <tss@iki.fi> wrote:
Fixes several crashes. Apparently can still break with mboxes, although it works with me..
I decided to give this one a go, and it looks stable. I found some (apparently) namespace bugs - or bugs in my config, although they look more like actual bugs in the code (-: With this namespace configuration: namespace private { separator = . prefix = mail. inbox = yes } I can't CREATE or SELECT mailboxes called "mail.foo.bar.baz": it tells me that the mailbox "foo.bar.baz" doesn't exist (obviously). I tracked this down; it seems like cilent_find_storage (or a function below that) removes the prefix from the mailbox name, which leads to the breakage I detailed above. This patch should fix it at least for SELECT and CREATE. I have no idea if other commands are affected, as well (but I assume they are). --- dovecot-1.0-test39/src/imap/cmd-create.c Fri Jul 23 00:59:49 2004 +++ dovecot-1.0-test39.fixed/src/imap/cmd-create.c Sat Sep 4 16:43:30 2004 @@ -7,12 +7,14 @@ { struct mail_storage *storage; const char *mailbox; + const char *orig_mailbox; int directory; size_t len; /* <mailbox> */ if (!client_read_string_args(client, 1, &mailbox)) return FALSE; + orig_mailbox = mailbox; storage = client_find_storage(client, &mailbox); if (storage == NULL) @@ -29,7 +31,7 @@ mailbox = t_strndup(mailbox, len-1); } - if (!client_verify_mailbox_name(client, mailbox, FALSE, TRUE)) + if (!client_verify_mailbox_name(client, orig_mailbox, FALSE, TRUE)) return TRUE; if (mail_storage_mailbox_create(storage, mailbox, directory) < 0) --- dovecot-1.0-test39/src/imap/cmd-select.c Sat Aug 28 18:06:35 2004 +++ dovecot-1.0-test39.fixed/src/imap/cmd-select.c Sat Sep 4 16:41:22 2004 @@ -10,10 +10,12 @@ struct mailbox *box; struct mailbox_status status; const char *mailbox; + const char *orig_mailbox; /* <mailbox> */ if (!client_read_string_args(client, 1, &mailbox)) return FALSE; + orig_mailbox = mailbox; if (client->mailbox != NULL) { box = client->mailbox; @@ -28,7 +30,7 @@ if (storage == NULL) return TRUE; - box = mailbox_open(storage, mailbox, !readonly ? 0 : + box = mailbox_open(storage, orig_mailbox, !readonly ? 0 : (MAILBOX_OPEN_READONLY | MAILBOX_OPEN_KEEP_RECENT)); if (box == NULL) { client_send_storage_error(client, storage); Bye, -- Andreas Fuchs, <asf@boinkor.net>, asf@jabber.at, antifuchs
Today, Andreas Fuchs <asf@boinkor.net> wrote:
I can't CREATE or SELECT mailboxes called "mail.foo.bar.baz": it tells me that the mailbox "foo.bar.baz" doesn't exist (obviously). I tracked this down; it seems like cilent_find_storage (or a function below that) removes the prefix from the mailbox name, which leads to the breakage I detailed above.
Correction: SELECT works. CREATE really doesn't, though (-:
So the patch's second hunk isn't necessary (harmful, actually). There was a test case breakage, sorry for that.
Thanks,
Andreas Fuchs, <asf@boinkor.net>, asf@jabber.at, antifuchs
participants (2)
-
Andreas Fuchs
-
Timo Sirainen