diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:51:24 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:51:24 +0000 |
commit | f7548d6d28c313cf80e6f3ef89aed16a19815df1 (patch) | |
tree | a3f6f2a3f247293bee59ecd28e8cd8ceb6ca064a /pigeonhole/src/lib-sieve/sieve-storage.h | |
parent | Initial commit. (diff) | |
download | dovecot-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.h | 187 |
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 |