summaryrefslogtreecommitdiffstats
path: root/pigeonhole/src/lib-sieve/sieve-storage.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:51:24 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:51:24 +0000
commitf7548d6d28c313cf80e6f3ef89aed16a19815df1 (patch)
treea3f6f2a3f247293bee59ecd28e8cd8ceb6ca064a /pigeonhole/src/lib-sieve/sieve-storage.h
parentInitial commit. (diff)
downloaddovecot-f7548d6d28c313cf80e6f3ef89aed16a19815df1.tar.xz
dovecot-f7548d6d28c313cf80e6f3ef89aed16a19815df1.zip
Adding upstream version 1:2.3.19.1+dfsg1.upstream/1%2.3.19.1+dfsg1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'pigeonhole/src/lib-sieve/sieve-storage.h')
-rw-r--r--pigeonhole/src/lib-sieve/sieve-storage.h187
1 files changed, 187 insertions, 0 deletions
diff --git a/pigeonhole/src/lib-sieve/sieve-storage.h b/pigeonhole/src/lib-sieve/sieve-storage.h
new file mode 100644
index 0000000..125a86e
--- /dev/null
+++ b/pigeonhole/src/lib-sieve/sieve-storage.h
@@ -0,0 +1,187 @@
+#ifndef SIEVE_STORAGE_H
+#define SIEVE_STORAGE_H
+
+#define MAILBOX_ATTRIBUTE_PREFIX_SIEVE \
+ MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER"sieve/"
+#define MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES \
+ MAILBOX_ATTRIBUTE_PREFIX_SIEVE"files/"
+#define MAILBOX_ATTRIBUTE_SIEVE_DEFAULT \
+ MAILBOX_ATTRIBUTE_PREFIX_SIEVE"default"
+
+#define MAILBOX_ATTRIBUTE_SIEVE_DEFAULT_LINK 'L'
+#define MAILBOX_ATTRIBUTE_SIEVE_DEFAULT_SCRIPT 'S'
+
+/*
+ * Storage object
+ */
+
+enum sieve_storage_flags {
+ /* Storage is opened for read/write access (e.g. ManageSieve) */
+ SIEVE_STORAGE_FLAG_READWRITE = 0x01,
+ /* This storage is used for synchronization (and not normal ManageSieve)
+ */
+ SIEVE_STORAGE_FLAG_SYNCHRONIZING = 0x02
+};
+
+struct sieve_storage;
+
+struct sieve_storage *
+sieve_storage_create(struct sieve_instance *svinst, const char *location,
+ enum sieve_storage_flags flags, enum sieve_error *error_r)
+ ATTR_NULL(4);
+struct sieve_storage *
+sieve_storage_create_main(struct sieve_instance *svinst, struct mail_user *user,
+ enum sieve_storage_flags flags,
+ enum sieve_error *error_r) ATTR_NULL(4);
+
+void sieve_storage_ref(struct sieve_storage *storage);
+void sieve_storage_unref(struct sieve_storage **_storage);
+
+/*
+ * Script access
+ */
+
+struct sieve_script *
+sieve_storage_get_script(struct sieve_storage *storage, const char *name,
+ enum sieve_error *error_r) ATTR_NULL(3);
+struct sieve_script *
+sieve_storage_open_script(struct sieve_storage *storage, const char *name,
+ enum sieve_error *error_r) ATTR_NULL(3);
+int sieve_storage_check_script(struct sieve_storage *storage, const char *name,
+ enum sieve_error *error_r) ATTR_NULL(3);
+
+/*
+ * Script sequence
+ */
+
+struct sieve_script_sequence *
+sieve_storage_get_script_sequence(struct sieve_storage *storage,
+ enum sieve_error *error_r);
+
+/*
+ * Active script
+ */
+
+int sieve_storage_active_script_get_name(struct sieve_storage *storage,
+ const char **name_r);
+
+struct sieve_script *
+sieve_storage_active_script_open(struct sieve_storage *storage,
+ enum sieve_error *error_r) ATTR_NULL(2);
+
+int sieve_storage_active_script_get_last_change(struct sieve_storage *storage,
+ time_t *last_change_r);
+
+/*
+ * Listing scripts in storage
+ */
+
+struct sieve_storage_list_context;
+
+/* Create a context for listing the scripts in the storage */
+struct sieve_storage_list_context *
+sieve_storage_list_init(struct sieve_storage *storage);
+/* Get the next script in the storage. */
+const char *sieve_storage_list_next(struct sieve_storage_list_context *lctx,
+ bool *active_r) ATTR_NULL(2);
+/* Destroy the listing context */
+int sieve_storage_list_deinit(struct sieve_storage_list_context **lctx);
+
+/*
+ * Saving scripts in storage
+ */
+
+struct sieve_storage_save_context;
+
+struct sieve_storage_save_context *
+sieve_storage_save_init(struct sieve_storage *storage, const char *scriptname,
+ struct istream *input);
+
+int sieve_storage_save_continue(struct sieve_storage_save_context *sctx);
+
+int sieve_storage_save_finish(struct sieve_storage_save_context *sctx);
+
+struct sieve_script *
+sieve_storage_save_get_tempscript(struct sieve_storage_save_context *sctx);
+
+bool sieve_storage_save_will_activate(struct sieve_storage_save_context *sctx);
+
+void sieve_storage_save_set_mtime(struct sieve_storage_save_context *sctx,
+ time_t mtime);
+
+void sieve_storage_save_cancel(struct sieve_storage_save_context **sctx);
+
+int sieve_storage_save_commit(struct sieve_storage_save_context **sctx);
+
+int sieve_storage_save_as(struct sieve_storage *storage, struct istream *input,
+ const char *name);
+
+/* Saves input directly as a regular file at the active script path.
+ * This is needed for the doveadm-sieve plugin.
+ */
+int sieve_storage_save_as_active(struct sieve_storage *storage,
+ struct istream *input, time_t mtime);
+
+/*
+ * Management
+ */
+
+int sieve_storage_deactivate(struct sieve_storage *storage, time_t mtime);
+
+/*
+ * Storage quota
+ */
+
+enum sieve_storage_quota {
+ SIEVE_STORAGE_QUOTA_NONE,
+ SIEVE_STORAGE_QUOTA_MAXSIZE,
+ SIEVE_STORAGE_QUOTA_MAXSCRIPTS,
+ SIEVE_STORAGE_QUOTA_MAXSTORAGE
+};
+
+bool sieve_storage_quota_validsize(struct sieve_storage *storage, size_t size,
+ uint64_t *limit_r);
+
+uint64_t sieve_storage_quota_max_script_size(struct sieve_storage *storage);
+
+int sieve_storage_quota_havespace(struct sieve_storage *storage,
+ const char *scriptname, size_t size,
+ enum sieve_storage_quota *quota_r,
+ uint64_t *limit_r);
+
+/*
+ * Properties
+ */
+
+const char *sieve_storage_location(const struct sieve_storage *storage)
+ ATTR_PURE;
+bool sieve_storage_is_default(const struct sieve_storage *storage) ATTR_PURE;
+
+int sieve_storage_is_singular(struct sieve_storage *storage);
+
+/*
+ * Error handling
+ */
+
+void sieve_storage_clear_error(struct sieve_storage *storage);
+
+void sieve_storage_set_error(struct sieve_storage *storage,
+ enum sieve_error error, const char *fmt, ...)
+ ATTR_FORMAT(3, 4);
+void sieve_storage_set_critical(struct sieve_storage *storage,
+ const char *fmt, ...) ATTR_FORMAT(2, 3);
+
+const char *sieve_storage_get_last_error(struct sieve_storage *storage,
+ enum sieve_error *error_r)
+ ATTR_NULL(2);
+
+/*
+ *
+ */
+
+int sieve_storage_get_last_change(struct sieve_storage *storage,
+ time_t *last_change_r);
+void sieve_storage_set_modified(struct sieve_storage *storage,
+ time_t mtime);
+
+#endif