]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: METADATA: Implemented mailbox and server comment entries and the server admin...
authorStephan Bosch <stephan@rename-it.nl>
Sat, 25 Apr 2015 09:42:06 +0000 (11:42 +0200)
committerStephan Bosch <stephan@rename-it.nl>
Sat, 25 Apr 2015 09:42:06 +0000 (11:42 +0200)
src/lib-storage/mail-storage-settings.c
src/lib-storage/mail-storage-settings.h
src/lib-storage/mailbox-attribute-internal.c
src/lib-storage/mailbox-attribute-internal.h

index 635b8a95a777b87ddcaed9598a7b535f66c255d4..13e265315c6c548bbae9b78d02ec31912454fab5 100644 (file)
@@ -35,6 +35,8 @@ static const struct setting_define mail_storage_setting_defines[] = {
        DEF(SET_STR, mail_cache_fields),
        DEF(SET_STR, mail_always_cache_fields),
        DEF(SET_STR, mail_never_cache_fields),
+       DEF(SET_STR, mail_server_comment),
+       DEF(SET_STR, mail_server_admin),
        DEF(SET_UINT, mail_cache_min_mail_count),
        DEF(SET_TIME, mailbox_idle_check_interval),
        DEF(SET_UINT, mail_max_keyword_length),
@@ -73,6 +75,8 @@ const struct mail_storage_settings mail_storage_default_settings = {
        .mail_cache_fields = "flags",
        .mail_always_cache_fields = "",
        .mail_never_cache_fields = "imap.envelope",
+       .mail_server_comment = "",
+       .mail_server_admin = "",
        .mail_cache_min_mail_count = 0,
        .mailbox_idle_check_interval = 30,
        .mail_max_keyword_length = 50,
@@ -121,6 +125,7 @@ static const struct setting_define mailbox_setting_defines[] = {
        { SET_ENUM, "auto", offsetof(struct mailbox_settings, autocreate), NULL } ,
        DEF(SET_STR, special_use),
        DEF(SET_STR, driver),
+       DEF(SET_STR, comment),
 
        SETTING_DEFINE_LIST_END
 };
@@ -131,7 +136,8 @@ const struct mailbox_settings mailbox_default_settings = {
                MAILBOX_SET_AUTO_CREATE":"
                MAILBOX_SET_AUTO_SUBSCRIBE,
        .special_use = "",
-       .driver = ""
+       .driver = "",
+       .comment = ""
 };
 
 const struct setting_parser_info mailbox_setting_parser_info = {
@@ -444,6 +450,9 @@ static bool mail_storage_settings_check(void *_set, pool_t pool ATTR_UNUSED,
                return FALSE;
        }
 #endif
+
+       // FIXME: check set->mail_server_admin syntax (RFC 5464, Section 6.2.2)
+
        return TRUE;
 }
 
index f80431b0b89a60577400cbcebd0473cc503a3b18..fd23a2ab7d6387671b055e3dbddb49774ffafe89 100644 (file)
@@ -20,6 +20,8 @@ struct mail_storage_settings {
        const char *mail_cache_fields;
        const char *mail_always_cache_fields;
        const char *mail_never_cache_fields;
+       const char *mail_server_comment;
+       const char *mail_server_admin;
        unsigned int mail_cache_min_mail_count;
        unsigned int mailbox_idle_check_interval;
        unsigned int mail_max_keyword_length;
@@ -78,6 +80,7 @@ struct mailbox_settings {
        const char *autocreate;
        const char *special_use;
        const char *driver;
+       const char *comment;
 };
 
 struct mail_user_settings {
index 6c87b4b56990f252cb30b52d193f692fc4f1cf03..db109b70dfd7aba29442bfcba4b8af8994fe00cb 100644 (file)
@@ -33,6 +33,93 @@ iattr_mbox_prv_special_use = {
        .get = mailbox_attribute_specialuse_get
 };
 
+/* /private/comment, /shared/comment (RFC 5464) */
+
+static int
+mailbox_attribute_comment_get(struct mailbox_transaction_context *t,
+       const char *key ATTR_UNUSED,
+       struct mail_attribute_value *value_r)
+{
+       const struct mailbox_settings *set = t->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_transaction_context *t,
+       const char *key ATTR_UNUSED,
+       struct mail_attribute_value *value_r)
+{
+       const struct mail_storage_settings *set = t->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_transaction_context *t,
+       const char *key ATTR_UNUSED,
+       struct mail_attribute_value *value_r)
+{
+       const struct mail_storage_settings *set = t->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
  */
@@ -45,4 +132,17 @@ void mailbox_attributes_internal_init(void)
 
        /* /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);
 }
index 888780b2d1f67808c4716a82f4129f7f29240355..3c9b635d50472c997c144d32d526365d132b272c 100644 (file)
@@ -1,8 +1,13 @@
 #ifndef MAILBOX_ATTRIBUTE_INTERNAL_H
 #define MAILBOX_ATTRIBUTE_INTERNAL_H
 
+/* RFC 5464, Section 3.2.1.2: Mailbox entries */
+#define MAILBOX_ATTRIBUTE_COMMENT "comment"
 /* RFC 6154, Section 4: IMAP METADATA Entry for Special-Use Attributes */
 #define MAILBOX_ATTRIBUTE_SPECIALUSE "specialuse"
+/* RFC 5464, Section 3.2.1.1: Server entries */
+#define MAIL_SERVER_ATTRIBUTE_COMMENT "comment"
+#define MAIL_SERVER_ATTRIBUTE_ADMIN "admin"
 
 void mailbox_attributes_internal_init(void);