Mercurial > dovecot > core-2.2
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; }