changeset 16497:4b9a43201a71

lib-storage: Don't crash if backend doesn't have subscriptions file.
author Timo Sirainen <tss@iki.fi>
date Wed, 12 Jun 2013 21:25:09 +0300
parents 7057dfeaeb1a
children db5d4c5164b3
files src/lib-storage/list/mailbox-list-fs-iter.c src/lib-storage/list/mailbox-list-fs.c src/lib-storage/list/mailbox-list-index-backend.c src/lib-storage/list/mailbox-list-maildir.c src/lib-storage/list/mailbox-list-subscriptions.c
diffstat 5 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-fs-iter.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-fs-iter.c	Wed Jun 12 21:25:09 2013 +0300
@@ -153,7 +153,8 @@
 		dir->info_flags |= MAILBOX_SELECT;
 		return 0;
 	}
-	if (strcmp(d->d_name, ctx->ctx.list->set.subscription_fname) == 0) {
+	if (ctx->ctx.list->set.subscription_fname != NULL &&
+	    strcmp(d->d_name, ctx->ctx.list->set.subscription_fname) == 0) {
 		/* if this is the subscriptions file, skip it */
 		root_dir = mailbox_list_get_root_forced(ctx->ctx.list,
 							MAILBOX_LIST_PATH_TYPE_DIR);
--- a/src/lib-storage/list/mailbox-list-fs.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-fs.c	Wed Jun 12 21:25:09 2013 +0300
@@ -170,6 +170,12 @@
 	enum mailbox_list_path_type type;
 	const char *path;
 
+	if (_list->set.subscription_fname == NULL) {
+		mailbox_list_set_error(_list, MAIL_ERROR_NOTPOSSIBLE,
+				       "Subscriptions not supported");
+		return -1;
+	}
+
 	type = _list->set.control_dir != NULL ?
 		MAILBOX_LIST_PATH_TYPE_CONTROL : MAILBOX_LIST_PATH_TYPE_DIR;
 
--- a/src/lib-storage/list/mailbox-list-index-backend.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-index-backend.c	Wed Jun 12 21:25:09 2013 +0300
@@ -167,6 +167,12 @@
 	struct index_mailbox_list *list = (struct index_mailbox_list *)_list;
 	const char *path;
 
+	if (_list->set.subscription_fname == NULL) {
+		mailbox_list_set_error(_list, MAIL_ERROR_NOTPOSSIBLE,
+				       "Subscriptions not supported");
+		return -1;
+	}
+
 	path = t_strconcat(_list->set.control_dir != NULL ?
 			   _list->set.control_dir : _list->set.root_dir,
 			   "/", _list->set.subscription_fname, NULL);
--- a/src/lib-storage/list/mailbox-list-maildir.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-maildir.c	Wed Jun 12 21:25:09 2013 +0300
@@ -180,6 +180,12 @@
 		(struct maildir_mailbox_list *)_list;
 	const char *path;
 
+	if (_list->set.subscription_fname == NULL) {
+		mailbox_list_set_error(_list, MAIL_ERROR_NOTPOSSIBLE,
+				       "Subscriptions not supported");
+		return -1;
+	}
+
 	path = t_strconcat(_list->set.control_dir != NULL ?
 			   _list->set.control_dir : _list->set.root_dir,
 			   "/", _list->set.subscription_fname, NULL);
--- a/src/lib-storage/list/mailbox-list-subscriptions.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-subscriptions.c	Wed Jun 12 21:25:09 2013 +0300
@@ -126,7 +126,8 @@
 
 	type = src_list->set.control_dir != NULL ?
 		MAILBOX_LIST_PATH_TYPE_CONTROL : MAILBOX_LIST_PATH_TYPE_DIR;
-	if (!mailbox_list_get_root_path(src_list, type, &path)) {
+	if (!mailbox_list_get_root_path(src_list, type, &path) ||
+	    src_list->set.subscription_fname == NULL) {
 		/* no subscriptions (e.g. pop3c) */
 		return 0;
 	}