From 1bc9c6d9cf10dca14f1c9162ee246bc92bc86132 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 2 Jun 2011 19:21:19 +0200 Subject: [PATCH] reject qualified mailboxes with the magic name INBOX otherwise we couldn't tell them apart from the real INBOX after stripping away the Path. --- src/drv_imap.c | 4 ++++ src/drv_maildir.c | 10 +++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index 8fa0017..c9ff404 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -797,6 +797,10 @@ parse_list_rsp( imap_store_t *ctx, char *cmd ) if (memcmp( arg, ctx->gen.conf->path, l )) return; arg += l; + if (l && !strcmp( arg, "INBOX" )) { + warn( "IMAP warning: ignoring INBOX in %s\n", ctx->gen.conf->path ); + return; + } if (!memcmp( arg + strlen( arg ) - 5, ".lock", 5 )) /* workaround broken servers */ return; add_string_list( &ctx->gen.boxes, arg ); diff --git a/src/drv_maildir.c b/src/drv_maildir.c index 6013846..b68d9ce 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -180,7 +180,7 @@ maildir_list( store_t *gctx, } while ((de = readdir( dir ))) { const char *inbox = ((maildir_store_conf_t *)gctx->conf)->inbox; - int bl; + int bl, isibx; struct stat st; char buf[PATH_MAX]; @@ -189,8 +189,12 @@ maildir_list( store_t *gctx, bl = nfsnprintf( buf, sizeof(buf), "%s%s/cur", gctx->conf->path, de->d_name ); if (stat( buf, &st ) || !S_ISDIR(st.st_mode)) continue; - add_string_list( &gctx->boxes, - !memcmp( buf, inbox, bl - 4 ) && !inbox[bl - 4] ? "INBOX" : de->d_name ); + isibx = !memcmp( buf, inbox, bl - 4 ) && !inbox[bl - 4]; + if (!isibx && !strcmp( de->d_name, "INBOX" )) { + warn( "Maildir warning: ignoring INBOX in %s\n", gctx->conf->path ); + continue; + } + add_string_list( &gctx->boxes, isibx ? "INBOX" : de->d_name ); } closedir (dir);