From: Timo Sirainen Date: Wed, 12 Jun 2013 18:25:09 +0000 (+0300) Subject: lib-storage: Don't crash if backend doesn't have subscriptions file. X-Git-Tag: 2.2.3~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3568ea090b5a072e498438e74db23b98103ff2de;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Don't crash if backend doesn't have subscriptions file. --- diff --git a/src/lib-storage/list/mailbox-list-fs-iter.c b/src/lib-storage/list/mailbox-list-fs-iter.c index 168826488b..393e8f3891 100644 --- a/src/lib-storage/list/mailbox-list-fs-iter.c +++ b/src/lib-storage/list/mailbox-list-fs-iter.c @@ -153,7 +153,8 @@ dir_entry_get(struct fs_list_iterate_context *ctx, const char *dir_path, 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); diff --git a/src/lib-storage/list/mailbox-list-fs.c b/src/lib-storage/list/mailbox-list-fs.c index 1df8b56d26..a4f8a91b48 100644 --- a/src/lib-storage/list/mailbox-list-fs.c +++ b/src/lib-storage/list/mailbox-list-fs.c @@ -170,6 +170,12 @@ static int fs_list_set_subscribed(struct mailbox_list *_list, 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; diff --git a/src/lib-storage/list/mailbox-list-index-backend.c b/src/lib-storage/list/mailbox-list-index-backend.c index e9e4e03fc3..535dc1dc73 100644 --- a/src/lib-storage/list/mailbox-list-index-backend.c +++ b/src/lib-storage/list/mailbox-list-index-backend.c @@ -167,6 +167,12 @@ static int index_list_set_subscribed(struct mailbox_list *_list, 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); diff --git a/src/lib-storage/list/mailbox-list-maildir.c b/src/lib-storage/list/mailbox-list-maildir.c index c3daf56c01..94cfd9604c 100644 --- a/src/lib-storage/list/mailbox-list-maildir.c +++ b/src/lib-storage/list/mailbox-list-maildir.c @@ -180,6 +180,12 @@ static int maildir_list_set_subscribed(struct mailbox_list *_list, (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); diff --git a/src/lib-storage/list/mailbox-list-subscriptions.c b/src/lib-storage/list/mailbox-list-subscriptions.c index 28174fec13..3474b2e463 100644 --- a/src/lib-storage/list/mailbox-list-subscriptions.c +++ b/src/lib-storage/list/mailbox-list-subscriptions.c @@ -126,7 +126,8 @@ int mailbox_list_subscriptions_refresh(struct mailbox_list *src_list, 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; }