Compatibility

The biggest problem that we have with Cyrus is that we have a large installed based of clients configured to run against the UW server. The following are both really short term hacks to allow us to migrate users into the new world without user agent reconfiguration. Once they have been moved we can start a long term campaign to reeducate people about the canonical Cyrus view of the world (with altnamespace and unixhiersep set).

Unix namespace

For many years people have been told to configured their mail user agents to look for email in the directory mail, which is meaningless to Cyrus. Consequently we created a unix namespace, similar to altnamespace, but which supports the following as aliases to the root of the users personal mailstore.

              mail/
  ~/        ~/mail/
  ~userid/  ~userid/mail/

Dual use mailfolders

A major difference between Cyrus and the UW server is that Cyrus supports dual use mail folders, where each mailbox is a directory which can contain subsidiary mailboxes and each directory is also a mailbox. I can't really wrap my brain around this way of working, but that's because I've spent decades using a Unix namespace for mail (and I'm quite used to dual use folders in the context of Usenet news, so I guess that its just one of those things!). Its clear that other people who come from other backgrounds expect mail folders to be dual use, so the Cyrus behaviour will be important to us in the long term.

Our immediate problem is that PINE (still our most popular single user agent) doesn't work well with dual use mail folders. Our Webmail interface Prayer has the same problem (it simply wasn't designed with Cyrus in mind), but that's under our control and easily fixed when it becomes an issue.

The most obvious problems with the PINE user interface can be patched up using the option quell-empty-directories. However, even with quell-empty-directories switched on, PINE exhibits a number of strange mannerisms running against a vanilla Cyrus mailstore, most notably with tab completion and the creation of directory stubs.

The main problem with quell-empty-directories is that PINE doesn't use the Children extension to IMAP folder listing to distinguish between mailboxes which are folders and mailboxes which are directories (from its point of view). Instead it issues a separate LIST command for each mailbox in the current directory to determine which folders are directories and which folders are mailboxes: a horribly inefficient approach.

Our solution is a simple but fairly evil hack to distinguish folders and directories in Cyrus. It looks like the UW people might be working on dual use mailboxes for their IMAP server (and hopefully PINE), so I really hope to be able to lose this one of these days. The nice people at CMU will shudder if they discover what I have done here!


David Carter <dpc22@cam.ac.uk>