43 #define DETECT_FLOWVAR_NOT_USED 1
44 #define DETECT_FLOWVAR_TYPE_READ 2
45 #define DETECT_FLOWVAR_TYPE_SET_READ 3
46 #define DETECT_FLOWVAR_TYPE_SET 4
48 #define DETECT_PKTVAR_NOT_USED 1
49 #define DETECT_PKTVAR_TYPE_READ 2
50 #define DETECT_PKTVAR_TYPE_SET_READ 3
51 #define DETECT_PKTVAR_TYPE_SET 4
53 #define DETECT_FLOWBITS_NOT_USED 1
54 #define DETECT_FLOWBITS_TYPE_READ 2
55 #define DETECT_FLOWBITS_TYPE_SET_READ 3
56 #define DETECT_FLOWBITS_TYPE_SET 4
58 #define DETECT_FLOWINT_NOT_USED 1
59 #define DETECT_FLOWINT_TYPE_READ 2
60 #define DETECT_FLOWINT_TYPE_SET_READ 3
61 #define DETECT_FLOWINT_TYPE_SET 4
63 #define DETECT_XBITS_NOT_USED 1
64 #define DETECT_XBITS_TYPE_READ 2
65 #define DETECT_XBITS_TYPE_SET_READ 3
66 #define DETECT_XBITS_TYPE_SET 4
129 while (curr != NULL) {
139 FatalError(
"Fatal error encountered in SCSigRegisterSignatureOrderingFunc. Exiting...");
165 static inline int SCSigGetFlowbitsType(
Signature *sig)
205 if (read > 0 && write == 0) {
207 }
else if (read == 0 && write > 0) {
209 }
else if (read > 0 && write > 0) {
213 SCLogDebug(
"Sig %s typeval %d", sig->
msg, flowbits_user_type);
215 return flowbits_user_type;
218 static inline int SCSigGetFlowintType(
Signature *sig)
263 if (read > 0 && write == 0) {
265 }
else if (read == 0 && write > 0) {
267 }
else if (read > 0 && write > 0) {
271 SCLogDebug(
"Sig %s typeval %d", sig->
msg, flowint_user_type);
273 return flowint_user_type;
290 static inline int SCSigGetFlowvarType(
Signature *sig)
302 for (x = 0; x < pd->
idx; x++) {
323 if (read > 0 && write == 0) {
325 }
else if (read == 0 && write > 0) {
327 }
else if (read > 0 && write > 0) {
348 static inline int SCSigGetPktvarType(
Signature *sig)
360 for (x = 0; x < pd->
idx; x++) {
381 if (read > 0 && write == 0) {
383 }
else if (read == 0 && write > 0) {
385 }
else if (read > 0 && write > 0) {
452 if (read > 0 && write == 0) {
454 }
else if (read == 0 && write > 0) {
456 }
else if (read > 0 && write > 0) {
462 return xbits_user_type;
537 while (funcs != NULL) {
588 subA = SCSigOrder(subA, cmp_func_list);
589 subB = SCSigOrder(subB, cmp_func_list);
594 while (subA != NULL && subB != NULL) {
595 if (SCSigLessThan(subA, subB, cmp_func_list)) {
604 if (result == NULL) {
615 else if (subB == NULL)
741 if (sw1dir > sw2dir) {
743 }
else if (sw1dir < sw2dir) {
785 SCSigProcessUserDataForFlowbits(sw);
786 SCSigProcessUserDataForFlowvar(sw);
787 SCSigProcessUserDataForFlowint(sw);
788 SCSigProcessUserDataForPktvar(sw);
789 SCSigProcessUserDataForHostbits(sw);
790 SCSigProcessUserDataForIPPairbits(sw);
817 while (sig != NULL) {
818 sigw = SCSigAllocSignatureWrapper(sig);
820 SCLogError(
"failed to alloc signature wrapper for rule ordering");
828 sigw->
next = fw_pf_sigw_list;
829 fw_pf_sigw_list = sigw;
832 sigw->
next = fw_af_sigw_list;
833 fw_af_sigw_list = sigw;
836 sigw->
next = td_sigw_list;
845 if (fw_pf_sigw_list) {
847 fw_pf_sigw_list = SCSigOrder(fw_pf_sigw_list, &OrderFn);
849 if (fw_af_sigw_list) {
851 fw_af_sigw_list = SCSigOrder(fw_af_sigw_list, &OrderFn);
862 for (sigw = fw_pf_sigw_list; sigw != NULL;) {
879 for (sigw = fw_af_sigw_list; sigw != NULL;) {
896 for (sigw = td_sigw_list; sigw != NULL;) {
927 SCLogDebug(
"registering signature ordering functions");
929 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
930 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
931 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowintCompare);
932 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
933 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
934 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByHostbitsCompare);
935 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByIPPairbitsCompare);
936 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
952 while (funcs != NULL) {
969 static int SCSigOrderingTest01(
void)
977 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
978 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
979 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
980 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
981 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
982 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
983 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
984 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
985 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
986 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
987 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
990 while (temp != NULL) {
1002 static int SCSigOrderingTest02(
void)
1010 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:1;)");
1014 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:2;)");
1018 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:10; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:3;)");
1022 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; flowvar:http_host,\"www.oisf.net\"; rev:4; priority:1; sid:4;)");
1026 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:1; sid:5;)");
1030 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering\"; pcre:\"/^User-Agent: (?P<flow_http_host>.*)\\r\\n/m\"; content:\"220\"; offset:10; depth:4; rev:4; priority:3; sid:6;)");
1034 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:10; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:3; sid:7;)");
1038 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:10; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:8;)");
1042 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:10; depth:4; pcre:\"/^User-Agent: (?P<pkt_http_host>.*)\\r\\n/m\"; rev:4; priority:3; flowbits:set,TEST.one; flowbits:noalert; sid:9;)");
1046 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:3; sid:10;)");
1050 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:11;)");
1054 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:12;)");
1058 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; pktvar:http_host,\"www.oisf.net\"; priority:2; flowbits:isnotset,TEST.two; sid:13;)");
1062 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; flowbits:set,TEST.two; sid:14;)");
1065 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1066 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1067 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1068 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1069 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1075 while (sig != NULL) {
1076 printf(
"sid: %d\n", sig->
id);
1121 static int SCSigOrderingTest03(
void)
1129 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1130 "offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:3; sid:1;)");
1134 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1135 "offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:2;)");
1139 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1140 "offset:10; depth:4; pcre:\"/^User-Agent: (?P<flow_http_host>.*)\\r\\n/m\"; "
1141 "flowbits:unset,TEST.one; rev:4; priority:2; sid:3;)");
1145 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1146 "offset:0; depth:4; pcre:\"/^User-Agent: (?P<pkt_http_host>.*)\\r\\n/m\"; "
1147 "flowbits:isset,TEST.one; rev:4; priority:1; sid:4;)");
1151 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1152 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; priority:2; sid:5;)");
1156 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1157 "content:\"220\"; offset:10; flowbits:isnotset,TEST.one; pcre:\"/^User-Agent: "
1158 "(?P<flow_http_host>.*)\\r\\n/m\"; rev:4; sid:6;)");
1162 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1163 "content:\"220\"; offset:10; depth:4; pcre:\"/220[- ]/\"; "
1164 "flowbits:unset,TEST.one; rev:4; priority:3; sid:7;)");
1168 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1169 "offset:10; depth:4; pcre:\"/220[- ]/\"; flowbits:unset,TEST.one; rev:4; priority:1; "
1170 "pktvar:http_host,\"www.oisf.net\"; sid:8;)");
1174 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1175 "content:\"220\"; offset:10; depth:4; rev:4; flowbits:set,TEST.one; "
1176 "flowbits:noalert; pktvar:http_host,\"www.oisf.net\"; sid:9;)");
1180 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1181 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:3; sid:10;)");
1185 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1186 "content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:11;)");
1190 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1191 "content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:12;)");
1195 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1196 "offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; flowbits:isnotset,TEST.one; sid:13;)");
1200 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1201 "offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; flowbits:set,TEST.one; sid:14;)");
1204 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1205 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1206 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1207 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1208 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1214 while (sig != NULL) {
1215 printf(
"sid: %d\n", sig->
id);
1258 static int SCSigOrderingTest04(
void)
1267 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1268 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:1;)");
1272 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1273 "pcre:\"/^User-Agent: (?P<flow_http_host>.*)\\r\\n/m\"; content:\"220\"; "
1274 "offset:10; rev:4; priority:3; sid:2;)");
1278 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1279 "content:\"220\"; offset:10; depth:4; pcre:\"/^User-Agent: "
1280 "(?P<flow_http_host>.*)\\r\\n/m\"; rev:4; priority:3; sid:3;)");
1284 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1285 "offset:10; depth:4; pcre:\"/^User-Agent: (?P<flow_http_host>.*)\\r\\n/m\"; rev:4; "
1286 "priority:3; flowvar:http_host,\"www.oisf.net\"; sid:4;)");
1290 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1291 "offset:11; depth:4; pcre:\"/^User-Agent: (?P<pkt_http_host>.*)\\r\\n/m\"; "
1292 "pcre:\"/220[- ]/\"; rev:4; priority:3; sid:5;)");
1296 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1297 "offset:11; depth:4; pcre:\"/^User-Agent: (?P<pkt_http_host>.*)\\r\\n/m\"; "
1298 "pktvar:http_host,\"www.oisf.net\"; rev:4; priority:1; sid:6;)");
1302 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1303 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; flowvar:http_host,\"www.oisf.net\"; "
1304 "pktvar:http_host,\"www.oisf.net\"; priority:1; sid:7;)");
1308 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1309 "content:\"220\"; offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; "
1310 "flowvar:http_host,\"www.oisf.net\"; sid:8;)");
1314 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1315 "content:\"220\"; offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; "
1316 "flowvar:http_host,\"www.oisf.net\"; sid:9;)");
1319 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1320 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1321 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1322 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1323 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1329 while (sig != NULL) {
1330 printf(
"sid: %d\n", sig->
id);
1365 static int SCSigOrderingTest05(
void)
1373 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1374 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:1;)");
1378 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1379 "pcre:\"/^User-Agent: (?P<pkt_http_host>.*)\\r\\n/m\"; content:\"220\"; "
1380 "offset:10; rev:4; priority:3; sid:2;)");
1384 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1385 "content:\"220\"; offset:10; depth:4; pcre:\"/^User-Agent: "
1386 "(?P<pkt_http_host>.*)\\r\\n/m\"; rev:4; priority:3; sid:3;)");
1390 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1391 "offset:10; depth:4; pcre:\"/^User-Agent: (?P<pkt_http_host>.*)\\r\\n/m\"; rev:4; "
1392 "priority:3; pktvar:http_host,\"www.oisf.net\"; sid:4;)");
1396 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1397 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:3; sid:5;)");
1401 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1402 "content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:6;)");
1406 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1407 "content:\"220\"; offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; "
1408 "pktvar:http_host,\"www.oisf.net\"; sid:7;)");
1412 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1413 "content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; "
1414 "pktvar:http_host,\"www.oisf.net\"; sid:8;)");
1417 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1418 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1419 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1420 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1421 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1427 while (sig != NULL) {
1428 printf(
"sid: %d\n", sig->
id);
1459 static int SCSigOrderingTest06(
void)
1468 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1469 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:1;)");
1473 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1474 "content:\"220\"; offset:10; rev:4; priority:2; sid:2;)");
1478 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1479 "content:\"220\"; offset:10; depth:4; rev:4; priority:3; sid:3;)");
1483 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; "
1484 "content:\"220\"; offset:10; depth:4; rev:4; priority:2; sid:4;)");
1488 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1489 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:5;)");
1493 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1494 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:1; sid:6;)");
1497 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1498 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:7;)");
1502 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering\"; content:\"220\"; "
1503 "offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:8;)");
1506 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1507 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1508 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1509 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1510 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1516 while (sig != NULL) {
1517 printf(
"sid: %d\n", sig->
id);
1545 static int SCSigOrderingTest07(
void)
1554 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1555 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; sid:1; rev:4;)");
1559 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1560 "content:\"220\"; offset:10; sid:2; rev:4; priority:2;)");
1564 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1565 "content:\"220\"; offset:10; depth:4; sid:3; rev:4; priority:3;)");
1569 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1570 "content:\"220\"; offset:10; depth:4; sid:4; rev:4; priority:2;)");
1574 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; content:\"220\"; "
1575 "offset:11; depth:4; pcre:\"/220[- ]/\"; sid:5; rev:4; priority:2;)");
1579 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering drop\"; content:\"220\"; "
1580 "offset:11; depth:4; pcre:\"/220[- ]/\"; sid:6; rev:4; priority:1;)");
1584 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering reject\"; content:\"220\"; "
1585 "offset:11; depth:4; pcre:\"/220[- ]/\"; sid:7; rev:4; priority:2;)");
1589 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; content:\"220\"; "
1590 "offset:12; depth:4; pcre:\"/220[- ]/\"; sid:8; rev:4; priority:2;)");
1593 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1594 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1595 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1596 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1597 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1603 while (sig != NULL) {
1604 printf(
"sid: %d\n", sig->
id);
1637 static int SCSigOrderingTest08(
void)
1639 #ifdef HAVE_LIBNET11
1654 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1655 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; sid:1; rev:4;)");
1659 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1660 "content:\"220\"; offset:10; sid:2; rev:4; priority:2;)");
1664 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1665 "content:\"220\"; offset:10; depth:4; sid:3; rev:4; priority:3;)");
1669 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1670 "content:\"220\"; offset:10; depth:4; sid:4; rev:4; priority:2;)");
1674 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; content:\"220\"; "
1675 "offset:11; depth:4; pcre:\"/220[- ]/\"; sid:5; rev:4; priority:2;)");
1679 "reject tcp any !21:902 -> any any (msg:\"Testing sigordering drop\"; content:\"220\"; "
1680 "offset:11; depth:4; pcre:\"/220[- ]/\"; sid:6; rev:4; priority:1;)");
1684 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering reject\"; "
1685 "content:\"220\"; offset:11; depth:4; pcre:\"/220[- ]/\"; sid:7; rev:4;)");
1689 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; content:\"220\"; "
1690 "offset:12; depth:4; pcre:\"/220[- ]/\"; sid:8; rev:4; priority:2;)");
1693 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1694 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1695 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1696 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1697 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1703 while (sig != NULL) {
1704 printf(
"sid: %d\n", sig->
id);
1744 static int SCSigOrderingTest09(
void)
1760 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1761 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; sid:1;)");
1765 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1766 "content:\"220\"; offset:10; priority:2; sid:2;)");
1770 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1771 "content:\"220\"; offset:10; depth:4; priority:3; sid:3;)");
1775 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1776 "content:\"220\"; offset:10; depth:4; rev:4; priority:2; sid:4;)");
1780 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; content:\"220\"; "
1781 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:5;)");
1785 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering drop\"; content:\"220\"; "
1786 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:1; sid:6;)");
1790 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering reject\"; content:\"220\"; "
1791 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:7;)");
1795 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; content:\"220\"; "
1796 "offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:8;)");
1799 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1800 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1801 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1802 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1803 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1809 while (sig != NULL) {
1810 printf(
"sid: %d\n", sig->
id);
1848 static int SCSigOrderingTest10(
void)
1864 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1865 "content:\"220\"; offset:0; depth:4; pcre:\"/220[- ]/\"; rev:4; sid:1;)");
1869 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1870 "content:\"220\"; offset:10; rev:4; priority:2; sid:2;)");
1874 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; "
1875 "content:\"220\"; offset:10; depth:4; rev:4; priority:3; sid:3;)");
1879 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; "
1880 "content:\"220\"; offset:10; depth:4; rev:4; priority:2; sid:4;)");
1884 "pass tcp any !21:902 -> any any (msg:\"Testing sigordering pass\"; content:\"220\"; "
1885 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:5;)");
1889 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering drop\"; content:\"220\"; "
1890 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:1; sid:6;)");
1894 "drop tcp any !21:902 -> any any (msg:\"Testing sigordering reject\"; content:\"220\"; "
1895 "offset:11; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:7;)");
1899 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering alert\"; content:\"220\"; "
1900 "offset:12; depth:4; pcre:\"/220[- ]/\"; rev:4; priority:2; sid:8;)");
1903 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1904 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1905 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1906 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1907 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1913 while (sig != NULL) {
1914 printf(
"sid: %d\n", sig->
id);
1948 static int SCSigOrderingTest11(
void)
1957 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering set\"; "
1958 "flowbits:isnotset,myflow1; rev:4; sid:1;)");
1962 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering unset\"; "
1963 "flowbits:unset,myflow2; rev:4; sid:2;)");
1967 "alert tcp any !21:902 -> any any (msg:\"Testing sigordering unset\"; "
1968 "flowbits:isset, myflow1; flowbits:unset,myflow2; rev:4; priority:3; sid:3;)");
1971 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByActionCompare);
1972 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
1973 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowvarCompare);
1974 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPktvarCompare);
1975 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByPriorityCompare);
1981 while (sig != NULL) {
1982 printf(
"sid: %d\n", sig->
id);
2000 static int SCSigOrderingTest12(
void)
2004 uint8_t buf[] =
"test message";
2006 memset(&
f, 0,
sizeof(
f));
2016 const char *sigs[2];
2017 sigs[0] =
"alert tcp any any -> any any (content:\"test\"; dsize:>0; flowbits:isset,one; flowbits:set,two; sid:1;)";
2018 sigs[1] =
"alert tcp any any -> any any (content:\"test\"; dsize:>0; flowbits:set,one; sid:2;)";
2038 uint32_t sids[2] = {1, 2};
2039 uint32_t results[2] = {1, 1};
2051 static int SCSigOrderingTest13(
void)
2059 sig =
DetectEngineAppendSig(
de_ctx,
"alert tcp any any -> any any (flowbits:isset,bit1; flowbits:set,bit2; flowbits:set,bit3; sid:6;)");
2063 sig =
DetectEngineAppendSig(
de_ctx,
"alert tcp any any -> any any (flowbits:isset,bit1; flowbits:isset,bit2; flowbits:isset,bit3; sid:5;)");
2066 SCSigRegisterSignatureOrderingFunc(
de_ctx, SCSigOrderByFlowbitsCompare);
2071 while (sig != NULL) {
2072 printf(
"sid: %d\n", sig->
id);