diff --git a/src/lib-sieve/Makefile.am b/src/lib-sieve/Makefile.am index 426941621378d1cd2f686ba9db1a1ce7c625a7ae..ea53f28a8dc4d6024409b093348303424bbbf680 100644 --- a/src/lib-sieve/Makefile.am +++ b/src/lib-sieve/Makefile.am @@ -63,6 +63,7 @@ libsieve_la_DEPENDENCIES = $(plugins) libsieve_la_LIBADD = $(plugins) libsieve_la_SOURCES = \ + rfc2822.c \ sieve-limits.c \ sieve-message.c \ sieve-lexer.c \ @@ -95,6 +96,7 @@ libsieve_la_SOURCES = \ sieve.c noinst_HEADERS = \ + rfc2822.h \ sieve-config.h \ sieve-types.h \ sieve-common.h \ diff --git a/src/lib-sieve/rfc2822.c b/src/lib-sieve/rfc2822.c new file mode 100644 index 0000000000000000000000000000000000000000..00fa5390131e4d3a94d2f29cad91c9cfa858cab9 --- /dev/null +++ b/src/lib-sieve/rfc2822.c @@ -0,0 +1,31 @@ +/* Copyright (c) 2002-2008 Dovecot Sieve authors, see the included COPYING file + */ + +#include "lib.h" + +#include "rfc2822.h" + +/* NOTE: much of the functionality implemented here should eventually appear + * somewhere in Dovecot itself. + */ + +bool rfc2822_header_field_name_verify +(const char *field_name, unsigned int len) +{ + const char *p = field_name; + const char *pend = p + len; + + /* field-name = 1*ftext + * ftext = %d33-57 / ; Any character except + * %d59-126 ; controls, SP, and + * ; ":". + */ + + while ( p < pend ) { + if ( *p < 33 || *p == ':' ) + return FALSE; + } + + return TRUE; +} + diff --git a/src/lib-sieve/rfc2822.h b/src/lib-sieve/rfc2822.h new file mode 100644 index 0000000000000000000000000000000000000000..e4b8fe19336374e515e225add54d57115ef178ec --- /dev/null +++ b/src/lib-sieve/rfc2822.h @@ -0,0 +1,10 @@ +/* Copyright (c) 2002-2008 Dovecot Sieve authors, see the included COPYING file + */ + +#ifndef __RFC2822_H +#define __RFC2822_H + +bool rfc2822_header_field_name_verify + (const char *field_name, unsigned int len); + +#endif /* __RFC2822_H */