[dovecot-cvs] dovecot/src/lib-imap imap-base-subject.c,1.1,1.2 imap-bodystructure.c,1.26,1.27 imap-envelope.c,1.19,1.20 imap-envelope.h,1.6,1.7 imap-message-cache.c,1.30,1.31 imap-parser.c,1.29,1.30 imap-quote.c,1.3,1.4 imap-quote.h,1.1,1.2 imap-util.h,1.3,1.4
cras at procontrol.fi
cras at procontrol.fi
Sat Jan 4 19:26:32 EET 2003
Update of /home/cvs/dovecot/src/lib-imap
In directory danu:/tmp/cvs-serv386/lib-imap
Modified Files:
imap-base-subject.c imap-bodystructure.c imap-envelope.c
imap-envelope.h imap-message-cache.c imap-parser.c
imap-quote.c imap-quote.h imap-util.h
Log Message:
Use unsigned char* when accessing non-NUL terminating strings. Compiler
warnings would then notify about accidentally passing them to functions which
require them NUL-terminated. Changed a few functions to use void* to avoid
unneeded casting.
Index: imap-base-subject.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-base-subject.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- imap-base-subject.c 17 Dec 2002 04:33:38 -0000 1.1
+++ imap-base-subject.c 4 Jan 2003 17:26:30 -0000 1.2
@@ -224,7 +224,8 @@
/* (1) Convert any RFC 2047 encoded-words in the subject to
UTF-8. Convert all tabs and continuations to space.
Convert all multiple spaces to a single space. */
- message_header_decode(subject, subject_len, header_decode, buf);
+ message_header_decode((const unsigned char *) subject, subject_len,
+ header_decode, buf);
buffer_append_c(buf, '\0');
pack_whitespace(buf);
Index: imap-bodystructure.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-bodystructure.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- imap-bodystructure.c 4 Jan 2003 13:22:30 -0000 1.26
+++ imap-bodystructure.c 4 Jan 2003 17:26:30 -0000 1.27
@@ -33,7 +33,7 @@
static void part_write_bodystructure(MessagePart *part, String *str,
int extended);
-static void parse_content_type(const char *value, size_t value_len,
+static void parse_content_type(const unsigned char *value, size_t value_len,
void *context)
{
MessagePartBodyData *data = context;
@@ -57,8 +57,8 @@
}
}
-static void parse_save_params_list(const char *name, size_t name_len,
- const char *value, size_t value_len,
+static void parse_save_params_list(const unsigned char *name, size_t name_len,
+ const unsigned char *value, size_t value_len,
int value_quoted __attr_unused__,
void *context)
{
@@ -76,8 +76,8 @@
str_append_c(data->str, '"');
}
-static void parse_content_transfer_encoding(const char *value, size_t value_len,
- void *context)
+static void parse_content_transfer_encoding(const unsigned char *value,
+ size_t value_len, void *context)
{
MessagePartBodyData *data = context;
@@ -85,8 +85,8 @@
imap_quote_value(data->pool, value, value_len);
}
-static void parse_content_disposition(const char *value, size_t value_len,
- void *context)
+static void parse_content_disposition(const unsigned char *value,
+ size_t value_len, void *context)
{
MessagePartBodyData *data = context;
@@ -94,7 +94,7 @@
imap_quote_value(data->pool, value, value_len);
}
-static void parse_content_language(const char *value, size_t value_len,
+static void parse_content_language(const unsigned char *value, size_t value_len,
MessagePartBodyData *data)
{
Rfc822TokenizeContext *ctx;
@@ -149,8 +149,8 @@
}
static void parse_header(MessagePart *part,
- const char *name, size_t name_len,
- const char *value, size_t value_len,
+ const unsigned char *name, size_t name_len,
+ const unsigned char *value, size_t value_len,
void *context)
{
Pool pool = context;
@@ -160,7 +160,7 @@
parent_rfc822 = part->parent != NULL &&
(part->parent->flags & MESSAGE_PART_FLAG_MESSAGE_RFC822);
if (!parent_rfc822 && (name_len <= 8 ||
- strncasecmp(name, "Content-", 8) != 0))
+ memcasecmp(name, "Content-", 8) != 0))
return;
if (part->context == NULL) {
@@ -173,48 +173,74 @@
t_push();
- /* fix the name to be \0-terminated */
- name = t_strndup(name, name_len);
+ switch (name_len) {
+ case 10:
+ if (memcasecmp(name, "Content-ID", 10) == 0 &&
+ part_data->content_id == NULL) {
+ part_data->content_id =
+ imap_quote_value(pool, value, value_len);
+ }
+ break;
+
+ case 11:
+ if (memcasecmp(name, "Content-MD5", 11) == 0 &&
+ part_data->content_md5 == NULL) {
+ part_data->content_md5 =
+ imap_quote_value(pool, value, value_len);
+ }
+ break;
+
+ case 12:
+ if (memcasecmp(name, "Content-Type", 12) != 0 ||
+ part_data->content_type != NULL)
+ break;
- if (strcasecmp(name, "Content-Type") == 0 &&
- part_data->content_type == NULL) {
part_data->str = t_str_new(256);
message_content_parse_header(value, value_len,
parse_content_type,
parse_save_params_list, part_data);
part_data->content_type_params =
p_strdup_empty(pool, str_c(part_data->str));
- } else if (strcasecmp(name, "Content-Transfer-Encoding") == 0 &&
- part_data->content_transfer_encoding == NULL) {
+ break;
+
+ case 16:
+ if (memcasecmp(name, "Content-Language", 16) == 0)
+ parse_content_language(value, value_len, part_data);
+ break;
+
+ case 19:
+ if (memcasecmp(name, "Content-Description", 19) == 0 &&
+ part_data->content_description == NULL) {
+ part_data->content_description =
+ imap_quote_value(pool, value, value_len);
+ }
+ if (memcasecmp(name, "Content-Disposition", 19) == 0 &&
+ part_data->content_disposition_params == NULL) {
+ part_data->str = t_str_new(256);
+ message_content_parse_header(value, value_len,
+ parse_content_disposition,
+ parse_save_params_list,
+ part_data);
+ part_data->content_disposition_params =
+ p_strdup_empty(pool, str_c(part_data->str));
+ }
+ break;
+
+ case 25:
+ if (memcasecmp(name, "Content-Transfer-Encoding", 25) != 0 ||
+ part_data->content_transfer_encoding != NULL)
+ break;
+
message_content_parse_header(value, value_len,
parse_content_transfer_encoding,
NULL, part_data);
- } else if (strcasecmp(name, "Content-ID") == 0 &&
- part_data->content_id == NULL) {
- part_data->content_id =
- imap_quote_value(pool, value, value_len);
- } else if (strcasecmp(name, "Content-Description") == 0 &&
- part_data->content_description == NULL) {
- part_data->content_description =
- imap_quote_value(pool, value, value_len);
- } else if (strcasecmp(name, "Content-Disposition") == 0 &&
- part_data->content_disposition_params == NULL) {
- part_data->str = t_str_new(256);
- message_content_parse_header(value, value_len,
- parse_content_disposition,
- parse_save_params_list, part_data);
- part_data->content_disposition_params =
- p_strdup_empty(pool, str_c(part_data->str));
- } else if (strcasecmp(name, "Content-Language") == 0) {
- parse_content_language(value, value_len, part_data);
- } else if (strcasecmp(name, "Content-MD5") == 0 &&
- part_data->content_md5 == NULL) {
- part_data->content_md5 =
- imap_quote_value(pool, value, value_len);
- } else if (parent_rfc822) {
+ break;
+ }
+
+ if (parent_rfc822) {
/* message/rfc822, we need the envelope */
imap_envelope_parse_header(pool, &part_data->envelope,
- name, value, value_len);
+ name, name_len, value, value_len);
}
t_pop();
}
Index: imap-envelope.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-envelope.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- imap-envelope.c 2 Jan 2003 09:06:33 -0000 1.19
+++ imap-envelope.c 4 Jan 2003 17:26:30 -0000 1.20
@@ -18,15 +18,15 @@
char *in_reply_to, *message_id;
};
-static Rfc822Address *parse_address(Pool pool, const char *value,
+static Rfc822Address *parse_address(Pool pool, const unsigned char *value,
size_t value_len)
{
- return rfc822_address_parse(pool, t_strndup(value, value_len));
+ return rfc822_address_parse(pool, value, value_len);
}
void imap_envelope_parse_header(Pool pool, MessagePartEnvelopeData **data,
- const char *name,
- const char *value, size_t value_len)
+ const unsigned char *name, size_t name_len,
+ const unsigned char *value, size_t value_len)
{
if (*data == NULL) {
*data = p_new(pool, MessagePartEnvelopeData, 1);
@@ -35,28 +35,60 @@
t_push();
- if (strcasecmp(name, "Date") == 0 && (*data)->date == NULL)
- (*data)->date = imap_quote_value(pool, value, value_len);
- else if (strcasecmp(name, "Subject") == 0 && (*data)->subject == NULL)
- (*data)->subject = imap_quote_value(pool, value, value_len);
- else if (strcasecmp(name, "From") == 0 && (*data)->from == NULL)
- (*data)->from = parse_address(pool, value, value_len);
- else if (strcasecmp(name, "Sender") == 0 && (*data)->sender == NULL)
- (*data)->sender = parse_address(pool, value, value_len);
- else if (strcasecmp(name, "Reply-To") == 0 && (*data)->reply_to == NULL)
- (*data)->reply_to = parse_address(pool, value, value_len);
- else if (strcasecmp(name, "To") == 0 && (*data)->to == NULL)
- (*data)->to = parse_address(pool, value, value_len);
- else if (strcasecmp(name, "Cc") == 0 && (*data)->cc == NULL)
- (*data)->cc = parse_address(pool, value, value_len);
- else if (strcasecmp(name, "Bcc") == 0 && (*data)->bcc == NULL)
- (*data)->bcc = parse_address(pool, value, value_len);
- else if (strcasecmp(name, "In-Reply-To") == 0 &&
- (*data)->in_reply_to == NULL)
- (*data)->in_reply_to = imap_quote_value(pool, value, value_len);
- else if (strcasecmp(name, "Message-Id") == 0 &&
- (*data)->message_id == NULL)
- (*data)->message_id = imap_quote_value(pool, value, value_len);
+ switch (name_len) {
+ case 2:
+ if (memcasecmp(name, "To", 2) == 0 && (*data)->to == NULL)
+ (*data)->to = parse_address(pool, value, value_len);
+ else if (memcasecmp(name, "Cc", 2) == 0 && (*data)->cc == NULL)
+ (*data)->cc = parse_address(pool, value, value_len);
+ break;
+ case 3:
+ if (memcasecmp(name, "Bcc", 3) == 0 && (*data)->bcc == NULL)
+ (*data)->bcc = parse_address(pool, value, value_len);
+ break;
+ case 4:
+ if (memcasecmp(name, "From", 4) == 0 && (*data)->from == NULL)
+ (*data)->from = parse_address(pool, value, value_len);
+ else if (memcasecmp(name, "Date", 4) == 0 &&
+ (*data)->date == NULL) {
+ (*data)->date = imap_quote_value(pool, value,
+ value_len);
+ }
+ break;
+ case 6:
+ if (memcasecmp(name, "Sender", 6) == 0 &&
+ (*data)->sender == NULL)
+ (*data)->sender = parse_address(pool, value, value_len);
+ break;
+ case 7:
+ if (memcasecmp(name, "Subject", 7) == 0 &&
+ (*data)->subject == NULL) {
+ (*data)->subject = imap_quote_value(pool, value,
+ value_len);
+ }
+ break;
+ case 8:
+ if (memcasecmp(name, "Reply-To", 8) == 0 &&
+ (*data)->reply_to == NULL) {
+ (*data)->reply_to = parse_address(pool, value,
+ value_len);
+ }
+ break;
+ case 10:
+ if (memcasecmp(name, "Message-Id", 10) == 0 &&
+ (*data)->message_id == NULL) {
+ (*data)->message_id = imap_quote_value(pool, value,
+ value_len);
+ }
+ break;
+ case 11:
+ if (memcasecmp(name, "In-Reply-To", 11) == 0 &&
+ (*data)->in_reply_to == NULL) {
+ (*data)->in_reply_to = imap_quote_value(pool, value,
+ value_len);
+ }
+ break;
+ }
t_pop();
}
Index: imap-envelope.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-envelope.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- imap-envelope.h 2 Jan 2003 09:06:33 -0000 1.6
+++ imap-envelope.h 4 Jan 2003 17:26:30 -0000 1.7
@@ -26,8 +26,8 @@
/* Update envelope data based from given header field */
void imap_envelope_parse_header(Pool pool, MessagePartEnvelopeData **data,
- const char *name,
- const char *value, size_t value_len);
+ const unsigned char *name, size_t name_len,
+ const unsigned char *value, size_t value_len);
/* Write envelope to given string */
void imap_envelope_write_part_data(MessagePartEnvelopeData *data,
Index: imap-message-cache.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-message-cache.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- imap-message-cache.c 27 Dec 2002 13:05:53 -0000 1.30
+++ imap-message-cache.c 4 Jan 2003 17:26:30 -0000 1.31
@@ -147,8 +147,8 @@
}
static void parse_envelope_header(MessagePart *part,
- const char *name, size_t name_len,
- const char *value, size_t value_len,
+ const unsigned char *name, size_t name_len,
+ const unsigned char *value, size_t value_len,
void *context)
{
CachedMessage *msg = context;
@@ -156,8 +156,7 @@
if (part == NULL || part->parent == NULL) {
/* parse envelope headers if we're at the root message part */
imap_envelope_parse_header(msg->pool, &msg->envelope,
- t_strndup(name, name_len),
- value, value_len);
+ name, name_len, value, value_len);
}
}
Index: imap-parser.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-parser.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- imap-parser.c 3 Jan 2003 15:57:12 -0000 1.29
+++ imap-parser.c 4 Jan 2003 17:26:30 -0000 1.30
@@ -113,7 +113,8 @@
}
/* skip over everything parsed so far, plus the following whitespace */
-static int imap_parser_skip_to_next(ImapParser *parser, const char **data,
+static int imap_parser_skip_to_next(ImapParser *parser,
+ const unsigned char **data,
size_t *data_size)
{
size_t i;
@@ -187,8 +188,8 @@
return TRUE;
}
-static void imap_parser_save_arg(ImapParser *parser, const char *data,
- size_t lastpos)
+static void imap_parser_save_arg(ImapParser *parser, const unsigned char *data,
+ size_t size)
{
ImapArg *arg;
@@ -196,21 +197,21 @@
switch (parser->cur_type) {
case ARG_PARSE_ATOM:
- if (lastpos == 3 && strncmp(data, "NIL", 3) == 0) {
+ if (size == 3 && memcmp(data, "NIL", 3) == 0) {
/* NIL argument */
arg->type = IMAP_ARG_NIL;
} else {
/* simply save the string */
arg->type = IMAP_ARG_ATOM;
- arg->_data.str = p_strndup(parser->pool, data, lastpos);
+ arg->_data.str = p_strndup(parser->pool, data, size);
}
break;
case ARG_PARSE_STRING:
/* data is quoted and may contain escapes. */
- i_assert(lastpos > 0);
+ i_assert(size > 0);
arg->type = IMAP_ARG_STRING;
- arg->_data.str = p_strndup(parser->pool, data+1, lastpos-1);
+ arg->_data.str = p_strndup(parser->pool, data+1, size-1);
/* remove the escapes */
if (parser->str_first_escape >= 0 &&
@@ -224,7 +225,7 @@
if ((parser->flags & IMAP_PARSE_FLAG_LITERAL_SIZE) == 0) {
/* simply save the string */
arg->type = IMAP_ARG_STRING;
- arg->_data.str = p_strndup(parser->pool, data, lastpos);
+ arg->_data.str = p_strndup(parser->pool, data, size);
} else {
/* save literal size */
arg->type = IMAP_ARG_LITERAL_SIZE;
@@ -238,7 +239,7 @@
parser->cur_type = ARG_PARSE_NONE;
}
-static int imap_parser_read_atom(ImapParser *parser, const char *data,
+static int imap_parser_read_atom(ImapParser *parser, const unsigned char *data,
size_t data_size)
{
size_t i;
@@ -275,8 +276,8 @@
return parser->cur_type == ARG_PARSE_NONE;
}
-static int imap_parser_read_string(ImapParser *parser, const char *data,
- size_t data_size)
+static int imap_parser_read_string(ImapParser *parser,
+ const unsigned char *data, size_t data_size)
{
size_t i;
@@ -339,7 +340,8 @@
return TRUE;
}
-static int imap_parser_read_literal(ImapParser *parser, const char *data,
+static int imap_parser_read_literal(ImapParser *parser,
+ const unsigned char *data,
size_t data_size)
{
size_t i, prev_size;
@@ -370,7 +372,8 @@
return FALSE;
}
-static int imap_parser_read_literal_data(ImapParser *parser, const char *data,
+static int imap_parser_read_literal_data(ImapParser *parser,
+ const unsigned char *data,
size_t data_size)
{
if (parser->literal_skip_crlf) {
@@ -419,10 +422,10 @@
an argument inside a list was processed. */
static int imap_parser_read_arg(ImapParser *parser)
{
- const char *data;
+ const unsigned char *data;
size_t data_size;
- data = (const char *) i_stream_get_data(parser->input, &data_size);
+ data = i_stream_get_data(parser->input, &data_size);
if (data_size == 0)
return FALSE;
@@ -485,8 +488,7 @@
/* pass through to parsing data. since input->skip was
modified, we need to get the data start position again. */
- data = (const char *) i_stream_get_data(parser->input,
- &data_size);
+ data = i_stream_get_data(parser->input, &data_size);
/* fall through */
case ARG_PARSE_LITERAL_DATA:
@@ -551,10 +553,10 @@
const char *imap_parser_read_word(ImapParser *parser)
{
- const char *data;
+ const unsigned char *data;
size_t i, data_size;
- data = (const char *) i_stream_get_data(parser->input, &data_size);
+ data = i_stream_get_data(parser->input, &data_size);
for (i = 0; i < data_size; i++) {
if (data[i] == ' ' || data[i] == '\r' || data[i] == '\n')
@@ -571,10 +573,10 @@
const char *imap_parser_read_line(ImapParser *parser)
{
- const char *data;
+ const unsigned char *data;
size_t i, data_size;
- data = (const char *) i_stream_get_data(parser->input, &data_size);
+ data = i_stream_get_data(parser->input, &data_size);
for (i = 0; i < data_size; i++) {
if (data[i] == '\r' || data[i] == '\n')
Index: imap-quote.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-quote.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- imap-quote.c 21 Dec 2002 22:02:58 -0000 1.3
+++ imap-quote.c 4 Jan 2003 17:26:30 -0000 1.4
@@ -13,7 +13,7 @@
#define IS_BREAK_OR_CRLF_CHAR(c) \
(IS_BREAK_CHAR(c) || (c) == '\r' || (c) == '\n')
-static size_t next_token_quoted(const char *value, size_t len,
+static size_t next_token_quoted(const unsigned char *value, size_t len,
int *need_qp, int *quoted)
{
size_t i;
@@ -22,7 +22,7 @@
*quoted = TRUE;
for (i = *quoted ? 0 : 1; i < len; i++) {
- if ((unsigned char)value[i] & 0x80)
+ if (value[i] & 0x80)
*need_qp = TRUE;
if (value[i] == '"' || value[i] == '\r' || value[i] == '\n') {
@@ -35,7 +35,7 @@
return i;
}
-static size_t next_token(const char *value, size_t len,
+static size_t next_token(const unsigned char *value, size_t len,
int *need_qp, int *quoted, int qp_on)
{
size_t i = 0;
@@ -68,7 +68,7 @@
/* then stop at break-char */
for (; i < len; i++) {
- if ((unsigned char)value[i] & 0x80)
+ if (value[i] & 0x80)
*need_qp = TRUE;
if (IS_BREAK_OR_CRLF_CHAR(value[i]))
@@ -78,7 +78,8 @@
return i;
}
-static void append_quoted_qp(String *str, const char *value, size_t len)
+static void append_quoted_qp(String *str, const unsigned char *value,
+ size_t len)
{
size_t i;
unsigned char c;
@@ -96,15 +97,15 @@
str_append_c(str, value[i]);
} else {
str_append_c(str, '=');
- c = (unsigned char)value[i] >> 4;
+ c = value[i] >> 4;
str_append_c(str, c < 10 ? (c+'0') : (c-10+'A'));
- c = (unsigned char)value[i] & 0x0f;
+ c = value[i] & 0x0f;
str_append_c(str, c < 10 ? (c+'0') : (c-10+'A'));
}
}
}
-static void append_quoted(String *str, const char *value, size_t len)
+static void append_quoted(String *str, const unsigned char *value, size_t len)
{
size_t i;
@@ -116,7 +117,7 @@
}
/* does two things: 1) escape '\' and '"' characters, 2) 8bit text -> QP */
-static String *get_quoted_str(const char *value, size_t value_len)
+static String *get_quoted_str(const unsigned char *value, size_t value_len)
{
String *str;
size_t token_len;
@@ -165,13 +166,14 @@
const char *imap_quote_str_nil(const char *value)
{
return value == NULL ? "NIL" :
- str_c(get_quoted_str(value, strlen(value)));
+ str_c(get_quoted_str((const unsigned char *) value,
+ strlen(value)));
}
-char *imap_quote_value(Pool pool, const char *value, size_t value_len)
+char *imap_quote_value(Pool pool, const unsigned char *value, size_t value_len)
{
String *str;
str = get_quoted_str(value, value_len);
- return p_strndup(pool, str_c(str), str_len(str));
+ return p_strndup(pool, str_data(str), str_len(str));
}
Index: imap-quote.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-quote.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- imap-quote.h 30 Sep 2002 21:18:12 -0000 1.1
+++ imap-quote.h 4 Jan 2003 17:26:30 -0000 1.2
@@ -5,6 +5,6 @@
const char *imap_quote_str_nil(const char *value);
/* Return value quoted and allocated from specified pool. */
-char *imap_quote_value(Pool pool, const char *value, size_t value_len);
+char *imap_quote_value(Pool pool, const unsigned char *value, size_t value_len);
#endif
Index: imap-util.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-util.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- imap-util.h 3 Jan 2003 15:57:12 -0000 1.3
+++ imap-util.h 4 Jan 2003 17:26:30 -0000 1.4
@@ -10,7 +10,10 @@
MAIL_RECENT = 0x0000020,
/* rest of the bits are custom flags */
- MAIL_CUSTOM_FLAG_1 = 0x0000040
+ MAIL_CUSTOM_FLAG_1 = 0x0000040,
+
+ MAIL_SYSTEM_FLAGS_MASK = 0x000003f,
+ MAIL_CUSTOM_FLAGS_MASK = 0xfffffc0
} MailFlags;
/* growing number of flags isn't very easy. biggest problem is that they're
@@ -19,9 +22,6 @@
file name using 'a'..'z' letters which gets us exactly the needed 26
flags. if more is added, the current code breaks. */
enum {
- MAIL_SYSTEM_FLAGS_MASK = 0x000003f,
- MAIL_CUSTOM_FLAGS_MASK = 0xfffffc0,
-
MAIL_CUSTOM_FLAG_1_BIT = 6,
MAIL_CUSTOM_FLAGS_COUNT = 26,
More information about the dovecot-cvs
mailing list