detect-csum: redo tests

pull/2559/head
Victor Julien 9 years ago
parent f370e88135
commit a2b521b7fa

@ -886,622 +886,107 @@ static void DetectICMPV6CsumFree(void *ptr)
/* ---------------------------------- Unit Tests --------------------------- */
#ifdef UNITTESTS
#include "detect-engine.h"
static int DetectCsumIPV4ValidArgsTestParse01(void)
{
Signature s;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectIPV4CsumSetup(NULL, &s, "\"valid\"") == 0);
result &= (DetectIPV4CsumSetup(NULL, &s, "\"invalid\"") == 0);
result &= (DetectIPV4CsumSetup(NULL, &s, "\"vaLid\"") == 0);
result &= (DetectIPV4CsumSetup(NULL, &s, "\"VALID\"") == 0);
result &= (DetectIPV4CsumSetup(NULL, &s, "\"iNvaLid\"") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumIPV4InValidArgsTestParse02(void)
{
Signature s;
int result = -1;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectIPV4CsumSetup(NULL, &s, "vaid") == -1);
result &= (DetectIPV4CsumSetup(NULL, &s, "invaalid") == -1);
result &= (DetectIPV4CsumSetup(NULL, &s, "vaLiid") == -1);
result &= (DetectIPV4CsumSetup(NULL, &s, "VALieD") == -1);
result &= (DetectIPV4CsumSetup(NULL, &s, "iNvamid") == -1);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumIPV4ValidArgsTestParse03(void)
{
Signature s;
DetectCsumData *cd = NULL;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectIPV4CsumSetup(NULL, &s, "valid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 1);
}
DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
result &= (DetectIPV4CsumSetup(NULL, &s, "INVALID") == 0);
if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 0);
}
DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumICMPV4ValidArgsTestParse01(void)
{
Signature s;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectICMPV4CsumSetup(NULL, &s, "valid") == 0);
result &= (DetectICMPV4CsumSetup(NULL, &s, "invalid") == 0);
result &= (DetectICMPV4CsumSetup(NULL, &s, "vaLid") == 0);
result &= (DetectICMPV4CsumSetup(NULL, &s, "VALID") == 0);
result &= (DetectICMPV4CsumSetup(NULL, &s, "iNvaLid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumICMPV4InValidArgsTestParse02(void)
{
Signature s;
int result = -1;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectICMPV4CsumSetup(NULL, &s, "vaid") == -1);
result &= (DetectICMPV4CsumSetup(NULL, &s, "invaalid") == -1);
result &= (DetectICMPV4CsumSetup(NULL, &s, "vaLiid") == -1);
result &= (DetectICMPV4CsumSetup(NULL, &s, "VALieD") == -1);
result &= (DetectICMPV4CsumSetup(NULL, &s, "iNvamid") == -1);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumICMPV4ValidArgsTestParse03(void)
{
Signature s;
DetectCsumData *cd = NULL;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectICMPV4CsumSetup(NULL, &s, "valid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 1);
}
DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
result &= (DetectICMPV4CsumSetup(NULL, &s, "INVALID") == 0);
if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 0);
}
DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumTCPV4ValidArgsTestParse01(void)
{
Signature s;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectTCPV4CsumSetup(NULL, &s, "valid") == 0);
result &= (DetectTCPV4CsumSetup(NULL, &s, "invalid") == 0);
result &= (DetectTCPV4CsumSetup(NULL, &s, "vaLid") == 0);
result &= (DetectTCPV4CsumSetup(NULL, &s, "VALID") == 0);
result &= (DetectTCPV4CsumSetup(NULL, &s, "iNvaLid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumTCPV4InValidArgsTestParse02(void)
{
Signature s;
int result = -1;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectTCPV4CsumSetup(NULL, &s, "vaid") == -1);
result &= (DetectTCPV4CsumSetup(NULL, &s, "invaalid") == -1);
result &= (DetectTCPV4CsumSetup(NULL, &s, "vaLiid") == -1);
result &= (DetectTCPV4CsumSetup(NULL, &s, "VALieD") == -1);
result &= (DetectTCPV4CsumSetup(NULL, &s, "iNvamid") == -1);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumTCPV4ValidArgsTestParse03(void)
{
Signature s;
DetectCsumData *cd = NULL;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectTCPV4CsumSetup(NULL, &s, "valid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 1);
}
DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
result &= (DetectTCPV4CsumSetup(NULL, &s, "INVALID") == 0);
if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 0);
}
DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumUDPV4ValidArgsTestParse01(void)
{
Signature s;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectUDPV4CsumSetup(NULL, &s, "valid") == 0);
result &= (DetectUDPV4CsumSetup(NULL, &s, "invalid") == 0);
result &= (DetectUDPV4CsumSetup(NULL, &s, "vaLid") == 0);
result &= (DetectUDPV4CsumSetup(NULL, &s, "VALID") == 0);
result &= (DetectUDPV4CsumSetup(NULL, &s, "iNvaLid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumUDPV4InValidArgsTestParse02(void)
{
Signature s;
int result = -1;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectUDPV4CsumSetup(NULL, &s, "vaid") == -1);
result &= (DetectUDPV4CsumSetup(NULL, &s, "invaalid") == -1);
result &= (DetectUDPV4CsumSetup(NULL, &s, "vaLiid") == -1);
result &= (DetectUDPV4CsumSetup(NULL, &s, "VALieD") == -1);
result &= (DetectUDPV4CsumSetup(NULL, &s, "iNvamid") == -1);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumUDPV4ValidArgsTestParse03(void)
{
Signature s;
DetectCsumData *cd = NULL;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectUDPV4CsumSetup(NULL, &s, "valid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 1);
}
DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
result &= (DetectUDPV4CsumSetup(NULL, &s, "INVALID") == 0);
if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 0);
}
DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
#define mystr(s) #s
#define TEST1(kwstr) {\
DetectEngineCtx *de_ctx = DetectEngineCtxInit();\
FAIL_IF_NULL(de_ctx);\
de_ctx->flags = DE_QUIET;\
\
Signature *s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:valid; sid:1;)");\
FAIL_IF_NULL(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:invalid; sid:2;)");\
FAIL_IF_NULL(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:vaLid; sid:3;)");\
FAIL_IF_NULL(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:VALID; sid:4;)");\
FAIL_IF_NULL(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:iNvaLid; sid:5;)");\
FAIL_IF_NULL(s);\
DetectEngineCtxFree(de_ctx);\
}
static int DetectCsumTCPV6ValidArgsTestParse01(void)
{
Signature s;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectTCPV6CsumSetup(NULL, &s, "valid") == 0);
result &= (DetectTCPV6CsumSetup(NULL, &s, "invalid") == 0);
result &= (DetectTCPV6CsumSetup(NULL, &s, "vaLid") == 0);
result &= (DetectTCPV6CsumSetup(NULL, &s, "VALID") == 0);
result &= (DetectTCPV6CsumSetup(NULL, &s, "iNvaLid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumTCPV6InValidArgsTestParse02(void)
static int DetectCsumValidArgsTestParse01(void)
{
Signature s;
int result = -1;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectTCPV6CsumSetup(NULL, &s, "vaid") == -1);
result &= (DetectTCPV6CsumSetup(NULL, &s, "invaalid") == -1);
result &= (DetectTCPV6CsumSetup(NULL, &s, "vaLiid") == -1);
result &= (DetectTCPV6CsumSetup(NULL, &s, "VALieD") == -1);
result &= (DetectTCPV6CsumSetup(NULL, &s, "iNvamid") == -1);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
TEST1(ipv4);
TEST1(tcpv4);
TEST1(tcpv6);
TEST1(udpv4);
TEST1(udpv6);
TEST1(icmpv4);
TEST1(icmpv6);
PASS;
}
static int DetectCsumTCPV6ValidArgsTestParse03(void)
{
Signature s;
DetectCsumData *cd = NULL;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectTCPV6CsumSetup(NULL, &s, "valid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 1);
}
DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
result &= (DetectTCPV6CsumSetup(NULL, &s, "INVALID") == 0);
if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 0);
}
DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
#undef TEST1
#define TEST2(kwstr) { \
DetectEngineCtx *de_ctx = DetectEngineCtxInit();\
FAIL_IF_NULL(de_ctx);\
Signature *s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:vaid; sid:1;)");\
FAIL_IF(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:invaalid; sid:2;)");\
FAIL_IF(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:vaLiid; sid:3;)");\
FAIL_IF(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:VALieD; sid:4;)");\
FAIL_IF(s);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:iNvamid; sid:5;)");\
FAIL_IF(s);\
DetectEngineCtxFree(de_ctx);\
}
static int DetectCsumUDPV6ValidArgsTestParse01(void)
int DetectCsumInvalidArgsTestParse02(void)
{
Signature s;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectUDPV6CsumSetup(NULL, &s, "valid") == 0);
result &= (DetectUDPV6CsumSetup(NULL, &s, "invalid") == 0);
result &= (DetectUDPV6CsumSetup(NULL, &s, "vaLid") == 0);
result &= (DetectUDPV6CsumSetup(NULL, &s, "VALID") == 0);
result &= (DetectUDPV6CsumSetup(NULL, &s, "iNvaLid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
TEST2(ipv4);
TEST2(tcpv4);
TEST2(tcpv6);
TEST2(udpv4);
TEST2(udpv6);
TEST2(icmpv4);
TEST2(icmpv6);
PASS;
}
static int DetectCsumUDPV6InValidArgsTestParse02(void)
{
Signature s;
int result = -1;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectUDPV6CsumSetup(NULL, &s, "vaid") == -1);
result &= (DetectUDPV6CsumSetup(NULL, &s, "invaalid") == -1);
result &= (DetectUDPV6CsumSetup(NULL, &s, "vaLiid") == -1);
result &= (DetectUDPV6CsumSetup(NULL, &s, "VALieD") == -1);
result &= (DetectUDPV6CsumSetup(NULL, &s, "iNvamid") == -1);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
#undef TEST2
#define TEST3(kwstr, kwtype) { \
DetectEngineCtx *de_ctx = DetectEngineCtxInit();\
FAIL_IF_NULL(de_ctx);\
Signature *s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:valid; sid:1;)");\
FAIL_IF_NULL(s);\
SigMatch *sm = SigMatchGetLastSMFromLists(s, 2, (kwtype), s->sm_lists[DETECT_SM_LIST_MATCH]);\
FAIL_IF_NULL(sm);\
FAIL_IF_NULL(sm->ctx);\
FAIL_IF_NOT(((DetectCsumData *)sm->ctx)->valid == 1);\
s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:INVALID; sid:2;)");\
FAIL_IF_NULL(s);\
sm = SigMatchGetLastSMFromLists(s, 2, (kwtype), s->sm_lists[DETECT_SM_LIST_MATCH]);\
FAIL_IF_NULL(sm);\
FAIL_IF_NULL(sm->ctx);\
FAIL_IF_NOT(((DetectCsumData *)sm->ctx)->valid == 0);\
DetectEngineCtxFree(de_ctx);\
}
static int DetectCsumUDPV6ValidArgsTestParse03(void)
int DetectCsumValidArgsTestParse03(void)
{
Signature s;
DetectCsumData *cd = NULL;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectUDPV6CsumSetup(NULL, &s, "valid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 1);
}
DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
result &= (DetectUDPV6CsumSetup(NULL, &s, "INVALID") == 0);
if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 0);
}
DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumICMPV6ValidArgsTestParse01(void)
{
Signature s;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectICMPV6CsumSetup(NULL, &s, "valid") == 0);
result &= (DetectICMPV6CsumSetup(NULL, &s, "invalid") == 0);
result &= (DetectICMPV6CsumSetup(NULL, &s, "vaLid") == 0);
result &= (DetectICMPV6CsumSetup(NULL, &s, "VALID") == 0);
result &= (DetectICMPV6CsumSetup(NULL, &s, "iNvaLid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumICMPV6InValidArgsTestParse02(void)
{
Signature s;
int result = -1;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectICMPV6CsumSetup(NULL, &s, "vaid") == -1);
result &= (DetectICMPV6CsumSetup(NULL, &s, "invaalid") == -1);
result &= (DetectICMPV6CsumSetup(NULL, &s, "vaLiid") == -1);
result &= (DetectICMPV6CsumSetup(NULL, &s, "VALieD") == -1);
result &= (DetectICMPV6CsumSetup(NULL, &s, "iNvamid") == -1);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
}
static int DetectCsumICMPV6ValidArgsTestParse03(void)
{
Signature s;
DetectCsumData *cd = NULL;
int result = 0;
SigMatch *temp = NULL;
memset(&s, 0, sizeof(Signature));
result = (DetectICMPV6CsumSetup(NULL, &s, "valid") == 0);
while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 1);
}
DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
result &= (DetectICMPV6CsumSetup(NULL, &s, "INVALID") == 0);
if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
result &= (cd->valid == 0);
}
DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
temp = s.sm_lists[DETECT_SM_LIST_MATCH];
s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
SCFree(temp);
}
return result;
TEST3(ipv4, DETECT_IPV4_CSUM);
TEST3(tcpv4, DETECT_TCPV4_CSUM);
TEST3(tcpv6, DETECT_TCPV6_CSUM);
TEST3(udpv4, DETECT_UDPV4_CSUM);
TEST3(udpv6, DETECT_UDPV6_CSUM);
TEST3(icmpv4, DETECT_ICMPV4_CSUM);
TEST3(icmpv6, DETECT_ICMPV6_CSUM);
PASS;
}
#undef TEST3
#undef mystr
#include "detect-engine.h"
#include "stream-tcp.h"
static int DetectCsumICMPV6Test01(void)
{
int result = 0;
DetectEngineCtx *de_ctx = NULL;
Signature *s = NULL;
ThreadVars tv;
@ -1509,10 +994,7 @@ static int DetectCsumICMPV6Test01(void)
DecodeThreadVars dtv;
Packet *p = PacketGetFromAlloc();
if (p == NULL) {
printf("failure PacketGetFromAlloc\n");
goto end;
}
FAIL_IF_NULL(p);
uint8_t pkt[] = {
0x00, 0x30, 0x18, 0xa8, 0x7c, 0x23, 0x2c, 0x41,
@ -1540,19 +1022,13 @@ static int DetectCsumICMPV6Test01(void)
FlowInitConfig(FLOW_QUIET);
de_ctx = DetectEngineCtxInit();
if (de_ctx == NULL) {
printf("DetectEngineCtxInit failure\n");
goto end;
}
FAIL_IF_NULL(de_ctx);
de_ctx->mpm_matcher = mpm_default_matcher;
de_ctx->flags |= DE_QUIET;
s = de_ctx->sig_list = SigInit(de_ctx, "alert ip any any -> any any "
"(icmpv6-csum:valid; sid:1;)");
if (s == NULL) {
printf("SigInit failed\n");
goto end;
}
FAIL_IF_NULL(s);
SigGroupBuild(de_ctx);
DecodeEthernet(&tv, &dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), NULL);
@ -1561,28 +1037,16 @@ static int DetectCsumICMPV6Test01(void)
SigMatchSignatures(&tv, de_ctx, det_ctx, p);
if (!PacketAlertCheck(p, 1)) {
printf("sig 1 didn't alert on p, but it should: ");
goto end;
}
FAIL_IF(!PacketAlertCheck(p, 1));
result = 1;
end:
if (det_ctx != NULL)
DetectEngineThreadCtxDeinit(&tv, det_ctx);
if (de_ctx != NULL) {
SigGroupCleanup(de_ctx);
DetectEngineCtxFree(de_ctx);
}
DetectEngineThreadCtxDeinit(&tv, det_ctx);
DetectEngineCtxFree(de_ctx);
StreamTcpFreeConfig(TRUE);
PACKET_RECYCLE(p);
FlowShutdown();
SCFree(p);
return result;
PASS;
}
#endif /* UNITTESTS */
@ -1590,55 +1054,16 @@ static int DetectCsumICMPV6Test01(void)
static void DetectCsumRegisterTests(void)
{
#ifdef UNITTESTS
UtRegisterTest("DetectCsumIPV4ValidArgsTestParse01",
DetectCsumIPV4ValidArgsTestParse01);
UtRegisterTest("DetectCsumIPV4InValidArgsTestParse02",
DetectCsumIPV4InValidArgsTestParse02);
UtRegisterTest("DetectCsumIPV4ValidArgsTestParse03",
DetectCsumIPV4ValidArgsTestParse03);
UtRegisterTest("DetectCsumICMPV4ValidArgsTestParse01",
DetectCsumICMPV4ValidArgsTestParse01);
UtRegisterTest("DetectCsumICMPV4InValidArgsTestParse02",
DetectCsumICMPV4InValidArgsTestParse02);
UtRegisterTest("DetectCsumICMPV4ValidArgsTestParse03",
DetectCsumICMPV4ValidArgsTestParse03);
UtRegisterTest("DetectCsumTCPV4ValidArgsTestParse01",
DetectCsumTCPV4ValidArgsTestParse01);
UtRegisterTest("DetectCsumTCPV4InValidArgsTestParse02",
DetectCsumTCPV4InValidArgsTestParse02);
UtRegisterTest("DetectCsumTCPV4ValidArgsTestParse03",
DetectCsumTCPV4ValidArgsTestParse03);
UtRegisterTest("DetectCsumUDPV4ValidArgsTestParse01",
DetectCsumUDPV4ValidArgsTestParse01);
UtRegisterTest("DetectCsumUDPV4InValidArgsTestParse02",
DetectCsumUDPV4InValidArgsTestParse02);
UtRegisterTest("DetectCsumUDPV4ValidArgsTestParse03",
DetectCsumUDPV4ValidArgsTestParse03);
UtRegisterTest("DetectCsumUDPV6ValidArgsTestParse01",
DetectCsumUDPV6ValidArgsTestParse01);
UtRegisterTest("DetectCsumUDPV6InValidArgsTestParse02",
DetectCsumUDPV6InValidArgsTestParse02);
UtRegisterTest("DetectCsumUDPV6ValidArgsTestParse03",
DetectCsumUDPV6ValidArgsTestParse03);
UtRegisterTest("DetectCsumTCPV6ValidArgsTestParse01",
DetectCsumTCPV6ValidArgsTestParse01);
UtRegisterTest("DetectCsumTCPV6InValidArgsTestParse02",
DetectCsumTCPV6InValidArgsTestParse02);
UtRegisterTest("DetectCsumTCPV6ValidArgsTestParse03",
DetectCsumTCPV6ValidArgsTestParse03);
UtRegisterTest("DetectCsumICMPV6ValidArgsTestParse01",
DetectCsumICMPV6ValidArgsTestParse01);
UtRegisterTest("DetectCsumICMPV6InValidArgsTestParse02",
DetectCsumICMPV6InValidArgsTestParse02);
UtRegisterTest("DetectCsumICMPV6ValidArgsTestParse03",
DetectCsumICMPV6ValidArgsTestParse03);
UtRegisterTest("DetectCsumICMPV6Test01", DetectCsumICMPV6Test01);
UtRegisterTest("DetectCsumValidArgsTestParse01",
DetectCsumValidArgsTestParse01);
UtRegisterTest("DetectCsumInvalidArgsTestParse02",
DetectCsumInvalidArgsTestParse02);
UtRegisterTest("DetectCsumValidArgsTestParse03",
DetectCsumValidArgsTestParse03);
UtRegisterTest("DetectCsumICMPV6Test01",
DetectCsumICMPV6Test01);
#endif /* UNITTESTS */
}

Loading…
Cancel
Save