}
msg_notice_task_encrypted ("<%s> %s: %*s; ip: %s; URL: %*s",
- MESSAGE_FIELD (task, message_id),
+ MESSAGE_FIELD_CHECK (task, message_id),
has_user ? "user" : "from",
len, user_field,
rspamd_inet_address_to_string (task->from_addr),
}
p = c;
- s = MESSAGE_FIELD (task, subject);
+ s = MESSAGE_FIELD_CHECK (task, subject);
if (s) {
slen = strlen (s);
}
}
- if (flags & RSPAMD_PROTOCOL_URLS) {
+ if (flags & RSPAMD_PROTOCOL_URLS && task->message) {
if (g_hash_table_size (MESSAGE_FIELD (task, urls)) > 0) {
ucl_object_insert_key (top,
rspamd_urls_tree_ucl (MESSAGE_FIELD (task, urls), task),
if (flags & RSPAMD_PROTOCOL_BASIC) {
ucl_object_insert_key (top,
- ucl_object_fromstring (MESSAGE_FIELD (task, message_id)),
+ ucl_object_fromstring (MESSAGE_FIELD_CHECK (task, message_id)),
"message-id", 0, false);
ucl_object_insert_key (top,
ucl_object_fromdouble (task->time_real_finish - task->task_timestamp),
GString *folded_header;
dkim_sig = (GString *) dkim_sigs->data;
- if (task->flags & RSPAMD_TASK_FLAG_MILTER) {
+ if (task->flags & RSPAMD_TASK_FLAG_MILTER || !task->message) {
folded_header = rspamd_header_value_fold ("DKIM-Signature",
dkim_sig->str, 80, RSPAMD_TASK_NEWLINES_LF, NULL);
}
if (rspamd_http_connection_is_encrypted (task->http_conn)) {
msg_info_protocol ("<%s> writing encrypted reply",
- MESSAGE_FIELD (task, message_id));
+ MESSAGE_FIELD_CHECK (task, message_id));
}
if (!RSPAMD_TASK_IS_JSON (task)) {
}
}
- GPtrArray *rcpt_mime = MESSAGE_FIELD (task, rcpt_mime);
+ GPtrArray *rcpt_mime = MESSAGE_FIELD_CHECK (task, rcpt_mime);
if (rcpt_mime != NULL && rcpt_mime->len > 0) {
PTR_ARRAY_FOREACH (rcpt_mime, i, addr) {
if (addr->addr && !(addr->flags & RSPAMD_EMAIL_ADDR_ORIGINAL)) {
switch (lf->type) {
case RSPAMD_LOG_MID:
- if (MESSAGE_FIELD (task, message_id) &&
+ if (MESSAGE_FIELD_CHECK (task, message_id) &&
strcmp (MESSAGE_FIELD (task, message_id) , "undef") != 0) {
ret = TRUE;
}
break;
case RSPAMD_LOG_MIME_RCPT:
case RSPAMD_LOG_MIME_RCPTS:
- if (MESSAGE_FIELD (task, rcpt_mime) &&
+ if (MESSAGE_FIELD_CHECK (task, rcpt_mime) &&
MESSAGE_FIELD (task, rcpt_mime)->len > 0) {
ret = TRUE;
}
}
break;
case RSPAMD_LOG_MIME_FROM:
- if (MESSAGE_FIELD (task, from_mime) &&
+ if (MESSAGE_FIELD_CHECK (task, from_mime) &&
MESSAGE_FIELD (task, from_mime)->len > 0) {
ret = TRUE;
}
switch (lf->type) {
/* String vars */
case RSPAMD_LOG_MID:
- if (MESSAGE_FIELD (task, message_id)) {
+ if (MESSAGE_FIELD_CHECK (task, message_id)) {
var.begin = MESSAGE_FIELD (task, message_id);
var.len = strlen (var.begin);
}
}
break;
case RSPAMD_LOG_MIME_FROM:
- if (MESSAGE_FIELD (task, from_mime)) {
+ if (MESSAGE_FIELD_CHECK (task, from_mime)) {
return rspamd_task_write_ialist (task,
MESSAGE_FIELD (task, from_mime),
1,
}
break;
case RSPAMD_LOG_MIME_RCPT:
- if (MESSAGE_FIELD (task, rcpt_mime)) {
+ if (MESSAGE_FIELD_CHECK (task, rcpt_mime)) {
return rspamd_task_write_ialist (task,
MESSAGE_FIELD (task, rcpt_mime),
1,
}
break;
case RSPAMD_LOG_MIME_RCPTS:
- if (MESSAGE_FIELD (task, rcpt_mime)) {
+ if (MESSAGE_FIELD_CHECK (task, rcpt_mime)) {
return rspamd_task_write_ialist (task,
MESSAGE_FIELD (task, rcpt_mime),
-1, /* All addresses */
}
break;
case RSPAMD_LOG_DIGEST:
- var.len = rspamd_snprintf (numbuf, sizeof (numbuf), "%*xs",
- (gint)sizeof (MESSAGE_FIELD (task, digest)),
- MESSAGE_FIELD (task, digest));
- var.begin = numbuf;
+ if (task->message) {
+ var.len = rspamd_snprintf (numbuf, sizeof (numbuf), "%*xs",
+ (gint) sizeof (MESSAGE_FIELD (task, digest)),
+ MESSAGE_FIELD (task, digest));
+ var.begin = numbuf;
+ }
+ else {
+ var.begin = undef;
+ var.len = sizeof (undef) - 1;
+ }
break;
case RSPAMD_LOG_FILENAME:
if (task->msg.fpath) {
}
entry->ref = luaL_ref (L, LUA_REGISTRYINDEX);
- memcpy (entry->id, MESSAGE_FIELD (task, digest), sizeof (entry->id));
+
+ if (task->message) {
+ memcpy (entry->id, MESSAGE_FIELD (task, digest), sizeof (entry->id));
+ }
}
entry = g_hash_table_lookup (task->lua_cache, key);
- if (entry != NULL && memcmp (entry->id, MESSAGE_FIELD (task, digest),
- sizeof (entry->id)) == 0) {
+ if (entry != NULL && (task->message &&
+ memcmp (entry->id, MESSAGE_FIELD (task, digest),
+ sizeof (entry->id)) == 0)) {
lua_rawgeti (L, LUA_REGISTRYINDEX, entry->ref);
return TRUE;
PROTOCOL_FILE|PROTOCOL_FTP;
gsize sz;
- if (task) {
+ if (task && task->message) {
if (lua_gettop (L) >= 2) {
if (lua_type (L, 2) == LUA_TBOOLEAN) {
protocols_mask = default_mask;
struct rspamd_task *task = lua_check_task (L, 1);
gboolean need_emails = FALSE, ret = FALSE;
- if (task) {
+ if (task && task->message) {
if (lua_gettop (L) >= 2) {
need_emails = lua_toboolean (L, 2);
}
struct rspamd_lua_text *t;
if (task) {
- t = lua_newuserdata (L, sizeof (*t));
- rspamd_lua_setclass (L, "rspamd{text}", -1);
+ if (task->message != NULL) {
+ t = lua_newuserdata (L, sizeof (*t));
+ rspamd_lua_setclass (L, "rspamd{text}", -1);
+
+ if (MESSAGE_FIELD (task, raw_headers_content).len > 0) {
+ g_assert (MESSAGE_FIELD (task, raw_headers_content).len <= task->msg.len);
+ t->start = task->msg.begin + MESSAGE_FIELD (task, raw_headers_content).len;
+ t->len = task->msg.len - MESSAGE_FIELD (task, raw_headers_content).len;
+ }
+ else {
+ t->len = task->msg.len;
+ t->start = task->msg.begin;
+ }
- if (MESSAGE_FIELD (task, raw_headers_content).len > 0) {
- g_assert (MESSAGE_FIELD (task, raw_headers_content).len <= task->msg.len);
- t->start = task->msg.begin + MESSAGE_FIELD (task, raw_headers_content).len;
- t->len = task->msg.len - MESSAGE_FIELD (task, raw_headers_content).len;
+ t->flags = 0;
}
else {
- t->len = task->msg.len;
- t->start = task->msg.begin;
+ lua_pushnil (L);
}
-
- t->flags = 0;
}
else {
return luaL_error (L, "invalid arguments");
struct rspamd_task *task = lua_check_task (L, 1);
struct rspamd_mime_text_part *part, **ppart;
- if (task != NULL) {
+ if (task != NULL && task->message != NULL) {
if (!lua_task_get_cached (L, task, "text_parts")) {
lua_createtable (L, MESSAGE_FIELD (task, text_parts)->len, 0);
struct rspamd_task *task = lua_check_task (L, 1);
struct rspamd_mime_part *part, **ppart;
- if (task != NULL) {
+ if (task != NULL && task->message != NULL) {
if (!lua_task_get_cached (L, task, "mime_parts")) {
lua_createtable (L, MESSAGE_FIELD (task, parts)->len, 0);
struct rspamd_task *task = lua_check_task (L, 1);
struct rspamd_lua_text *t;
- if (task) {
+ if (task && task->message) {
t = lua_newuserdata (L, sizeof (*t));
rspamd_lua_setclass (L, "rspamd{text}", -1);
t->start = MESSAGE_FIELD (task, raw_headers_content).begin;
const gchar *proto;
guint k = 1;
- if (task) {
+ if (task && task->message) {
if (!lua_task_get_cached (L, task, "received")) {
lua_createtable (L, 0, 0);
break;
case RSPAMD_ADDRESS_MIME:
/* Here we check merely mime rcpt */
- ptrs = MESSAGE_FIELD (task, rcpt_mime);
+ ptrs = MESSAGE_FIELD_CHECK (task, rcpt_mime);
break;
case RSPAMD_ADDRESS_ANY:
default:
ptrs = task->rcpt_envelope;
}
else {
- ptrs = MESSAGE_FIELD (task, rcpt_mime);
+ ptrs = MESSAGE_FIELD_CHECK (task, rcpt_mime);
}
break;
}
break;
case RSPAMD_ADDRESS_MIME:
/* Here we check merely mime rcpt */
- ptrs = MESSAGE_FIELD (task, rcpt_mime);
+ ptrs = MESSAGE_FIELD_CHECK (task, rcpt_mime);
need_update_digest = TRUE;
break;
case RSPAMD_ADDRESS_ANY:
ptrs = task->rcpt_envelope;
}
else {
- ptrs = MESSAGE_FIELD (task, rcpt_mime);
+ ptrs = MESSAGE_FIELD_CHECK (task, rcpt_mime);
need_update_digest = TRUE;
}
break;
break;
case RSPAMD_ADDRESS_MIME:
/* Here we check merely mime rcpt */
- CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD (task, from_mime));
+ CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD_CHECK (task, from_mime));
break;
case RSPAMD_ADDRESS_ANY:
default:
CHECK_EMAIL_ADDR (task->from_envelope);
if (!ret) {
- CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD (task, from_mime));
+ CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD_CHECK (task, from_mime));
}
break;
}
break;
case RSPAMD_ADDRESS_MIME:
/* Here we check merely mime rcpt */
- CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD (task, rcpt_mime));
+ CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD_CHECK (task, rcpt_mime));
break;
case RSPAMD_ADDRESS_ANY:
default:
CHECK_EMAIL_ADDR_LIST (task->rcpt_envelope);
if (!ret) {
- CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD (task, rcpt_mime));
+ CHECK_EMAIL_ADDR_LIST (MESSAGE_FIELD_CHECK (task, rcpt_mime));
}
break;
}
break;
case RSPAMD_ADDRESS_MIME:
/* Here we check merely mime rcpt */
- addrs = MESSAGE_FIELD (task, from_mime);
+ addrs = MESSAGE_FIELD_CHECK (task, from_mime);
break;
case RSPAMD_ADDRESS_ANY:
default:
addr = task->from_envelope;
}
else {
- addrs = MESSAGE_FIELD (task, from_mime);
+ addrs = MESSAGE_FIELD_CHECK (task, from_mime);
}
break;
}
break;
case RSPAMD_ADDRESS_MIME:
/* Here we check merely mime rcpt */
- addrs = MESSAGE_FIELD (task, from_mime);
+ addrs = MESSAGE_FIELD_CHECK (task, from_mime);
need_update_digest = TRUE;
break;
case RSPAMD_ADDRESS_ANY:
paddr = &task->from_envelope;
}
else {
- addrs = MESSAGE_FIELD (task, from_mime);
+ addrs = MESSAGE_FIELD_CHECK (task, from_mime);
need_update_digest = TRUE;
}
break;
if (rh) {
lua_pushstring (L, rh->decoded);
}
- else if (MESSAGE_FIELD (task, from_mime) &&
+ else if (MESSAGE_FIELD_CHECK (task, from_mime) &&
MESSAGE_FIELD (task, from_mime)->len == 1) {
struct rspamd_email_address *addr;
struct rspamd_task *task = lua_check_task (L, 1);
if (task) {
- if (MESSAGE_FIELD (task, subject) != NULL) {
+ if (MESSAGE_FIELD_CHECK (task, subject) != NULL) {
lua_pushstring (L, MESSAGE_FIELD (task, subject));
return 1;
}
struct rspamd_mime_part *part;
struct rspamd_image **pimg;
- if (task) {
+ if (task && task->message) {
if (!lua_task_get_cached (L, task, "images")) {
lua_createtable (L, MESSAGE_FIELD (task, parts)->len, 0);
struct rspamd_mime_part *part;
struct rspamd_archive **parch;
- if (task) {
+ if (task && task->message) {
if (!lua_task_get_cached (L, task, "archives")) {
lua_createtable (L, MESSAGE_FIELD (task, parts)->len, 0);
struct rspamd_task *task = lua_check_task (L, 1);
if (task != NULL) {
- if (MESSAGE_FIELD (task, message_id) != NULL) {
+ if (MESSAGE_FIELD_CHECK (task, message_id) != NULL) {
lua_pushstring (L, MESSAGE_FIELD (task, message_id));
}
else {
gchar hexbuf[sizeof(MESSAGE_FIELD (task, digest)) * 2 + 1];
gint r;
- if (task) {
+ if (task && task->message) {
r = rspamd_encode_hex_buf (MESSAGE_FIELD (task, digest),
sizeof (MESSAGE_FIELD (task, digest)),
hexbuf, sizeof (hexbuf) - 1);
LUA_TRACE_POINT;
struct rspamd_task *task = lua_check_task (L, 1);
- if (task) {
+ if (task && task->message) {
switch (MESSAGE_FIELD (task, nlines_type)) {
case RSPAMD_TASK_NEWLINES_CR:
lua_pushstring (L, "cr");
struct rspamd_mime_header *hdr, *cur;
gint old_top;
- if (task && lua_isfunction (L, 2)) {
+ if (task && task->message && lua_isfunction (L, 2)) {
if (lua_istable (L, 3)) {
lua_pushstring (L, "full");
lua_gettable (L, 3);
guint i, matches = 0;
- if (task == NULL || map == NULL || lua_type (L, 3) != LUA_TFUNCTION) {
+ if (task == NULL || map == NULL || task->message == NULL
+ || lua_type (L, 3) != LUA_TFUNCTION) {
return luaL_error (L, "invalid arguments");
}