52 static void DetectUrilenRegisterTests (
void);
54 static int g_http_uri_buffer_id = 0;
55 static int g_http_raw_uri_buffer_id = 0;
86 static DetectUrilenData *DetectUrilenParse (
const char *urilenstr)
88 return SCDetectUrilenParse(urilenstr);
104 DetectUrilenData *urilend = NULL;
109 urilend = DetectUrilenParse(urilenstr);
113 if (urilend->raw_buffer) {
115 g_http_raw_uri_buffer_id) == NULL) {
120 g_http_uri_buffer_id) == NULL) {
128 DetectUrilenFree(
de_ctx, urilend);
142 DetectUrilenData *urilend = (DetectUrilenData *)ptr;
143 SCDetectUrilenFree(urilend);
155 uint16_t high = UINT16_MAX;
162 DetectUrilenData *dd = (DetectUrilenData *)sm->ctx;
164 switch (dd->du16.mode) {
166 if (dd->du16.arg1 < UINT16_MAX) {
167 high = dd->du16.arg1 + 1;
173 high = dd->du16.arg1;
176 if (dd->du16.arg2 < UINT16_MAX) {
177 high = dd->du16.arg2 + 1;
192 if (!found || high == UINT16_MAX)
209 SCLogDebug(
"updated %u, content %u to have depth %u "
210 "because of urilen.",
233 *sigerror =
"depth or urilen smaller than content len";
235 "than content len %u",
254 static int DetectUrilenParseTest01(
void)
256 DetectUrilenData *urilend = DetectUrilenParse(
"10");
258 FAIL_IF(urilend->du16.arg1 != 10);
262 DetectUrilenFree(NULL, urilend);
267 static int DetectUrilenParseTest02(
void)
269 DetectUrilenData *urilend = DetectUrilenParse(
" < 10 ");
271 FAIL_IF(urilend->du16.arg1 != 10);
275 DetectUrilenFree(NULL, urilend);
280 static int DetectUrilenParseTest03(
void)
282 DetectUrilenData *urilend = DetectUrilenParse(
" > 10 ");
284 FAIL_IF(urilend->du16.arg1 != 10);
288 DetectUrilenFree(NULL, urilend);
293 static int DetectUrilenParseTest04(
void)
295 DetectUrilenData *urilend = DetectUrilenParse(
" 5 <> 10 ");
297 FAIL_IF(urilend->du16.arg1 != 5);
298 FAIL_IF(urilend->du16.arg2 != 10);
302 DetectUrilenFree(NULL, urilend);
307 static int DetectUrilenParseTest05(
void)
309 DetectUrilenData *urilend = DetectUrilenParse(
"5<>10,norm");
311 FAIL_IF(urilend->du16.arg1 != 5);
312 FAIL_IF(urilend->du16.arg2 != 10);
316 DetectUrilenFree(NULL, urilend);
321 static int DetectUrilenParseTest06(
void)
323 DetectUrilenData *urilend = DetectUrilenParse(
"5<>10,raw");
325 FAIL_IF(urilend->du16.arg1 != 5);
326 FAIL_IF(urilend->du16.arg2 != 10);
330 DetectUrilenFree(NULL, urilend);
335 static int DetectUrilenParseTest07(
void)
337 DetectUrilenData *urilend = DetectUrilenParse(
">10, norm ");
339 FAIL_IF(urilend->du16.arg1 != 10);
343 DetectUrilenFree(NULL, urilend);
348 static int DetectUrilenParseTest08(
void)
350 DetectUrilenData *urilend = DetectUrilenParse(
"<10, norm ");
352 FAIL_IF(urilend->du16.arg1 != 10);
356 DetectUrilenFree(NULL, urilend);
361 static int DetectUrilenParseTest09(
void)
363 DetectUrilenData *urilend = DetectUrilenParse(
">10, raw ");
365 FAIL_IF(urilend->du16.arg1 != 10);
369 DetectUrilenFree(NULL, urilend);
374 static int DetectUrilenParseTest10(
void)
376 DetectUrilenData *urilend = DetectUrilenParse(
"<10, raw ");
378 FAIL_IF(urilend->du16.arg1 != 10);
382 DetectUrilenFree(NULL, urilend);
393 DetectUrilenData **urilend,
const char *
str)
401 if (snprintf(fullstr, 1024,
"alert ip any any -> any any (msg:\"Urilen "
402 "test\"; urilen:%s; sid:1;)",
str) >= 1024) {
414 if ((*de_ctx)->sig_list == NULL) {
418 *sig = (*de_ctx)->sig_list;
420 *urilend = DetectUrilenParse(
str);
435 static int DetectUrilenSetpTest01(
void)
437 DetectUrilenData *urilend = NULL;
441 uint8_t res = DetectUrilenInitTest(&
de_ctx, &sig, &urilend,
"1 <> 3");
448 DetectUrilenFree(NULL, urilend);
454 static int DetectUrilenSigTest01(
void)
457 uint8_t httpbuf1[] =
"POST /suricata HTTP/1.0\r\n"
458 "Host: foo.bar.tld\r\n"
460 uint32_t httplen1 =
sizeof(httpbuf1) - 1;
466 memset(&th_v, 0,
sizeof(th_v));
467 memset(&f, 0,
sizeof(f));
468 memset(&ssn, 0,
sizeof(ssn));
474 f.
proto = IPPROTO_TCP;
490 "(msg:\"Testing urilen\"; "
491 "urilen: <5; sid:1;)");
494 "(msg:\"Testing http_method\"; "
495 "urilen: >5; sid:2;)");
527 void DetectUrilenRegisterTests(
void)
529 UtRegisterTest(
"DetectUrilenParseTest01", DetectUrilenParseTest01);
530 UtRegisterTest(
"DetectUrilenParseTest02", DetectUrilenParseTest02);
531 UtRegisterTest(
"DetectUrilenParseTest03", DetectUrilenParseTest03);
532 UtRegisterTest(
"DetectUrilenParseTest04", DetectUrilenParseTest04);
533 UtRegisterTest(
"DetectUrilenParseTest05", DetectUrilenParseTest05);
534 UtRegisterTest(
"DetectUrilenParseTest06", DetectUrilenParseTest06);
535 UtRegisterTest(
"DetectUrilenParseTest07", DetectUrilenParseTest07);
536 UtRegisterTest(
"DetectUrilenParseTest08", DetectUrilenParseTest08);
537 UtRegisterTest(
"DetectUrilenParseTest09", DetectUrilenParseTest09);
538 UtRegisterTest(
"DetectUrilenParseTest10", DetectUrilenParseTest10);