changeset 1291:ddb4ebbf32a9 HEAD

mbox: LIST "" invalid-directory/% doesn't anymore give internal error
author Timo Sirainen <tss@iki.fi>
date Sun, 09 Mar 2003 12:03:35 +0200
parents 9562ba6af1f1
children 359334706e65
files src/lib-storage/index/mbox/mbox-list.c
diffstat 1 files changed, 13 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/mbox/mbox-list.c	Sun Mar 09 11:56:05 2003 +0200
+++ b/src/lib-storage/index/mbox/mbox-list.c	Sun Mar 09 12:03:35 2003 +0200
@@ -72,8 +72,9 @@
 	if (*dirp != NULL)
 		return 1;
 
-	if (!root && (errno == ENOENT || errno == ENOTDIR)) {
-		/* probably just race condition with other client
+	if (errno == ENOENT || errno == ENOTDIR) {
+		/* root) user gave invalid hiearchy, ignore
+		   sub) probably just race condition with other client
 		   deleting the mailbox. */
 		return 0;
 	}
@@ -128,9 +129,11 @@
 	virtual_path = mask_get_dir(mask);
 
 	path = mbox_get_path(storage, virtual_path);
-	if (list_opendir(storage, path, TRUE, &dirp) <= 0)
+	if (list_opendir(storage, path, TRUE, &dirp) < 0)
 		return NULL;
 
+	/* if user gave invalid directory, we just don't show any results. */
+
 	ctx = i_new(struct mailbox_list_context, 1);
 	ctx->storage = storage;
 	ctx->flags = flags;
@@ -139,15 +142,17 @@
 
 	if (virtual_path == NULL && imap_match(ctx->glob, "INBOX") > 0)
 		ctx->next = mbox_list_inbox;
-	else if (virtual_path != NULL)
+	else if (virtual_path != NULL && dirp != NULL)
 		ctx->next = mbox_list_path;
 	else
 		ctx->next = mbox_list_next;
 
-	ctx->dir = i_new(struct list_dir_context, 1);
-	ctx->dir->dirp = dirp;
-	ctx->dir->real_path = i_strdup(path);
-	ctx->dir->virtual_path = i_strdup(virtual_path);
+	if (dirp != NULL) {
+		ctx->dir = i_new(struct list_dir_context, 1);
+		ctx->dir->dirp = dirp;
+		ctx->dir->real_path = i_strdup(path);
+		ctx->dir->virtual_path = i_strdup(virtual_path);
+	}
 	return ctx;
 }