diff options
Diffstat (limited to 'src/lib-storage/mailbox-attribute-internal.c')
-rw-r--r-- | src/lib-storage/mailbox-attribute-internal.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/lib-storage/mailbox-attribute-internal.c b/src/lib-storage/mailbox-attribute-internal.c new file mode 100644 index 0000000..d5d0265 --- /dev/null +++ b/src/lib-storage/mailbox-attribute-internal.c @@ -0,0 +1,149 @@ +/* Copyright (c) 2003-2018 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "mail-storage-private.h" +#include "mailbox-attribute-internal.h" + +/* + * Internal mailbox attributes + */ + + /* /private/specialuse (RFC 6154) */ + +static int +mailbox_attribute_specialuse_get(struct mailbox *box, + const char *key ATTR_UNUSED, + struct mail_attribute_value *value_r) +{ + const struct mailbox_settings *set = box->set; + + if (set == NULL || *set->special_use == '\0') + return 0; + + value_r->value = set->special_use; + return 1; +} + +static struct mailbox_attribute_internal +iattr_mbox_prv_special_use = { + .type = MAIL_ATTRIBUTE_TYPE_PRIVATE, + .key = MAILBOX_ATTRIBUTE_SPECIALUSE, + .rank = MAIL_ATTRIBUTE_INTERNAL_RANK_AUTHORITY, + .flags = MAIL_ATTRIBUTE_INTERNAL_FLAG_VALIDATED, + + .get = mailbox_attribute_specialuse_get +}; + +/* /private/comment, /shared/comment (RFC 5464) */ + +static int +mailbox_attribute_comment_get(struct mailbox *box, + const char *key ATTR_UNUSED, + struct mail_attribute_value *value_r) +{ + const struct mailbox_settings *set = box->set; + + if (set == NULL || *set->comment == '\0') + return 0; + value_r->value = set->comment; + return 1; +} + +static struct mailbox_attribute_internal +iattr_mbox_prv_comment = { + .type = MAIL_ATTRIBUTE_TYPE_PRIVATE, + .key = MAILBOX_ATTRIBUTE_COMMENT, + .rank = MAIL_ATTRIBUTE_INTERNAL_RANK_DEFAULT, + + .get = mailbox_attribute_comment_get +}; + +static struct mailbox_attribute_internal +iattr_mbox_shd_comment = { + .type = MAIL_ATTRIBUTE_TYPE_SHARED, + .key = MAILBOX_ATTRIBUTE_COMMENT, + .rank = MAIL_ATTRIBUTE_INTERNAL_RANK_DEFAULT, + + .get = mailbox_attribute_comment_get +}; + +/* + * Internal server attributes + */ + +/* /shared/comment (RFC 5464) */ + +static int +server_attribute_comment_get(struct mailbox *box, + const char *key ATTR_UNUSED, + struct mail_attribute_value *value_r) +{ + const struct mail_storage_settings *set = box->storage->set; + + if (*set->mail_server_comment == '\0') + return 0; + value_r->value = set->mail_server_comment; + return 1; +} + +static struct mailbox_attribute_internal +iattr_serv_shd_comment = { + .type = MAIL_ATTRIBUTE_TYPE_SHARED, + .key = MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER + MAIL_SERVER_ATTRIBUTE_COMMENT, + .rank = MAIL_ATTRIBUTE_INTERNAL_RANK_AUTHORITY, + + .get = server_attribute_comment_get +}; + +/* /shared/admin (RFC 5464) */ + +static int +server_attribute_admin_get(struct mailbox *box, + const char *key ATTR_UNUSED, + struct mail_attribute_value *value_r) +{ + const struct mail_storage_settings *set = box->storage->set; + + if (*set->mail_server_admin == '\0') + return 0; + value_r->value = set->mail_server_admin; + return 1; +} + +static struct mailbox_attribute_internal +iattr_serv_shd_admin = { + .type = MAIL_ATTRIBUTE_TYPE_SHARED, + .key = MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER + MAIL_SERVER_ATTRIBUTE_ADMIN, + .rank = MAIL_ATTRIBUTE_INTERNAL_RANK_AUTHORITY, + + .get = server_attribute_admin_get +}; + +/* + * Registry + */ + +void mailbox_attributes_internal_init(void) +{ + /* + * Internal mailbox attributes + */ + + /* /private/specialuse (RFC 6154) */ + mailbox_attribute_register_internal(&iattr_mbox_prv_special_use); + /* /private/comment (RFC 5464) */ + mailbox_attribute_register_internal(&iattr_mbox_prv_comment); + /* /shared/comment (RFC 5464) */ + mailbox_attribute_register_internal(&iattr_mbox_shd_comment); + + /* + * internal server attributes + */ + + /* /shared/comment (RFC 5464) */ + mailbox_attribute_register_internal(&iattr_serv_shd_comment); + /* /shared/admin (RFC 5464) */ + mailbox_attribute_register_internal(&iattr_serv_shd_admin); +} |