]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage, listescape: Replace listescape_char with mailbox_list_storage_escape_cha...
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sat, 28 Oct 2023 20:03:08 +0000 (23:03 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:11 +0000 (12:34 +0200)
This commit removes the listescape plugin entirely.

19 files changed:
configure.ac
src/lib-storage/index/imapc/imapc-list.c
src/lib-storage/index/imapc/imapc-settings.c
src/lib-storage/index/imapc/imapc-storage.c
src/lib-storage/index/imapc/imapc-storage.h
src/lib-storage/list/mailbox-list-index-backend.c
src/lib-storage/list/mailbox-list-index-iter.c
src/lib-storage/list/mailbox-list-index-sync.c
src/lib-storage/list/mailbox-list-index.c
src/lib-storage/mail-storage-settings.c
src/lib-storage/mail-storage-settings.h
src/lib-storage/mail-storage.c
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h
src/lib-storage/test-mailbox-list.c
src/plugins/Makefile.am
src/plugins/listescape/Makefile.am [deleted file]
src/plugins/listescape/listescape-plugin.c [deleted file]
src/plugins/listescape/listescape-plugin.h [deleted file]

index eb4b810a375f87e1786d0e9eaf55d69ae128ed43..da001620484b59a63137187e65ef37a6609f3b6a 100644 (file)
@@ -888,7 +888,6 @@ src/plugins/fts-flatcurve/Makefile
 src/plugins/fts-solr/Makefile
 src/plugins/last-login/Makefile
 src/plugins/lazy-expunge/Makefile
-src/plugins/listescape/Makefile
 src/plugins/mail-log/Makefile
 src/plugins/mail-lua/Makefile
 src/plugins/notify/Makefile
index 43c181be51709526a965e45f0ea781a7246c13cf..f7eb55b1587eb4f7eeb03f3f61a574ddd2b04747 100644 (file)
@@ -195,7 +195,7 @@ imapc_list_remote_to_storage_name(struct imapc_mailbox_list *list,
        return mailbox_list_escape_name_params(remote_name, "",
                list->root_sep,
                mailbox_list_get_hierarchy_sep(&list->list),
-               list->list.set.storage_name_escape_char, "");
+               list->list.mail_set->mailbox_list_storage_escape_char[0], "");
 }
 
 static const char *
@@ -210,9 +210,9 @@ const char *
 imapc_list_storage_to_remote_name(struct imapc_mailbox_list *list,
                                  const char *storage_name)
 {
-       return mailbox_list_unescape_name_params(storage_name, "", list->root_sep,
-                               mailbox_list_get_hierarchy_sep(&list->list),
-                               list->list.set.storage_name_escape_char);
+       return mailbox_list_unescape_name_params(storage_name, "",
+               list->root_sep, mailbox_list_get_hierarchy_sep(&list->list),
+               list->list.mail_set->mailbox_list_storage_escape_char[0]);
 }
 
 static struct mailbox_node *
@@ -433,17 +433,18 @@ static struct mailbox_list *imapc_list_get_fs(struct imapc_mailbox_list *list)
        } else if (list->index_list == NULL && !list->index_list_failed) {
                mailbox_list_settings_init_defaults(&list_set);
                list_set.root_dir = dir;
-               /* Filesystem needs to be able to store any kind of a mailbox
-                  name. */
-               list_set.storage_name_escape_char =
-                       IMAPC_LIST_FS_NAME_ESCAPE_CHAR;
-
                struct settings_instance *set_instance =
                        mail_storage_service_user_get_settings_instance(
                                list->list.ns->user->service_user);
                list->index_list_set_instance =
                        settings_instance_dup(set_instance);
                mail_storage_2nd_settings_reset(list->index_list_set_instance, "*/");
+               /* Filesystem needs to be able to store any kind of a mailbox
+                  name. */
+               settings_override(list->index_list_set_instance,
+                                 "*/mailbox_list_storage_escape_char",
+                                 IMAPC_LIST_FS_NAME_ESCAPE_CHAR,
+                                 SETTINGS_OVERRIDE_TYPE_CODE);
                settings_override(list->index_list_set_instance,
                                  "*/mailbox_list_layout",
                                  MAILBOX_LIST_NAME_MAILDIRPLUSPLUS,
@@ -490,9 +491,8 @@ imapc_list_storage_to_fs_name(struct imapc_mailbox_list *list,
 
        remote_name = imapc_list_storage_to_remote_name(list, storage_name);
        return mailbox_list_escape_name_params(remote_name, "",
-                       list->root_sep,
-                       mailbox_list_get_hierarchy_sep(fs_list),
-                       fs_list->set.storage_name_escape_char, "");
+               list->root_sep, mailbox_list_get_hierarchy_sep(fs_list),
+               fs_list->mail_set->mailbox_list_storage_escape_char[0], "");
 }
 
 static const char *
@@ -508,7 +508,7 @@ imapc_list_fs_to_storage_name(struct imapc_mailbox_list *list,
        remote_name = mailbox_list_unescape_name_params(fs_name, "",
                        list->root_sep,
                        mailbox_list_get_hierarchy_sep(fs_list),
-                       fs_list->set.storage_name_escape_char);
+                       fs_list->mail_set->mailbox_list_storage_escape_char[0]);
        return imapc_list_remote_to_storage_name(list, remote_name);
 }
 
