[dovecot-cvs] dovecot/src/lib-mail Makefile.am, 1.13, 1.14 message-id.c, NONE, 1.1 message-id.h, NONE, 1.1
cras at dovecot.org
cras at dovecot.org
Tue Jul 11 18:59:35 EEST 2006
- Previous message: [dovecot-cvs] dovecot/src/lib Makefile.am, 1.64, 1.65 crc32.c, NONE, 1.1 crc32.h, NONE, 1.1
- Next message: [dovecot-cvs] dovecot/src/lib-storage mail-storage-private.h, 1.32, 1.33 mail-storage.c, 1.56, 1.57
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/cvs/dovecot/src/lib-mail
In directory talvi:/tmp/cvs-serv12876
Modified Files:
Makefile.am
Added Files:
message-id.c message-id.h
Log Message:
Added message_id_get_next() to return the next valid Message-ID from a
string of Message-IDs.
Index: Makefile.am
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-mail/Makefile.am,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- Makefile.am 8 May 2006 08:46:19 -0000 1.13
+++ Makefile.am 11 Jul 2006 15:59:33 -0000 1.14
@@ -13,6 +13,7 @@
message-header-decode.c \
message-header-parser.c \
message-header-search.c \
+ message-id.c \
message-parser.c \
message-part-serialize.c \
message-send.c \
@@ -30,6 +31,7 @@
message-header-decode.h \
message-header-parser.h \
message-header-search.h \
+ message-id.h \
message-parser.h \
message-part-serialize.h \
message-send.h \
--- NEW FILE: message-id.c ---
/* Copyright (C) 2006 Timo Sirainen */
#include "lib.h"
#include "str.h"
#include "rfc822-parser.h"
#include "message-id.h"
static bool get_untokenized_msgid(const char **msgid_p, string_t *msgid)
{
struct rfc822_parser_context parser;
rfc822_parser_init(&parser, (const unsigned char *)*msgid_p,
strlen(*msgid_p), NULL);
/*
msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS]
id-left = dot-atom-text / no-fold-quote / obs-id-left
id-right = dot-atom-text / no-fold-literal / obs-id-right
no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE
no-fold-literal = "[" *(dtext / quoted-pair) "]"
*/
(void)rfc822_skip_lwsp(&parser);
if (rfc822_parse_dot_atom(&parser, msgid) <= 0)
return FALSE;
if (*parser.data != '@')
return FALSE;
parser.data++;
(void)rfc822_skip_lwsp(&parser);
if (rfc822_parse_dot_atom(&parser, msgid) <= 0)
return FALSE;
if (*parser.data != '>')
return FALSE;
*msgid_p = (const char *)parser.data + 1;
return TRUE;
}
static void strip_lwsp(char *str)
{
/* @UNSAFE */
char *dest;
/* find the first lwsp */
while (*str != ' ' && *str != '\t' && *str != '\r' && *str != '\n') {
if (*str == '\0')
return;
str++;
}
for (dest = str; *str != '\0'; str++) {
if (*str != ' ' && *str != '\t' && *str != '\r' && *str != '\n')
*dest++ = *str;
}
*dest = '\0';
}
const char *message_id_get_next(const char **msgid_p)
{
const char *msgid = *msgid_p;
const char *p;
string_t *str = NULL;
bool found_at;
if (*msgid_p == NULL)
return NULL;
for (;;) {
/* skip until '<' */
while (*msgid != '<') {
if (*msgid == '\0') {
*msgid_p = msgid;
return NULL;
}
msgid++;
}
msgid++;
/* check it through quickly to see if it's already normalized */
p = msgid; found_at = FALSE;
for (;; p++) {
if ((unsigned char)*p >= 'A') /* matches most */
continue;
if (*p == '@')
found_at = TRUE;
if (*p == '>' || *p == '"' || *p == '(' || *p == '[')
break;
if (*p == '\0') {
*msgid_p = p;
return NULL;
}
}
if (*p == '>') {
*msgid_p = p+1;
if (found_at) {
char *s;
s = p_strdup_until(unsafe_data_stack_pool,
msgid, p);
strip_lwsp(s);
return s;
}
} else {
/* ok, do it the slow way */
*msgid_p = msgid;
if (str == NULL) {
/* allocate only once, so we don't leak
with multiple invalid message IDs */
str = t_str_new(256);
}
if (get_untokenized_msgid(msgid_p, str))
return str_c(str);
}
/* invalid message id, see if there's another valid one */
msgid = *msgid_p;
}
}
--- NEW FILE: message-id.h ---
#ifndef __MESSAGE_ID_H
#define __MESSAGE_ID_H
/* Returns the next valid message ID from a given Message-ID header.
The return value is allocated from data stack. */
const char *message_id_get_next(const char **msgid_p);
#endif
- Previous message: [dovecot-cvs] dovecot/src/lib Makefile.am, 1.64, 1.65 crc32.c, NONE, 1.1 crc32.h, NONE, 1.1
- Next message: [dovecot-cvs] dovecot/src/lib-storage mail-storage-private.h, 1.32, 1.33 mail-storage.c, 1.56, 1.57
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list