reject qualified mailboxes with the magic name INBOX
otherwise we couldn't tell them apart from the real INBOX after stripping away the Path.
This commit is contained in:
		
							parent
							
								
									40f2812a41
								
							
						
					
					
						commit
						1bc9c6d9cf
					
				
					 2 changed files with 11 additions and 3 deletions
				
			
		| 
						 | 
					@ -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 );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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,
 | 
							isibx = !memcmp( buf, inbox, bl - 4 ) && !inbox[bl - 4];
 | 
				
			||||||
		                 !memcmp( buf, inbox, bl - 4 ) && !inbox[bl - 4] ? "INBOX" : de->d_name );
 | 
							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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue