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 rs_detect_urilen_parse(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 rs_detect_urilen_free(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.",
232 *sigerror =
"depth or urilen smaller than content len";
234 "than content len %u",
253 static int DetectUrilenParseTest01(
void)
256 DetectUrilenData *urilend = NULL;
258 urilend = DetectUrilenParse(
"10");
259 if (urilend != NULL) {
260 if (urilend->du16.arg1 == 10 && urilend->du16.mode ==
DETECT_UINT_EQ &&
261 !urilend->raw_buffer)
264 DetectUrilenFree(NULL, urilend);
270 static int DetectUrilenParseTest02(
void)
273 DetectUrilenData *urilend = NULL;
275 urilend = DetectUrilenParse(
" < 10 ");
276 if (urilend != NULL) {
277 if (urilend->du16.arg1 == 10 && urilend->du16.mode ==
DETECT_UINT_LT &&
278 !urilend->raw_buffer)
281 DetectUrilenFree(NULL, urilend);
287 static int DetectUrilenParseTest03(
void)
290 DetectUrilenData *urilend = NULL;
292 urilend = DetectUrilenParse(
" > 10 ");
293 if (urilend != NULL) {
294 if (urilend->du16.arg1 == 10 && urilend->du16.mode ==
DETECT_UINT_GT &&
295 !urilend->raw_buffer)
298 DetectUrilenFree(NULL, urilend);
304 static int DetectUrilenParseTest04(
void)
307 DetectUrilenData *urilend = NULL;
309 urilend = DetectUrilenParse(
" 5 <> 10 ");
310 if (urilend != NULL) {
311 if (urilend->du16.arg1 == 5 && urilend->du16.arg2 == 10 &&
315 DetectUrilenFree(NULL, urilend);
321 static int DetectUrilenParseTest05(
void)
324 DetectUrilenData *urilend = NULL;
326 urilend = DetectUrilenParse(
"5<>10,norm");
327 if (urilend != NULL) {
328 if (urilend->du16.arg1 == 5 && urilend->du16.arg2 == 10 &&
332 DetectUrilenFree(NULL, urilend);
338 static int DetectUrilenParseTest06(
void)
341 DetectUrilenData *urilend = NULL;
343 urilend = DetectUrilenParse(
"5<>10,raw");
344 if (urilend != NULL) {
345 if (urilend->du16.arg1 == 5 && urilend->du16.arg2 == 10 &&
349 DetectUrilenFree(NULL, urilend);
355 static int DetectUrilenParseTest07(
void)
358 DetectUrilenData *urilend = NULL;
360 urilend = DetectUrilenParse(
">10, norm ");
361 if (urilend != NULL) {
362 if (urilend->du16.arg1 == 10 && urilend->du16.mode ==
DETECT_UINT_GT &&
363 !urilend->raw_buffer)
366 DetectUrilenFree(NULL, urilend);
372 static int DetectUrilenParseTest08(
void)
375 DetectUrilenData *urilend = NULL;
377 urilend = DetectUrilenParse(
"<10, norm ");
378 if (urilend != NULL) {
379 if (urilend->du16.arg1 == 10 && urilend->du16.mode ==
DETECT_UINT_LT &&
380 !urilend->raw_buffer)
383 DetectUrilenFree(NULL, urilend);
389 static int DetectUrilenParseTest09(
void)
392 DetectUrilenData *urilend = NULL;
394 urilend = DetectUrilenParse(
">10, raw ");
395 if (urilend != NULL) {
396 if (urilend->du16.arg1 == 10 && urilend->du16.mode ==
DETECT_UINT_GT && urilend->raw_buffer)
399 DetectUrilenFree(NULL, urilend);
405 static int DetectUrilenParseTest10(
void)
408 DetectUrilenData *urilend = NULL;
410 urilend = DetectUrilenParse(
"<10, raw ");
411 if (urilend != NULL) {
412 if (urilend->du16.arg1 == 10 && urilend->du16.mode ==
DETECT_UINT_LT && urilend->raw_buffer)
415 DetectUrilenFree(NULL, urilend);
427 DetectUrilenData **urilend,
const char *
str)
435 if (snprintf(fullstr, 1024,
"alert ip any any -> any any (msg:\"Urilen "
436 "test\"; urilen:%s; sid:1;)",
str) >= 1024) {
448 if ((*de_ctx)->sig_list == NULL) {
452 *sig = (*de_ctx)->sig_list;
454 *urilend = DetectUrilenParse(
str);
469 static int DetectUrilenSetpTest01(
void)
472 DetectUrilenData *urilend = NULL;
477 res = DetectUrilenInitTest(&
de_ctx, &sig, &urilend,
"1 <> 2 ");
485 if (urilend != NULL) {
486 if (urilend->du16.arg1 == 1 && urilend->du16.arg2 == 2 &&
493 DetectUrilenFree(NULL, urilend);
502 static int DetectUrilenSigTest01(
void)
506 uint8_t httpbuf1[] =
"POST /suricata HTTP/1.0\r\n"
507 "Host: foo.bar.tld\r\n"
509 uint32_t httplen1 =
sizeof(httpbuf1) - 1;
517 memset(&th_v, 0,
sizeof(th_v));
518 memset(&f, 0,
sizeof(f));
519 memset(&ssn, 0,
sizeof(ssn));
525 f.
proto = IPPROTO_TCP;
544 "alert tcp any any -> any any "
545 "(msg:\"Testing urilen\"; "
546 "urilen: <5; sid:1;)");
552 "alert tcp any any -> any any "
553 "(msg:\"Testing http_method\"; "
554 "urilen: >5; sid:2;)");
565 SCLogDebug(
"toserver chunk 1 returned %" PRId32
", expected 0: ", r);
570 if (htp_state == NULL) {
578 printf(
"sid 1 alerted, but should not have: \n");
582 printf(
"sid 2 did not alerted, but should have: \n");
604 void DetectUrilenRegisterTests(
void)
606 UtRegisterTest(
"DetectUrilenParseTest01", DetectUrilenParseTest01);
607 UtRegisterTest(
"DetectUrilenParseTest02", DetectUrilenParseTest02);
608 UtRegisterTest(
"DetectUrilenParseTest03", DetectUrilenParseTest03);
609 UtRegisterTest(
"DetectUrilenParseTest04", DetectUrilenParseTest04);
610 UtRegisterTest(
"DetectUrilenParseTest05", DetectUrilenParseTest05);
611 UtRegisterTest(
"DetectUrilenParseTest06", DetectUrilenParseTest06);
612 UtRegisterTest(
"DetectUrilenParseTest07", DetectUrilenParseTest07);
613 UtRegisterTest(
"DetectUrilenParseTest08", DetectUrilenParseTest08);
614 UtRegisterTest(
"DetectUrilenParseTest09", DetectUrilenParseTest09);
615 UtRegisterTest(
"DetectUrilenParseTest10", DetectUrilenParseTest10);