/** \test Test the Urilen keyword setup */ static int DetectUrilenParseTest10(void) { int ret = 0; DetectUrilenData *urilend = NULL; urilend = DetectUrilenParse("<10, raw "); if (urilend != NULL) { if (urilend->urilen1 == 10 && urilend->mode == DETECT_URILEN_LT && urilend->raw_buffer) ret = 1; DetectUrilenFree(urilend); } return ret; }
/** \test Test the Urilen keyword setup */ static int DetectUrilenParseTest05(void) { int ret = 0; DetectUrilenData *urilend = NULL; urilend = DetectUrilenParse("5<>10,norm"); if (urilend != NULL) { if (urilend->urilen1 == 5 && urilend->urilen2 == 10 && urilend->mode == DETECT_URILEN_RA && !urilend->raw_buffer) ret = 1; DetectUrilenFree(urilend); } return ret; }
/** * \brief this function is used to parse urilen data into the current signature * * \param de_ctx pointer to the Detection Engine Context * \param s pointer to the Current Signature * \param urilenstr pointer to the user provided urilen options * * \retval 0 on Success * \retval -1 on Failure */ static int DetectUrilenSetup (DetectEngineCtx *de_ctx, Signature *s, char *urilenstr) { SCEnter(); DetectUrilenData *urilend = NULL; SigMatch *sm = NULL; if (s->alproto != ALPROTO_UNKNOWN && s->alproto != ALPROTO_HTTP) { SCLogError(SC_ERR_CONFLICTING_RULE_KEYWORDS, "rule contains a non http " "alproto set"); goto error; } urilend = DetectUrilenParse(urilenstr); if (urilend == NULL) goto error; sm = SigMatchAlloc(); if (sm == NULL) goto error; sm->type = DETECT_AL_URILEN; sm->ctx = (void *)urilend; if (urilend->raw_buffer) SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_HRUDMATCH); else SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_UMATCH); /* Flagged the signature as to inspect the app layer data */ s->flags |= SIG_FLAG_APPLAYER; s->alproto = ALPROTO_HTTP; SCReturnInt(0); error: DetectUrilenFree(urilend); SCReturnInt(-1); }