From 6224f2a347271159fb3bc9363dadeea4f640ef31 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 20 Oct 2008 18:03:50 +0400 Subject: [PATCH] * Parse header regexps in other way (header_name=/some_regexp/flags) --- cfg_file.h | 1 + cfg_utils.c | 19 ++++++++++++++++++- main.h | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cfg_file.h b/cfg_file.h index 9632a70e7..e67479318 100644 --- a/cfg_file.h +++ b/cfg_file.h @@ -63,6 +63,7 @@ struct rspamd_regexp { enum rspamd_regexp_type type; char *regexp_text; GRegex *regexp; + char *header; }; struct memcached_server { diff --git a/cfg_utils.c b/cfg_utils.c index ae0dce5e3..430c572e7 100644 --- a/cfg_utils.c +++ b/cfg_utils.c @@ -414,14 +414,31 @@ parse_regexp (memory_pool_t *pool, char *line) enum rspamd_regexp_type type = REGEXP_NONE; GError *err = NULL; - /* Find begin */ + result = memory_pool_alloc0 (pool, sizeof (struct rspamd_regexp)); + /* First try to find header name */ + begin = strchr (line, '='); + if (begin != NULL) { + *begin = '\0'; + result->header = memory_pool_strdup (pool, line); + result->type = REGEXP_HEADER; + *begin = '='; + line = begin; + } + /* Find begin of regexp */ while (*line != '/') { line ++; } if (*line != '\0') { begin = line + 1; } + else if (result->header == NULL) { + /* Assume that line without // is just a header name */ + result->header = memory_pool_strdup (pool, line); + result->type = REGEXP_HEADER; + return result; + } else { + /* We got header name earlier but have not found // expression, so it is invalid regexp */ return NULL; } /* Find end */ diff --git a/main.h b/main.h index 0d9e8ca10..1902f2d84 100644 --- a/main.h +++ b/main.h @@ -130,7 +130,7 @@ struct worker_task { unsigned memc_busy:1; /* Number of mime parts */ int parts_count; - /* Headers */ + /* Message */ GMimeMessage *message; /* All parts of message */ TAILQ_HEAD (mime_partq, mime_part) parts; -- 2.39.5