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