summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libmime/message.c10
-rw-r--r--src/libserver/url.c4
-rw-r--r--src/libserver/url.h4
-rw-r--r--src/lua/lua_url.c22
4 files changed, 30 insertions, 10 deletions
diff --git a/src/libmime/message.c b/src/libmime/message.c
index d445362b2..91e32be33 100644
--- a/src/libmime/message.c
+++ b/src/libmime/message.c
@@ -632,8 +632,6 @@ rspamd_message_from_data (struct rspamd_task *task, const guchar *start,
gboolean
rspamd_message_parse (struct rspamd_task *task)
{
- GPtrArray *hdrs;
- struct rspamd_mime_header *rh;
struct rspamd_mime_text_part *p1, *p2;
struct received_header *recv, *trecv;
const gchar *p;
@@ -824,13 +822,11 @@ rspamd_message_parse (struct rspamd_task *task)
}
/* Parse urls inside Subject header */
- hdrs = rspamd_message_get_header_array (task, "Subject", FALSE);
-
- PTR_ARRAY_FOREACH (hdrs, i, rh) {
- p = rh->decoded;
+ if (task->subject) {
+ p = task->subject;
len = strlen (p);
rspamd_url_find_multiple (task->task_pool, p, len, FALSE, NULL,
- rspamd_url_task_callback, task);
+ rspamd_url_task_subject_callback, task);
}
/* Calculate distance for 2-parts messages */
diff --git a/src/libserver/url.c b/src/libserver/url.c
index 0a1b26bb3..1efae6019 100644
--- a/src/libserver/url.c
+++ b/src/libserver/url.c
@@ -2486,7 +2486,7 @@ rspamd_url_find_single (rspamd_mempool_t *pool, const gchar *in,
void
-rspamd_url_task_callback (struct rspamd_url *url, gsize start_offset,
+rspamd_url_task_subject_callback (struct rspamd_url *url, gsize start_offset,
gsize end_offset, gpointer ud)
{
struct rspamd_task *task = ud;
@@ -2495,7 +2495,7 @@ rspamd_url_task_callback (struct rspamd_url *url, gsize start_offset,
gint rc;
/* It is just a displayed URL, we should not check it for certain things */
- url->flags |= RSPAMD_URL_FLAG_HTML_DISPLAYED;
+ url->flags |= RSPAMD_URL_FLAG_HTML_DISPLAYED|RSPAMD_URL_FLAG_SUBJECT;
if (url->protocol == PROTOCOL_MAILTO) {
if (url->userlen > 0) {
diff --git a/src/libserver/url.h b/src/libserver/url.h
index 9a9522c50..14c0c5b69 100644
--- a/src/libserver/url.h
+++ b/src/libserver/url.h
@@ -16,6 +16,7 @@ enum rspamd_url_flags {
RSPAMD_URL_FLAG_REDIRECTED = 1 << 3,
RSPAMD_URL_FLAG_HTML_DISPLAYED = 1 << 4,
RSPAMD_URL_FLAG_FROM_TEXT = 1 << 5,
+ RSPAMD_URL_FLAG_SUBJECT = 1 << 6,
};
struct rspamd_url_tag {
@@ -163,7 +164,8 @@ void rspamd_url_find_single (rspamd_mempool_t *pool, const gchar *in,
* @param end_offset
* @param ud
*/
-void rspamd_url_task_callback (struct rspamd_url *url, gsize start_offset,
+void rspamd_url_task_subject_callback (struct rspamd_url *url,
+ gsize start_offset,
gsize end_offset, gpointer ud);
/**
diff --git a/src/lua/lua_url.c b/src/lua/lua_url.c
index 9b69267a4..8826bb41c 100644
--- a/src/lua/lua_url.c
+++ b/src/lua/lua_url.c
@@ -53,6 +53,7 @@ LUA_FUNCTION_DEF (url, is_phished);
LUA_FUNCTION_DEF (url, is_redirected);
LUA_FUNCTION_DEF (url, is_obscured);
LUA_FUNCTION_DEF (url, is_html_displayed);
+LUA_FUNCTION_DEF (url, is_subject);
LUA_FUNCTION_DEF (url, get_phished);
LUA_FUNCTION_DEF (url, get_tag);
LUA_FUNCTION_DEF (url, get_tags);
@@ -76,6 +77,7 @@ static const struct luaL_reg urllib_m[] = {
LUA_INTERFACE_DEF (url, is_redirected),
LUA_INTERFACE_DEF (url, is_obscured),
LUA_INTERFACE_DEF (url, is_html_displayed),
+ LUA_INTERFACE_DEF (url, is_subject),
LUA_INTERFACE_DEF (url, get_phished),
LUA_INTERFACE_DEF (url, get_tag),
LUA_INTERFACE_DEF (url, get_tags),
@@ -340,6 +342,26 @@ lua_url_is_html_displayed (lua_State *L)
}
/***
+ * @method url:is_subject()
+ * Check whether URL is found in subject
+ * @return {boolean} `true` if URL is found in subject
+ */
+static gint
+lua_url_is_subject (lua_State *L)
+{
+ struct rspamd_lua_url *url = lua_check_url (L, 1);
+
+ if (url != NULL) {
+ lua_pushboolean (L, url->url->flags & RSPAMD_URL_FLAG_SUBJECT);
+ }
+ else {
+ lua_pushnil (L);
+ }
+
+ return 1;
+}
+
+/***
* @method url:get_tag(tag)
* Returns list of string for a specific tagname for an url
* @return {table/strings} list of tags for an url