index 0d50b14e4bed0a8e5a492fa79b5198031bd81b0c..3667642d24ed5038dd8646aafc0dac58c929557e 100644 (file)
@@ -68,6 +68,7 @@ static const struct setting_keyvalue imapc_default_filter_settings_keyvalue[] =
        /* We want to have all imapc mailboxes accessible, so escape them if
           necessary. */
        { "layout_imapc/mailbox_list_visible_escape_char", "~" },
+       { "layout_imapc/mailbox_list_storage_escape_char", "%%" },
        { NULL, NULL }
 };
 
index 0725efa3beff135fa5740f8b0814bfb06ed8ab4c..ce84a7133853bc1cac2139adf55b3241255d3cd7 100644 (file)
@@ -513,14 +513,6 @@ void imapc_storage_client_unregister_untagged(struct imapc_storage_client *clien
        i_unreached();
 }
 
-static void
-imapc_storage_get_list_settings(const struct mail_namespace *ns ATTR_UNUSED,
-                               struct mailbox_list_settings *set,
-                               const struct mail_storage_settings *mail_set ATTR_UNUSED)
-{
-       set->storage_name_escape_char = IMAPC_LIST_STORAGE_NAME_ESCAPE_CHAR;
-}
-
 static struct mailbox *
 imapc_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
                    const char *vname, enum mailbox_flags flags)
