From d59421e5d334cc6807a4c5fc7bcfe2787dbf7f25 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Sun, 30 Nov 2008 21:01:54 +0100 Subject: [PATCH] Added support for header verification. --- src/lib-sieve/Makefile.am | 2 ++ src/lib-sieve/rfc2822.c | 31 +++++++++++++++++++++++++++++++ src/lib-sieve/rfc2822.h | 10 ++++++++++ 3 files changed, 43 insertions(+) create mode 100644 src/lib-sieve/rfc2822.c create mode 100644 src/lib-sieve/rfc2822.h diff --git a/src/lib-sieve/Makefile.am b/src/lib-sieve/Makefile.am index 426941621..ea53f28a8 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 000000000..00fa53901 --- /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 000000000..e4b8fe193 --- /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 */ -- GitLab