فهرست منبع

reject qualified mailboxes with the magic name INBOX

otherwise we couldn't tell them apart from the real INBOX after
stripping away the Path.
Oswald Buddenhagen 14 سال پیش
والد
کامیت
1bc9c6d9cf
2فایلهای تغییر یافته به همراه11 افزوده شده و 3 حذف شده
  1. 4 0
      src/drv_imap.c
  2. 7 3
      src/drv_maildir.c

+ 4 - 0
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 );

+ 7 - 3
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);