From: Vsevolod Stakhov Date: Sat, 11 Jul 2015 20:58:32 +0000 (+0100) Subject: Allow query parameters for files. X-Git-Tag: 1.0.0~385 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3ff2ccae3db08913bccfc0fd5c0ad98aaffca642;p=thirdparty%2Frspamd.git Allow query parameters for files. --- diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c index f9b2f0f3be..761b04a30a 100644 --- a/src/libserver/protocol.c +++ b/src/libserver/protocol.c @@ -252,7 +252,30 @@ rspamd_protocol_handle_url (struct rspamd_task *task, /* In case if we have a query, we need to store it somewhere */ task->msg.start = msg->url->str + u.field_data[UF_QUERY].off; task->msg.len = u.field_data[UF_QUERY].len; - task->flags |= RSPAMD_TASK_FLAG_FILE; + + /* Check URL query parameters */ + p = memchr (task->msg.start, '=', task->msg.len); + + if (p != NULL) { + if (p != task->msg.start && + (memcmp (task->msg.start, "file", + (p - task->msg.start)) == 0 || + memcmp (task->msg.start, "path", + (p - task->msg.start)) == 0)) { + task->flags |= RSPAMD_TASK_FLAG_FILE; + task->msg.start = p + 1; + task->msg.len -= (p - task->msg.start) + 1; + task->flags |= RSPAMD_TASK_FLAG_FILE; + } + else { + msg_err ("invalid query parameter: %*s", task->msg.len, + task->msg.start); + } + } + else { + /* Just file url afterwards */ + task->flags |= RSPAMD_TASK_FLAG_FILE; + } } return TRUE; diff --git a/test/functional/cases/scan_file.sh b/test/functional/cases/scan_file.sh index b4ec293b46..63626cae67 100644 --- a/test/functional/cases/scan_file.sh +++ b/test/functional/cases/scan_file.sh @@ -5,4 +5,10 @@ export RSPAMD_CONFIG="$TEST_DIRNAME/configs/trivial.conf" run_rspamd run perl "$TEST_DIRNAME/cases/scan_file.pl" "$TEST_DIRNAME/messages/gtube.eml" +check_output 'GTUBE' + +run perl "$TEST_DIRNAME/cases/scan_file.pl" "file=$TEST_DIRNAME/messages/gtube.eml" +check_output 'GTUBE' + +run perl "$TEST_DIRNAME/cases/scan_file.pl" "path=$TEST_DIRNAME/messages/gtube.eml" check_output 'GTUBE' \ No newline at end of file