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

Loading…
Cancel
Save