@@ -1370,7 +1362,7 @@ struct mail_storage imapc_storage = {
                imapc_storage_create,
                imapc_storage_destroy,
                NULL,
-               imapc_storage_get_list_settings,
+               NULL,
                NULL,
                imapc_mailbox_alloc,
                NULL,
index ba8a35a72aa34d595160abd7194749b0a5b448d1..e0b1ddfdea0bf8558ce7fc28958295c27b467015 100644 (file)
@@ -6,10 +6,8 @@
 #include "imapc-client.h"
 
 #define IMAPC_STORAGE_NAME "imapc"
-/* storage_name separator */
-#define IMAPC_LIST_STORAGE_NAME_ESCAPE_CHAR '%'
 /* fs_name separator */
-#define IMAPC_LIST_FS_NAME_ESCAPE_CHAR '%'
+#define IMAPC_LIST_FS_NAME_ESCAPE_CHAR "%"
 
 struct imap_arg;
 struct imapc_untagged_reply;
index 80dd7eeb51d48af173c0de151b16d3a4ada564a4..f648b4fad6a4a08aea37940591edf88f29448ba5 100644 (file)
@@ -13,7 +13,6 @@
 #include <stdio.h>
 
 #define GLOBAL_TEMP_PREFIX ".temp."
-#define MAILBOX_LIST_INDEX_DEFAULT_ESCAPE_CHAR '^'
 
 struct index_mailbox_list {
        struct mailbox_list list;
@@ -39,7 +38,6 @@ static struct mailbox_list *index_list_alloc(void)
        list = p_new(pool, struct index_mailbox_list, 1);
        list->list = index_mailbox_list;
        list->list.pool = pool;
-       list->list.set.storage_name_escape_char = MAILBOX_LIST_INDEX_DEFAULT_ESCAPE_CHAR;
 
        list->temp_prefix = p_strconcat(pool, GLOBAL_TEMP_PREFIX,
                                        my_hostname, ".", my_pid, ".", NULL);
@@ -68,7 +66,7 @@ static char index_list_get_hierarchy_sep(struct mailbox_list *list)
 
        if (sep == '\0')
                sep = MAILBOX_LIST_INDEX_HIERARCHY_SEP;
-       if (sep == list->set.storage_name_escape_char) {
+       if (sep == list->mail_set->mailbox_list_storage_escape_char[0]) {
                /* Separator conflicts with the escape character.
                   Use something else. */
                if (sep != MAILBOX_LIST_INDEX_HIERARCHY_SEP)
index 066b1136a758385f381cced2fcd54d04c13309f7..cb1e1f80e0933f5d8a09ef86e4170a33d3839bb9 100644 (file)
@@ -72,7 +72,7 @@ mailbox_list_get_escaped_mailbox_name(struct mailbox_list *list,
                                      string_t *escaped_name)
 {
        const char escape_chars[] = {
-               list->set.storage_name_escape_char,
+               list->mail_set->mailbox_list_storage_escape_char[0],
                mailbox_list_get_hierarchy_sep(list),
                '\0'
        };
index 06afe6529db0a2cd44de364454e5ef9d0097f0cf..580e39a08723c6a672ac681e834d2cc9ee16e118 100644 (file)
@@ -61,7 +61,8 @@ mailbox_list_index_node_add(struct mailbox_list_index_sync_context *ctx,
 {
        struct mailbox_list_index_node *node;
        char *dup_name;
-       mailbox_list_name_unescape(&name, ctx->list->set.storage_name_escape_char);
+       mailbox_list_name_unescape(&name,
+               ctx->list->mail_set->mailbox_list_storage_escape_char[0]);
 
        node = p_new(ctx->ilist->mailbox_pool,
                     struct mailbox_list_index_node, 1);
index 47d46313285d1d2a4db77ae7344232e75e1401be..cc080f1fa93740147f3129e481e6daae0a3f3672 100644 (file)
@@ -122,7 +122,8 @@ mailbox_list_index_node_find_sibling(const struct mailbox_list *list,
                                     struct mailbox_list_index_node *node,
                                     const char *name)
 {
-       mailbox_list_name_unescape(&name, list->set.storage_name_escape_char);
+       mailbox_list_name_unescape(&name,
+               list->mail_set->mailbox_list_storage_escape_char[0]);
 
        while (node != NULL) {
                if (strcmp(node->raw_name, name) == 0)
@@ -535,10 +536,10 @@ mailbox_name_hdr_encode(struct mailbox_list *list, const char *storage_name,
        };
        const char **name_parts =
                (const char **)p_strsplit(unsafe_data_stack_pool, storage_name, sep);
-       if (list->set.storage_name_escape_char != '\0') {
+       if (list->mail_set->mailbox_list_storage_escape_char[0] != '\0') {
                for (unsigned int i = 0; name_parts[i] != NULL; i++) {
                        mailbox_list_name_unescape(&name_parts[i],
-                               list->set.storage_name_escape_char);
+                               list->mail_set->mailbox_list_storage_escape_char[0]);
                }
        }
 
@@ -559,7 +560,7 @@ mailbox_name_hdr_decode_storage_name(struct mailbox_list *list,
                                     size_t name_hdr_size)
 {
        const char list_sep = mailbox_list_get_hierarchy_sep(list);
-       const char escape_char = list->set.storage_name_escape_char;
+       const char escape_char = list->mail_set->mailbox_list_storage_escape_char[0];
        string_t *storage_name = t_str_new(name_hdr_size);
        while (name_hdr_size > 0) {
                const unsigned char *p = memchr(name_hdr, '\0', name_hdr_size);
index 780bbf85c859747160520cbefb283fd54a688f27..223530f6ef5a4008c4cc0235da17107aa428b326 100644 (file)
@@ -86,6 +86,7 @@ static const struct setting_define mail_storage_setting_defines[] = {
        DEF(BOOL_HIDDEN, mailbox_list_drop_noselect),
        DEF(BOOL_HIDDEN, mailbox_list_validate_fs_names),
        DEF(STR, mailbox_list_visible_escape_char),
+       DEF(STR, mailbox_list_storage_escape_char),
        DEF(STR_HIDDEN, mailbox_root_directory_name),
        DEF(STR_HIDDEN, mailbox_subscriptions_filename),
        DEF(STR, mail_index_path),
@@ -161,6 +162,7 @@ const struct mail_storage_settings mail_storage_default_settings = {
        .mailbox_list_drop_noselect = TRUE,
        .mailbox_list_validate_fs_names = TRUE,
        .mailbox_list_visible_escape_char = "",
+       .mailbox_list_storage_escape_char = "",
        .mailbox_root_directory_name = "",
        .mailbox_subscriptions_filename = "subscriptions",
        .mail_index_path = "",
@@ -182,11 +184,17 @@ const struct mail_storage_settings mail_storage_default_settings = {
        .plugin_envs = ARRAY_INIT,
 };
 
+static const struct setting_keyvalue mail_storage_default_filter_settings_keyvalue[] = {
+       { "layout_index/mailbox_list_storage_escape_char", "^" },
+       { NULL, NULL }
+};
+
 const struct setting_parser_info mail_storage_setting_parser_info = {
        .name = "mail_storage",
 
        .defines = mail_storage_setting_defines,
        .defaults = &mail_storage_default_settings,
+       .default_filter_settings = mail_storage_default_filter_settings_keyvalue,
 
        .struct_size = sizeof(struct mail_storage_settings),
        .pool_offset1 = 1 + offsetof(struct mail_storage_settings, pool),
@@ -780,6 +788,11 @@ mail_storage_settings_ext_check(struct event *event, void *_set, pool_t pool,
                *error_r = "mailbox_list_visible_escape_char value must be a single character";
                return FALSE;
        }
+       if (set->mailbox_list_storage_escape_char != set_value_unknown &&
+           strlen(set->mailbox_list_storage_escape_char) > 1) {
+               *error_r = "mailbox_list_storage_escape_char value must be a single character";
+               return FALSE;
+       }
 
        if (!mail_storage_settings_check_namespaces(event, set, error_r))
                return FALSE;
@@ -1029,6 +1042,7 @@ static const size_t mail_storage_2nd_reset_offsets[] = {
        OFFSET(mailbox_list_index_prefix),
        OFFSET(mailbox_list_iter_from_index_dir),
        OFFSET(mailbox_list_visible_escape_char),
+       OFFSET(mailbox_list_storage_escape_char),
        OFFSET(mailbox_root_directory_name),
        OFFSET(mailbox_subscriptions_filename),
        OFFSET(mail_index_path),
index aca2ebb8a36be1aafabaecb1943eadcb84a53cc4..61f5490ab6f2bd02018fca40bfd41a6aa73feae5 100644 (file)
@@ -65,6 +65,7 @@ struct mail_storage_settings {
        bool mailbox_list_drop_noselect;
        bool mailbox_list_validate_fs_names;
        const char *mailbox_list_visible_escape_char;
+       const char *mailbox_list_storage_escape_char;
        const char *mailbox_root_directory_name;
        const char *mailbox_subscriptions_filename;
        const char *mail_index_path;
index 2aef6f71df02124e2299553c9636743e5b334659..8492dff5dd3b1b958c41db40ffadd41061063e7f 100644 (file)
@@ -77,6 +77,7 @@ void mail_storage_init(void)
        i_array_init(&mail_storage_classes, 8);
        mail_storage_register_all();
        mailbox_list_register_all();
+       settings_info_register(&mail_storage_setting_parser_info);
 }
 
 void mail_storage_deinit(void)
@@ -1461,7 +1462,7 @@ static int mailbox_verify_name_int(struct mailbox *box)
           (without escaping) because it would end up becoming a hierarchy
           separator. */
        if (ns_sep != list_sep &&
-           box->list->set.storage_name_escape_char == '\0' &&
+           box->list->mail_set->mailbox_list_storage_escape_char[0] == '\0' &&
            strchr(vname, list_sep) != NULL) {
                mail_storage_set_error(box->storage, MAIL_ERROR_PARAMS, t_strdup_printf(
                        "Character not allowed in mailbox name: '%c'", list_sep));
index ea346673affffcff3e1f92347637e58e2abbba87..44780e7f35e05ee09690a87cd7b79afd1db1cc6a 100644 (file)
@@ -158,8 +158,6 @@ int mailbox_list_create(struct event *event, struct mail_namespace *ns,
        list->set.index_control_use_maildir_name =
                set->index_control_use_maildir_name;
 
-       if (set->storage_name_escape_char != '\0')
-               list->set.storage_name_escape_char = set->storage_name_escape_char;
        list->set.utf8 = set->utf8;
 
        if (list->v.init != NULL) {
@@ -458,13 +456,13 @@ mailbox_list_vname_prepare(struct mailbox_list *list, const char **_vname)
                        vname += ns->prefix_len;
                        if (strcmp(vname, "INBOX") == 0 &&
                            (list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 &&
-                           list->set.storage_name_escape_char != '\0') {
+                           list->mail_set->mailbox_list_storage_escape_char[0] != '\0') {
                                /* prefix/INBOX - this is troublesome, because
                                   it ends up conflicting with the INBOX name.
                                   Handle this in a bit kludgy way by escaping
                                   the initial "I" character. */
                                *_vname = t_strdup_printf("%c49NBOX",
-                                       list->set.storage_name_escape_char);
+                                       list->mail_set->mailbox_list_storage_escape_char[0]);
                                return TRUE;
                        }
                } else if (strncmp(ns->prefix, vname, ns->prefix_len-1) == 0 &&
@@ -506,12 +504,12 @@ mailbox_list_default_get_storage_name_part(struct mailbox_list *list,
                mailbox_list_name_unescape(&storage_name,
                        list->mail_set->mailbox_list_visible_escape_char[0]);
        }
-       if (list->set.storage_name_escape_char != '\0') {
+       if (list->mail_set->mailbox_list_storage_escape_char[0] != '\0') {
                storage_name = mailbox_list_escape_name_params(storage_name,
                                list->ns->prefix,
                                '\0', /* no separator conversion */
                                mailbox_list_get_hierarchy_sep(list),
-                               list->set.storage_name_escape_char,
+                               list->mail_set->mailbox_list_storage_escape_char[0],
                                list->set.maildir_name);
        }
        return storage_name;
@@ -529,7 +527,7 @@ const char *mailbox_list_default_get_storage_name(struct mailbox_list *list,
        if (list->ns->type == MAIL_NAMESPACE_TYPE_SHARED &&
            (list->ns->flags & NAMESPACE_FLAG_AUTOCREATED) == 0 &&
            list_sep != ns_sep &&
-           list->set.storage_name_escape_char == '\0') {
+           list->mail_set->mailbox_list_storage_escape_char[0] == '\0') {
                /* Accessing shared namespace root. This is just the initial
                   lookup that ends up as parameter to
                   shared_storage_get_namespace(). That then finds/creates the
@@ -651,11 +649,11 @@ mailbox_list_default_get_vname_part(struct mailbox_list *list,
                '\0'
        };
 
-       if (list->set.storage_name_escape_char != '\0') {
+       if (list->mail_set->mailbox_list_storage_escape_char[0] != '\0') {
                vname = mailbox_list_unescape_name_params(vname,
                                list->ns->prefix,
                                '\0', '\0', /* no separator conversion */
-                               list->set.storage_name_escape_char);
+                               list->mail_set->mailbox_list_storage_escape_char[0]);
        }
 
        if (!list->set.utf8) {
index 414cc5c02ecafb021e9da5e2f29250c3e90712d9..17fb50f2aaa80c1aa82bd742c86a6e8a5f0f154d 100644 (file)
@@ -131,14 +131,6 @@ struct mailbox_list_settings {
           "mail" and a selectable mailbox "mail/foo". */
        const char *maildir_name;
 
-       /* Used for escaping the mailbox name in storage (storage_name). If the
-          UTF-8 vname has characters that can't reversibly (or safely) be
-          converted to storage_name and back, encode the problematic parts
-          using <storage_name_escape_char><hex>. The storage_name_escape_char
-          itself also has to be encoded the same way. For example
-          { vname="A/B.C%D", storage_name_escape_char='%', namespace_sep='/',
-          storage_sep='.' } -> storage_name="A.B%2eC%25D". */
-       char storage_name_escape_char;
        /* Use UTF-8 mailbox names on filesystem instead of mUTF-7 */
        bool utf8:1;
        /* Use maildir_name also for index/control directories. This should
index 31e59e3a6b2093d41d9a6962b934f85bf6e2548e..511c3a11e5a38690cf067a406cda90dc086ccb45 100644 (file)
@@ -269,9 +269,10 @@ test_maibox_list_name_init(struct mailbox_list *list,
                           const struct test_mailbox_list_name *test,
                           bool mutf7)
 {
-       static char vname_escape_char[2];
+       static char vname_escape_char[2], storage_escape_char[2];
        static struct mail_storage_settings mail_set = {
                .mailbox_list_visible_escape_char = vname_escape_char,
+               .mailbox_list_storage_escape_char = storage_escape_char,
        };
 
        list->mail_set = &mail_set;
@@ -283,8 +284,7 @@ test_maibox_list_name_init(struct mailbox_list *list,
        list_hierarchy_sep = test->list_sep;
        list->set.utf8 = !mutf7;
        vname_escape_char[0] = test->vname_escape_char;
-       list->set.storage_name_escape_char =
-               test->storage_name_escape_char;
+       storage_escape_char[0] = test->storage_name_escape_char;
        list->set.maildir_name = test->maildir_name == NULL ? "" :
                test->maildir_name;
 }
index 5dfef37c8e71e03fb5322d25e472b0a36aa0dd38..5c7fd0ea1e7f9dae9b941f76c794c3dc4c3238bb 100644 (file)
@@ -20,7 +20,6 @@ SUBDIRS = \
        fts \
        last-login \
        lazy-expunge \
-       listescape \
        notify \
        notify-status \
        push-notification \
diff --git a/src/plugins/listescape/Makefile.am b/src/plugins/listescape/Makefile.am
deleted file mode 100644 (file)
index fa614a3..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-AM_CPPFLAGS = \
-       -I$(top_srcdir)/src/lib \
-       -I$(top_srcdir)/src/lib-mail \
-       -I$(top_srcdir)/src/lib-imap \
-       -I$(top_srcdir)/src/lib-index \
-       -I$(top_srcdir)/src/lib-storage
-
-NOPLUGIN_LDFLAGS =
-lib20_listescape_plugin_la_LDFLAGS = -module -avoid-version
-
-module_LTLIBRARIES = \
-       lib20_listescape_plugin.la
-
-lib20_listescape_plugin_la_SOURCES = \
-       listescape-plugin.c
-
-noinst_HEADERS = \
-       listescape-plugin.h
diff --git a/src/plugins/listescape/listescape-plugin.c b/src/plugins/listescape/listescape-plugin.c
deleted file mode 100644 (file)
index 89fb1f9..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) 2007-2018 Dovecot authors, see the included COPYING file */
-
-#include "lib.h"
-#include "mail-storage-hooks.h"
-#include "mailbox-list-private.h"
-#include "listescape-plugin.h"
-
-#define DEFAULT_ESCAPE_CHAR '\\'
-
-const char *listescape_plugin_version = DOVECOT_ABI_VERSION;
-
-static void listescape_mailbox_list_created(struct mailbox_list *list)
-{
-       const char *env;
-
-       if (list->set.storage_name_escape_char == '\0') {
-               env = mail_user_plugin_getenv(list->ns->user, "listescape_char");
-               list->set.storage_name_escape_char =
-                       env != NULL && *env != '\0' ?
-                       env[0] : DEFAULT_ESCAPE_CHAR;
-       }
-}
-
-static struct mail_storage_hooks listescape_mail_storage_hooks = {
-       .mailbox_list_created = listescape_mailbox_list_created
-};
-
-void listescape_plugin_init(struct module *module)
-{
-       mail_storage_hooks_add(module, &listescape_mail_storage_hooks);
-}
-
-void listescape_plugin_deinit(void)
-{
-       mail_storage_hooks_remove(&listescape_mail_storage_hooks);
-}
diff --git a/src/plugins/listescape/listescape-plugin.h b/src/plugins/listescape/listescape-plugin.h
deleted file mode 100644 (file)
index f8ff4fc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef LISTESCAPE_PLUGIN_H
-#define LISTESCAPE_PLUGIN_H
-
-void listescape_plugin_init(struct module *module);
-void listescape_plugin_deinit(void);
-
-#endif