/usr/include/dovecot/mailbox-attribute.h is in dovecot-dev 1:2.2.22-1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #ifndef MAILBOX_ATTRIBUTE_H
#define MAILBOX_ATTRIBUTE_H
struct mailbox;
struct mailbox_transaction_context;
/* RFC 5464 specifies that this is vendor/<vendor-token>/. The registered
vendor-tokens always begin with "vendor." so there's some redundancy.. */
#define MAILBOX_ATTRIBUTE_PREFIX_DOVECOT "vendor/vendor.dovecot/"
/* Prefix used for attributes reserved for Dovecot's internal use. Normal
users cannot access these in any way. */
#define MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT \
MAILBOX_ATTRIBUTE_PREFIX_DOVECOT"pvt/"
/* Server attributes are currently stored in INBOX under this private prefix.
They're under the pvt/ prefix so they won't be listed as regular INBOX
attributes, but unlike other pvt/ attributes it's actually possible to
access these attributes as regular users.
If INBOX is deleted, attributes under this prefix are preserved. */
#define MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER \
MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT"server/"
/* User can get/set all non-pvt/ attributes and also pvt/server/
(but not pvt/server/pvt/) attributes. */
#define MAILBOX_ATTRIBUTE_KEY_IS_USER_ACCESSIBLE(key) \
(strncmp(key, MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT, \
strlen(MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT)) != 0 || \
(strncmp(key, MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER, \
strlen(MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER)) == 0 && \
strncmp(key, MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT, \
strlen(MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT)) != 0))
enum mail_attribute_type {
MAIL_ATTRIBUTE_TYPE_PRIVATE,
MAIL_ATTRIBUTE_TYPE_SHARED
};
enum mail_attribute_value_flags {
MAIL_ATTRIBUTE_VALUE_FLAG_READONLY = 0x01,
MAIL_ATTRIBUTE_VALUE_FLAG_INT_STREAMS = 0x02
};
struct mail_attribute_value {
/* mailbox_attribute_set() can set either value or value_stream.
mailbox_attribute_get() returns only values, but
mailbox_attribute_get_stream() may return either value or
value_stream. The caller must unreference the returned streams. */
const char *value;
struct istream *value_stream;
/* Last time the attribute was changed (0 = unknown). This may be
returned even for values that don't exist anymore. */
time_t last_change;
enum mail_attribute_value_flags flags;
};
/*
* Internal attribute
*/
enum mail_attribute_internal_rank {
/* The internal attribute serves only as a source for a default value
when the normal mailbox attribute storage has no entry for this
attribute. Otherwise it is ignored. The `set' function is called
only as a notification, not with the intention to store the value.
The value is always assigned to the normal mailbox attribute storage.
*/
MAIL_ATTRIBUTE_INTERNAL_RANK_DEFAULT = 0,
/* The internal attribute serves as the main source of the attribute
value. If the `get' function returns 0, the normal mailbox attribute
storage is attempted to obtain the value. The `set' function is
called only as a notification, not with the intention to store the
value. The value is assigned to the normal mailbox attribute storage.
*/
MAIL_ATTRIBUTE_INTERNAL_RANK_OVERRIDE,
/* The value for the internal attribute is never read from the normal
mailbox attribute storage. If the `set' function is NULL, the
attribute is read-only. If it is not NULL it is used to assign the
attribute value; it is not assigned to the normal mailbox attribute
storage.
*/
MAIL_ATTRIBUTE_INTERNAL_RANK_AUTHORITY
};
enum mail_attribute_internal_flags {
/* Apply this attribute to the given key and its children. */
MAIL_ATTRIBUTE_INTERNAL_FLAG_CHILDREN = 0x01
};
struct mailbox_attribute_internal {
enum mail_attribute_type type;
const char *key;
enum mail_attribute_internal_rank rank;
enum mail_attribute_internal_flags flags;
/* Get the value of this internal attribute */
int (*get)(struct mailbox_transaction_context *t, const char *key,
struct mail_attribute_value *value_r);
/* Set the value of this internal attribute */
int (*set)(struct mailbox_transaction_context *t, const char *key,
const struct mail_attribute_value *value);
};
void mailbox_attribute_register_internal(
const struct mailbox_attribute_internal *iattr);
void mailbox_attribute_register_internals(
const struct mailbox_attribute_internal *iattrs, unsigned int count);
/*
* Attribute API
*/
/* Set mailbox attribute key to value. The key should be compatible with
IMAP METADATA, so for Dovecot-specific keys use
MAILBOX_ATTRIBUTE_PREFIX_DOVECOT. */
int mailbox_attribute_set(struct mailbox_transaction_context *t,
enum mail_attribute_type type, const char *key,
const struct mail_attribute_value *value);
/* Delete mailbox attribute key. This is just a wrapper to
mailbox_attribute_set() with value->value=NULL. */
int mailbox_attribute_unset(struct mailbox_transaction_context *t,
enum mail_attribute_type type, const char *key);
/* 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_transaction_context *t,
enum mail_attribute_type type, const char *key,
struct mail_attribute_value *value_r);
/* Same as mailbox_attribute_get(), but the returned value may be either an
input stream or a string. */
int mailbox_attribute_get_stream(struct mailbox_transaction_context *t,
enum mail_attribute_type type, 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. */
struct mailbox_attribute_iter *
mailbox_attribute_iter_init(struct mailbox *box, enum mail_attribute_type type,
const char *prefix);
/* Returns the attribute key or NULL if there are no more attributes. */
const char *mailbox_attribute_iter_next(struct mailbox_attribute_iter *iter);
int mailbox_attribute_iter_deinit(struct mailbox_attribute_iter **iter);
#endif
|