Bläddra i källkod

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 15 år sedan
förälder
incheckning
1bc9c6d9cf
2 ändrade filer med 11 tillägg och 3 borttagningar
  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 ))
 	if (memcmp( arg, ctx->gen.conf->path, l ))
 		return;
 		return;
 	arg += l;
 	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 */
 	if (!memcmp( arg + strlen( arg ) - 5, ".lock", 5 )) /* workaround broken servers */
 		return;
 		return;
 	add_string_list( &ctx->gen.boxes, arg );
 	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 ))) {
 	while ((de = readdir( dir ))) {
 		const char *inbox = ((maildir_store_conf_t *)gctx->conf)->inbox;
 		const char *inbox = ((maildir_store_conf_t *)gctx->conf)->inbox;
-		int bl;
+		int bl, isibx;
 		struct stat st;
 		struct stat st;
 		char buf[PATH_MAX];
 		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 );
 		bl = nfsnprintf( buf, sizeof(buf), "%s%s/cur", gctx->conf->path, de->d_name );
 		if (stat( buf, &st ) || !S_ISDIR(st.st_mode))
 		if (stat( buf, &st ) || !S_ISDIR(st.st_mode))
 			continue;
 			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);
 	closedir (dir);