Skip to content

Commit

Permalink
imap: Iterate over ns settings when deciding to add SPECIAL-USE capab…
Browse files Browse the repository at this point in the history
…ility

To determine whether we should add the SPECIAL-USE capability to the
OK response to LOGIN, we have to iterate over namespace and mailbox
*settings* since the namespaces haven't been set up yet.
  • Loading branch information
Josef 'Jeff' Sipek authored and villesavolainen committed Feb 5, 2018
1 parent 9fe5876 commit f313685
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions src/imap/imap-client.c
Expand Up @@ -73,12 +73,32 @@ static void client_init_urlauth(struct client *client)

static bool user_has_special_use_mailboxes(struct mail_user *user)
{
struct mail_namespace *ns;
struct mail_namespace_settings *const *ns_set;

for (ns = user->namespaces; ns != NULL; ns = ns->next) {
if (ns->special_use_mailboxes)
return TRUE;
/*
* We have to iterate over namespace and mailbox *settings* since
* the namespaces haven't been set up yet. The namespaces haven't
* been set up so that we don't hold up the OK response to LOGIN
* when using slow lib-storage backends.
*/

/* no namespaces => no special use flags */
if (!array_is_created(&user->set->namespaces))
return FALSE;

array_foreach(&user->set->namespaces, ns_set) {
struct mailbox_settings *const *box_set;

/* no mailboxes => no special use flags */
if (!array_is_created(&(*ns_set)->mailboxes))
continue;

array_foreach(&(*ns_set)->mailboxes, box_set) {
if ((*box_set)->special_use != NULL)
return TRUE;
}
}

return FALSE;
}

Expand Down

0 comments on commit f313685

Please sign in to comment.