dovecot-2.2: lib-storage: Changed mailbox_attribute_get() to ret...

dovecot at dovecot.org dovecot at dovecot.org
Tue Feb 5 03:53:52 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/03a0af22100d
changeset: 15741:03a0af22100d
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Feb 05 03:53:40 2013 +0200
description:
lib-storage: Changed mailbox_attribute_get() to return a struct for value.
This allows returning flags for the values in future. Mainly readonly-flag
for internal attributes and when restricted by ACL plugin.

diffstat:

 src/lib-imap-urlauth/imap-urlauth-backend.c |   4 +++-
 src/lib-storage/index/index-attribute.c     |  11 ++++++-----
 src/lib-storage/index/index-storage.h       |   4 ++--
 src/lib-storage/mail-storage-private.h      |   2 +-
 src/lib-storage/mail-storage.c              |   2 +-
 src/lib-storage/mail-storage.h              |  10 +++++++++-
 6 files changed, 22 insertions(+), 11 deletions(-)

diffs (127 lines):

diff -r 397253f15f36 -r 03a0af22100d src/lib-imap-urlauth/imap-urlauth-backend.c
--- a/src/lib-imap-urlauth/imap-urlauth-backend.c	Tue Feb 05 03:37:47 2013 +0200
+++ b/src/lib-imap-urlauth/imap-urlauth-backend.c	Tue Feb 05 03:53:40 2013 +0200
@@ -18,6 +18,7 @@
 					 enum mail_error *error_code_r)
 {
 	struct mail_user *user = mail_storage_get_user(mailbox_get_storage(box));
+	struct mail_attribute_value urlauth_key;
 	const char *mailbox_key_hex = NULL;
 	buffer_t key_buf;
 	int ret;
@@ -26,7 +27,7 @@
 	*error_code_r = MAIL_ERROR_TEMP;
 
 	ret = mailbox_attribute_get(box, MAIL_ATTRIBUTE_TYPE_PRIVATE,
-				    IMAP_URLAUTH_KEY, &mailbox_key_hex);
+				    IMAP_URLAUTH_KEY, &urlauth_key);
 	if (ret < 0)
 		return -1;
 
@@ -55,6 +56,7 @@
 		/* read existing key */
 		buffer_create_from_data(&key_buf, mailbox_key_r,
 					IMAP_URLAUTH_KEY_LEN);
+		mailbox_key_hex = urlauth_key.value;
 		if (strlen(mailbox_key_hex) != 2*IMAP_URLAUTH_KEY_LEN ||
 		    hex_to_binary(mailbox_key_hex, &key_buf) < 0 ||
 		    key_buf.used != IMAP_URLAUTH_KEY_LEN) {
diff -r 397253f15f36 -r 03a0af22100d src/lib-storage/index/index-attribute.c
--- a/src/lib-storage/index/index-attribute.c	Tue Feb 05 03:37:47 2013 +0200
+++ b/src/lib-storage/index/index-attribute.c	Tue Feb 05 03:53:40 2013 +0200
@@ -174,24 +174,25 @@
 }
 
 int index_storage_attribute_get(struct mailbox *box,
-				enum mail_attribute_type type,
-				const char *key, const char **value_r)
+				enum mail_attribute_type type, const char *key,
+				struct mail_attribute_value *value_r)
 {
 	struct dict *dict;
 	const char *mailbox_prefix;
 	int ret;
 
+	memset(value_r, 0, sizeof(*value_r));
+
 	if (index_storage_get_dict(box, type, &dict, &mailbox_prefix) < 0)
 		return -1;
 
 	ret = dict_lookup(dict, pool_datastack_create(),
-			  key_get_prefixed(type, mailbox_prefix, key), value_r);
+			  key_get_prefixed(type, mailbox_prefix, key),
+			  &value_r->value);
 	if (ret < 0) {
 		mail_storage_set_internal_error(box->storage);
 		return -1;
 	}
-	if (ret == 0)
-		*value_r = NULL;
 	return ret;
 }
 
diff -r 397253f15f36 -r 03a0af22100d src/lib-storage/index/index-storage.h
--- a/src/lib-storage/index/index-storage.h	Tue Feb 05 03:37:47 2013 +0200
+++ b/src/lib-storage/index/index-storage.h	Tue Feb 05 03:53:40 2013 +0200
@@ -120,8 +120,8 @@
 				enum mail_attribute_type type,
 				const char *key, const char *value);
 int index_storage_attribute_get(struct mailbox *box,
-				enum mail_attribute_type type,
-				const char *key, const char **value_r);
+				enum mail_attribute_type type, const char *key,
+				struct mail_attribute_value *value_r);
 struct mailbox_attribute_iter *
 index_storage_attribute_iter_init(struct mailbox *box,
 				  enum mail_attribute_type type,
diff -r 397253f15f36 -r 03a0af22100d src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h	Tue Feb 05 03:37:47 2013 +0200
+++ b/src/lib-storage/mail-storage-private.h	Tue Feb 05 03:53:40 2013 +0200
@@ -154,7 +154,7 @@
 	int (*attribute_set)(struct mailbox *box, enum mail_attribute_type type,
 			     const char *key, const char *value);
 	int (*attribute_get)(struct mailbox *box, enum mail_attribute_type type,
-			     const char *key, const char **value_r);
+			     const char *key, struct mail_attribute_value *value_r);
 	struct mailbox_attribute_iter *
 		(*attribute_iter_init)(struct mailbox *box,
 				       enum mail_attribute_type type,
diff -r 397253f15f36 -r 03a0af22100d src/lib-storage/mail-storage.c
--- a/src/lib-storage/mail-storage.c	Tue Feb 05 03:37:47 2013 +0200
+++ b/src/lib-storage/mail-storage.c	Tue Feb 05 03:53:40 2013 +0200
@@ -1515,7 +1515,7 @@
 }
 
 int mailbox_attribute_get(struct mailbox *box, enum mail_attribute_type type,
-			  const char *key, const char **value_r)
+			  const char *key, struct mail_attribute_value *value_r)
 {
 	return box->v.attribute_get(box, type, key, value_r);
 }
diff -r 397253f15f36 -r 03a0af22100d src/lib-storage/mail-storage.h
--- a/src/lib-storage/mail-storage.h	Tue Feb 05 03:37:47 2013 +0200
+++ b/src/lib-storage/mail-storage.h	Tue Feb 05 03:53:40 2013 +0200
@@ -203,6 +203,14 @@
 	MAIL_ATTRIBUTE_TYPE_PRIVATE,
 	MAIL_ATTRIBUTE_TYPE_SHARED
 };
+enum mail_attribute_value_flags {
+	MAIL_ATTRIBUTE_VALUE_FLAG_READONLY	= 0x01
+};
+
+struct mail_attribute_value {
+	const char *value;
+	enum mail_attribute_value_flags flags;
+};
 
 struct message_part;
 struct mail_namespace;
@@ -527,7 +535,7 @@
 /* Returns value for mailbox attribute key. Returns 1 if value was returned,
    0 if value wasn't found (set to NULL), -1 if error */
 int mailbox_attribute_get(struct mailbox *box, enum mail_attribute_type type,
-			  const char *key, const char **value_r);
+			  const char *key, struct mail_attribute_value *value_r);
 
 /* Iterate through mailbox attributes of the given type. The prefix can be used
    to restrict what attributes are returned. */


More information about the dovecot-cvs mailing list