sm->type = DETECT_FILEEXT;
sm->ctx = (void *)fileext;
- if (s->alproto != ALPROTO_HTTP && s->alproto != ALPROTO_SMTP) {
- SCLogError(SC_ERR_CONFLICTING_RULE_KEYWORDS, "rule contains conflicting keywords.");
- goto error;
- }
-
SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_FILEMATCH);
if (s->alproto == ALPROTO_HTTP) {
DetectFilemagicData *filemagic = NULL;
SigMatch *sm = NULL;
- if (s->alproto != ALPROTO_HTTP && s->alproto != ALPROTO_SMTP) {
- SCLogError(SC_ERR_CONFLICTING_RULE_KEYWORDS, "rules with filemagic need to have protocol set to http or smtp.");
- goto error;
- }
-
filemagic = DetectFilemagicParse(str);
if (filemagic == NULL)
goto error;
sm->type = DETECT_FILEMD5;
sm->ctx = (void *)filemd5;
- if (s->alproto != ALPROTO_HTTP && s->alproto != ALPROTO_SMTP) {
- SCLogError(SC_ERR_CONFLICTING_RULE_KEYWORDS, "rule contains conflicting keywords.");
- goto error;
- }
-
SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_FILEMATCH);
if (s->alproto == ALPROTO_HTTP) {
#include "stream-tcp.h"
#include "detect-filename.h"
+#include "app-layer-parser.h"
static int DetectFilenameMatch (ThreadVars *, DetectEngineThreadCtx *, Flow *,
uint8_t, File *, Signature *, SigMatch *);
sm->type = DETECT_FILENAME;
sm->ctx = (void *)filename;
- if (s->alproto != ALPROTO_HTTP && s->alproto != ALPROTO_SMTP) {
- SCLogError(SC_ERR_CONFLICTING_RULE_KEYWORDS, "rule contains conflicting keywords.");
- goto error;
- }
-
SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_FILEMATCH);
if (s->alproto == ALPROTO_HTTP) {
sm->type = DETECT_FILESIZE;
sm->ctx = (SigMatchCtx *)fsd;
- if (s->alproto != ALPROTO_HTTP && s->alproto != ALPROTO_SMTP) {
- SCLogError(SC_ERR_CONFLICTING_RULE_KEYWORDS, "rule contains conflicting keywords.");
- goto error;
- }
-
SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_FILEMATCH);
if (s->alproto == ALPROTO_HTTP) {
sm->ctx = (SigMatchCtx*)NULL;
}
- if (s->alproto != ALPROTO_HTTP && s->alproto != ALPROTO_SMTP) {
- SCLogError(SC_ERR_CONFLICTING_RULE_KEYWORDS, "rule contains conflicting keywords.");
- goto error;
- }
-
if (s->alproto == ALPROTO_HTTP) {
AppLayerHtpNeedFileInspection();
}
}
#endif
+ if (((s->flags & SIG_FLAG_FILESTORE) || s->file_flags != 0) &&
+ s->alproto != ALPROTO_UNKNOWN &&
+ !AppLayerParserSupportsFiles(IPPROTO_TCP, s->alproto))
+ {
+ SCLogError(SC_ERR_NO_FILES_FOR_PROTOCOL, "protocol %s doesn't "
+ "support file matching", AppProtoToString(s->alproto));
+ SCReturnInt(0);
+ }
+
SCReturnInt(1);
}
CASE_CODE (SC_ERR_SMTP_LOG_GENERIC);
CASE_CODE (SC_ERR_SSH_LOG_GENERIC);
CASE_CODE (SC_ERR_NIC_OFFLOADING);
+ CASE_CODE (SC_ERR_NO_FILES_FOR_PROTOCOL);
}
return "UNKNOWN_ERROR";
SC_ERR_SMTP_LOG_GENERIC,
SC_ERR_SSH_LOG_GENERIC,
SC_ERR_NIC_OFFLOADING,
+ SC_ERR_NO_FILES_FOR_PROTOCOL,
} SCError;
const char *SCErrorToString(SCError);