]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Don't crash if backend doesn't have subscriptions file.
authorTimo Sirainen <tss@iki.fi>
Wed, 12 Jun 2013 18:25:09 +0000 (21:25 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 12 Jun 2013 18:25:09 +0000 (21:25 +0300)
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

index 168826488bd8a287f878f991b335c82b1d41b881..393e8f3891506152910df1ff811690449fc47a7e 100644 (file)
@@ -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);
index 1df8b56d26e9875beff153d2de1f28833139bd18..a4f8a91b4828ed870fe8c4b264480133fee45410 100644 (file)
@@ -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;
 
index e9e4e03fc35bc00f0686b62d51baf817d7310d39..535dc1dc733b05a571ce2348f0d831f7caffb013 100644 (file)
@@ -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);
index c3daf56c018b88d2c3bcee37e85d1b1d3b39d261..94cfd9604cc54e3089297e01352eb2c44c86571d 100644 (file)
@@ -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);
index 28174fec13448c0d41fec0c672187828185aa501..3474b2e463c0c6291842c1bb19822f468e14a03f 100644 (file)
@@ -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;
        }