Other Users' Folders

Most operations concerning other users' folders are handled by ExchangeHierarchyForeign, with some help from ExchangeAccount.

When the user first tries to add another user's folder, ExchangeAccount looks up the user in the Global Catalog, passing the E2K_GLOBAL_CATALOG_LOOKUP_EMAIL and E2K_GLOBAL_CATALOG_LOOKUP_MAILBOX flags to e2k_global_catalog_lookup(). The exchange_server and mailbox fields in the returned E2kGlobalCatalogEntry are then used to construct a URL (using the account's SSL settings).

Note

(One problem with this approach is that the returned exchange_server is not guaranteed to be running OWA. See Bug 258526.)

ExchangeAccount then creates an ExchangeHierarchyForeign from that data, and asks it to subscribe to the requested folder. ExchangeHierarchyForeign looks for the folder in two different ways. First, it tries using the literal folder name that the user provided.

If that fails, and if the folder name is one of the default folder names (eg, "Calendar"), then it tries looking up the urn:schemas:httpmail: property for that folder (eg, urn:schemas:httpmail:calendar) on the other user's mailbox. (Specifically, it looks for the property on the invisible /NON_IPM_SUBTREE subdirectory of the user's mailbox, because the property won't be readable on the top-level directory unless the user has permission to read the top-level directory.) This allows the folder to be found even if it has a localized name (eg, "Calendario").

Private items

Outlook allows the user to mark items in folders as "private". (Evolution allows this in Calendar and Task folders, but not Contact or Mail folders.) Private items are not supposed to show up when other users view the folder, unless they have been given explicit permission to view private items in the Delegates dialog. However, Exchange does not actually enforce this itself, so we have to work around this.