[Dovecot] Hierarchy separator usage -- and a bijou bug? (was: Prayer, Maildir and Folders whose names begin with ".")
Mike Brudenell
pmb1 at york.ac.uk
Tue Mar 13 18:45:16 EET 2007
Greetings -
> On 9 Mar 2007, at 19:40, Timo Sirainen wrote:
>
> I don't see any other way of doing this. Except possibly to give
> "invalid mailbox name" errors, or maybe even change the dot
> silently to
> some other character. All of these options kind of suck.
We've been discussing this problem here and feel that for our users
asking for a folder "M.Brudenell" but being given folder "M"
containing folder "Brudenell" is going to be too unexpected.
Instead we'd like to either reject attempts to create a folder
containing ".", or else silently change the "." to another single
character (eg, "_"). We haven't decided which yet, but probably the
former.
I've been trying to find my way around the Dovecot source (a new
package is _such_ an adventure! :-) and I *think* the place for us to
bolt such a check in is here:
File: src/imap/commands-util.c
Function: client_verify_mailbox_name()
Currently this contains various checks including one like this:
/* make sure two hierarchy separators aren't next to each others */
for (p = mailbox+1; *p != '\0'; p++) {
if (p[0] == sep && p[-1] == sep) {
client_send_tagline(cmd, "NO Invalid mailbox
name.");
return FALSE;
}
}
I was thinking of preceding this with something along the lines of
this (UNTESTED) code fragment:
/* if the separator isn't '.' then don't allow '.' in folder
names */
if (sep != '.') {
for (p = mailbox; *p != '\0'; p++) {
if (p[0] == '.') {
client_send_tagline(cmd, "NO Full-stop not
allowed in mailbox name.");
return FALSE;
}
}
}
Does something like this look OK?
And should it be sufficient? (ie, is this the only place I would
need to insert such a test, or are there other files/functions that
would need it too?)
===================================
By the way...
Timo: I may have spotted another instance of a mailbox name being
returned using the wrong hierarchy separator character (in Dovecot
1.0rc24 with separator set to "/"). Here:
a01 login pmb1 secretpassword
a01 OK Logged in.
a02 select a//b <========================== Asked with //
a02 NO Mailbox doesn't exist: a..b <============ Reply with ..
a03 select a..b
a03 NO Mailbox doesn't exist: a..b
a04 create a..b
a04 NO Invalid mailbox name.
a05 create a//b
a05 NO Invalid mailbox name.
a06 logout
* BYE Logging out
a06 OK Logout completed.
And also...
I'm confused how client_verify_mailbox_name() is detecting two or
more of either "." or "/" as the code looks to only check one
separator character (obtained from mail_storage_get_hierarchy_sep
(storage))
Or is this returning the separator character maildir is using (".")
and not the hierarchy separator which we have changed in the Dovecot
configuration file to "/"? If so then my code fragment isn't going
to work, as the Maildir filestore separator will continue to be "." :-(
Help! I'm confused now!
Cheers,
Mike B-)
--
The Computing Service, University of York, Heslington, York Yo10 5DD, UK
Tel:+44-1904-433811 FAX:+44-1904-433740
* Unsolicited commercial e-mail is NOT welcome at this e-mail address. *
More information about the dovecot
mailing list