52 static void DetectUrilenRegisterTests (
void);
54 static int g_http_uri_buffer_id = 0;
55 static int g_http_raw_uri_buffer_id = 0;
87 static DetectUrilenData *DetectUrilenParse (
const char *urilenstr)
89 return SCDetectUrilenParse(urilenstr);
105 DetectUrilenData *urilend = NULL;
110 urilend = DetectUrilenParse(urilenstr);
114 if (urilend->raw_buffer) {
116 g_http_raw_uri_buffer_id) == NULL) {
121 g_http_uri_buffer_id) == NULL) {
129 DetectUrilenFree(
de_ctx, urilend);
143 DetectUrilenData *urilend = (DetectUrilenData *)ptr;
144 SCDetectUrilenFree(urilend);
156 uint16_t high = UINT16_MAX;
163 DetectUrilenData *dd = (DetectUrilenData *)sm->ctx;
165 switch (dd->du16.mode) {
167 if (dd->du16.arg1 < UINT16_MAX) {
168 high = dd->du16.arg1 + 1;
174 high = dd->du16.arg1;
177 if (dd->du16.arg2 < UINT16_MAX) {
178 high = dd->du16.arg2 + 1;
193 if (!found || high == UINT16_MAX)
210 SCLogDebug(
"updated %u, content %u to have depth %u "
211 "because of urilen.",
234 *sigerror =
"depth or urilen smaller than content len";
236 "than content len %u",
255 static int DetectUrilenParseTest01(
void)
257 DetectUrilenData *urilend = DetectUrilenParse(
"10");
259 FAIL_IF(urilend->du16.arg1 != 10);
263 DetectUrilenFree(NULL, urilend);
268 static int DetectUrilenParseTest02(
void)
270 DetectUrilenData *urilend = DetectUrilenParse(
" < 10 ");
272 FAIL_IF(urilend->du16.arg1 != 10);
276 DetectUrilenFree(NULL, urilend);
281 static int DetectUrilenParseTest03(
void)
283 DetectUrilenData *urilend = DetectUrilenParse(
" > 10 ");
285 FAIL_IF(urilend->du16.arg1 != 10);
289 DetectUrilenFree(NULL, urilend);
294 static int DetectUrilenParseTest04(
void)
296 DetectUrilenData *urilend = DetectUrilenParse(
" 5 <> 10 ");
298 FAIL_IF(urilend->du16.arg1 != 5);
299 FAIL_IF(urilend->du16.arg2 != 10);
303 DetectUrilenFree(NULL, urilend);
308 static int DetectUrilenParseTest05(
void)
310 DetectUrilenData *urilend = DetectUrilenParse(
"5<>10,norm");
312 FAIL_IF(urilend->du16.arg1 != 5);
313 FAIL_IF(urilend->du16.arg2 != 10);
317 DetectUrilenFree(NULL, urilend);
322 static int DetectUrilenParseTest06(
void)
324 DetectUrilenData *urilend = DetectUrilenParse(
"5<>10,raw");
326 FAIL_IF(urilend->du16.arg1 != 5);
327 FAIL_IF(urilend->du16.arg2 != 10);
331 DetectUrilenFree(NULL, urilend);
336 static int DetectUrilenParseTest07(
void)
338 DetectUrilenData *urilend = DetectUrilenParse(
">10, norm ");
340 FAIL_IF(urilend->du16.arg1 != 10);
344 DetectUrilenFree(NULL, urilend);
349 static int DetectUrilenParseTest08(
void)
351 DetectUrilenData *urilend = DetectUrilenParse(
"<10, norm ");
353 FAIL_IF(urilend->du16.arg1 != 10);
357 DetectUrilenFree(NULL, urilend);
362 static int DetectUrilenParseTest09(
void)
364 DetectUrilenData *urilend = DetectUrilenParse(
">10, raw ");
366 FAIL_IF(urilend->du16.arg1 != 10);
370 DetectUrilenFree(NULL, urilend);
375 static int DetectUrilenParseTest10(
void)
377 DetectUrilenData *urilend = DetectUrilenParse(
"<10, raw ");
379 FAIL_IF(urilend->du16.arg1 != 10);
383 DetectUrilenFree(NULL, urilend);
394 DetectUrilenData **urilend,
const char *
str)
402 if (snprintf(fullstr, 1024,
"alert ip any any -> any any (msg:\"Urilen "
403 "test\"; urilen:%s; sid:1;)",
str) >= 1024) {
415 if ((*de_ctx)->sig_list == NULL) {
419 *sig = (*de_ctx)->sig_list;
421 *urilend = DetectUrilenParse(
str);
436 static int DetectUrilenSetpTest01(
void)
438 DetectUrilenData *urilend = NULL;
442 uint8_t res = DetectUrilenInitTest(&
de_ctx, &sig, &urilend,
"1 <> 3");
449 DetectUrilenFree(NULL, urilend);
455 static int DetectUrilenSigTest01(
void)
458 uint8_t httpbuf1[] =
"POST /suricata HTTP/1.0\r\n"
459 "Host: foo.bar.tld\r\n"
461 uint32_t httplen1 =
sizeof(httpbuf1) - 1;
467 memset(&th_v, 0,
sizeof(th_v));
469 memset(&f, 0,
sizeof(f));
470 memset(&ssn, 0,
sizeof(ssn));
476 f.
proto = IPPROTO_TCP;
492 "(msg:\"Testing urilen\"; "
493 "urilen: <5; sid:1;)");
496 "(msg:\"Testing http_method\"; "
497 "urilen: >5; sid:2;)");
529 void DetectUrilenRegisterTests(
void)
531 UtRegisterTest(
"DetectUrilenParseTest01", DetectUrilenParseTest01);
532 UtRegisterTest(
"DetectUrilenParseTest02", DetectUrilenParseTest02);
533 UtRegisterTest(
"DetectUrilenParseTest03", DetectUrilenParseTest03);
534 UtRegisterTest(
"DetectUrilenParseTest04", DetectUrilenParseTest04);
535 UtRegisterTest(
"DetectUrilenParseTest05", DetectUrilenParseTest05);
536 UtRegisterTest(
"DetectUrilenParseTest06", DetectUrilenParseTest06);
537 UtRegisterTest(
"DetectUrilenParseTest07", DetectUrilenParseTest07);
538 UtRegisterTest(
"DetectUrilenParseTest08", DetectUrilenParseTest08);
539 UtRegisterTest(
"DetectUrilenParseTest09", DetectUrilenParseTest09);
540 UtRegisterTest(
"DetectUrilenParseTest10", DetectUrilenParseTest10);