76 static void *SCHInfoAllocUserDataOSPolicy(
const char *host_os)
78 int *user_data = NULL;
80 if ( (user_data =
SCMalloc(
sizeof(
int))) == NULL) {
81 FatalError(
"Error allocating memory. Exiting");
87 "SCHInfoAddHostOSInfo()");
92 return (
void *)user_data;
100 static void SCHInfoFreeUserDataOSPolicy(
void *data)
125 char *ip_str_rem = NULL;
126 struct in_addr *ipv4_addr = NULL;
127 struct in6_addr *ipv6_addr = NULL;
128 char *netmask_str = NULL;
129 uint8_t netmask_value = 0;
130 int *user_data = NULL;
131 bool recursive =
false;
133 if (host_os == NULL || host_os_ip_range == NULL ||
134 strlen(host_os_ip_range) == 0) {
140 if (sc_hinfo_tree == NULL)
144 if ( (user_data = SCHInfoAllocUserDataOSPolicy(host_os)) == NULL) {
151 if ( (strcasecmp(host_os_ip_range,
"default")) == 0) {
153 host_os_ip_range =
"0.0.0.0/0";
155 host_os_ip_range =
"::/0";
158 if ( (ip_str =
SCStrdup(host_os_ip_range)) == NULL) {
163 if ((ip_str_rem = strchr(ip_str,
',')) != NULL) {
164 ip_str_rem[0] =
'\0';
170 if ( (netmask_str = strchr(ip_str,
'/')) != NULL) {
171 netmask_str[0] =
'\0';
175 if (strchr(ip_str,
':') == NULL) {
179 SCHInfoFreeUserDataOSPolicy(user_data);
184 if (netmask_str == NULL) {
191 SCHInfoFreeUserDataOSPolicy(user_data);
199 (
void *)user_data, netmask_value);
205 SCHInfoFreeUserDataOSPolicy(user_data);
210 if (netmask_str == NULL) {
217 SCHInfoFreeUserDataOSPolicy(user_data);
225 (
void *)user_data, netmask_value);
234 if (ipv4_addr != NULL)
236 if (ipv6_addr != NULL)
250 struct in_addr *ipv4_addr = NULL;
251 struct in6_addr *ipv6_addr = NULL;
252 void *user_data = NULL;
254 if (ip_addr_str == NULL || strchr(ip_addr_str,
'/') != NULL)
257 if (strchr(ip_addr_str,
':') != NULL) {
265 if (user_data == NULL)
268 return *((
int *)user_data);
277 if (user_data == NULL)
280 return *((
int *)user_data);
294 void *user_data = NULL;
296 if (user_data == NULL)
299 return *((
int *)user_data);
312 void *user_data = NULL;
314 if (user_data == NULL)
317 return *((
int *)user_data);
322 if (sc_hinfo_tree != NULL) {
324 sc_hinfo_tree = NULL;
346 if (host->
val != NULL && strchr(host->
val,
':') != NULL)
349 SCLogError(
"Failed to add host \"%s\" with policy \"%s\" to host "
363 static void SCHInfoCreateContextBackup(
void)
365 sc_hinfo_tree_backup = sc_hinfo_tree;
366 sc_hinfo_tree = NULL;
371 static void SCHInfoRestoreContextBackup(
void)
373 sc_hinfo_tree = sc_hinfo_tree_backup;
374 sc_hinfo_tree_backup = NULL;
383 static int SCHInfoTestInvalidOSFlavour01(
void)
385 SCHInfoCreateContextBackup();
441 SCHInfoRestoreContextBackup();
450 static int SCHInfoTestInvalidIPV4Address02(
void)
452 SCHInfoCreateContextBackup();
479 SCHInfoRestoreContextBackup();
488 static int SCHInfoTestInvalidIPV6Address03(
void)
490 SCHInfoCreateContextBackup();
510 "1921.6311:6241:6422:7352:ABBB:DDDD:EEEE/129",
519 SCHInfoRestoreContextBackup();
530 static int SCHInfoTestValidIPV4Address04(
void)
532 SCHInfoCreateContextBackup();
631 SCHInfoRestoreContextBackup();
642 static int SCHInfoTestValidIPV4Address05(
void)
644 SCHInfoCreateContextBackup();
742 if (inet_pton(AF_INET,
"111.162.208.100", &in) < 0) {
757 if (inet_pton(AF_INET,
"111.162.208.200", &in) < 0) {
772 SCHInfoRestoreContextBackup();
783 static int SCHInfoTestValidIPV6Address06(
void)
785 SCHInfoCreateContextBackup();
790 "2351:2512:6211:6246:235A:6242:2352:62AD",
795 "6961:6121:2132:6241:423A:2135:2461:621D",
800 "DD13:613D:F312:62DD:6213:421A:6212:2652",
805 "9891:2131:2151:6426:1342:674D:622F:2342",
810 "3525:2351:4223:6211:2311:2667:6242:2154",
815 "1511:6211:6726:7777:1212:2333:6222:7722",
820 "2666:6222:7222:2335:6223:7722:3425:2362",
825 "8762:2352:6241:7245:EE23:21AD:2312:622C",
830 "6422:EE1A:2621:34AD:2462:432D:642E:E13A",
835 "3521:7622:6241:6242:7277:1234:2352:6234",
840 "2141:6232:6252:2223:7734:2345:6245:6222",
845 "5222:6432:6432:2322:6662:3423:4322:3245",
908 SCHInfoRestoreContextBackup();
919 static int SCHInfoTestValidIPV6Address07(
void)
921 SCHInfoCreateContextBackup();
926 "2351:2512:6211:6246:235A:6242:2352:62AD",
931 "6961:6121:2132:6241:423A:2135:2461:621D",
936 "DD13:613D:F312:62DD:6213:421A:6212:2652",
941 "9891:2131:2151:6426:1342:674D:622F:2342",
946 "3525:2351:4223:6211:2311:2667:6242:2154",
951 "1511:6211:6726:7777:1212:2333:6222:7722",
956 "2666:6222:7222:2335:6223:7722:3425:2362",
961 "8762:2352:6241:7245:EE23:21AD:2312:622C/68",
966 "8762:2352:6241:7245:EE23:21AD:2412:622C",
971 "8762:2352:6241:7245:EE23:21AD:FFFF:622C",
976 "8762:2352:6241:7245:EE23:21AD:2312:62FF",
981 "8762:2352:6241:7245:EE23:21AD:2121:1212",
1064 SCHInfoRestoreContextBackup();
1075 static int SCHInfoTestValidIPV6Address08(
void)
1077 SCHInfoCreateContextBackup();
1079 struct in6_addr in6;
1083 "2351:2512:6211:6246:235A:6242:2352:62AD",
1088 "6961:6121:2132:6241:423A:2135:2461:621D",
1093 "DD13:613D:F312:62DD:6213:421A:6212:2652",
1098 "9891:2131:2151:6426:1342:674D:622F:2342",
1103 "3525:2351:4223:6211:2311:2667:6242:2154",
1108 "1511:6211:6726:7777:1212:2333:6222:7722",
1113 "2666:6222:7222:2335:6223:7722:3425:2362",
1118 "8762:2352:6241:7245:EE23:21AD:2312:622C/68",
1123 "8762:2352:6241:7245:EE23:21AD:2412:622C",
1128 "8762:2352:6241:7245:EE23:21AD:FFFF:622C",
1133 "8762:2352:6241:7245:EE23:21AD:2312:62FF",
1138 "8762:2352:6241:7245:EE23:21AD:2121:1212",
1221 if (inet_pton(AF_INET6,
"8762:2352:6241:7245:E000:0000:0000:0000", &in6) < 0) {
1228 if (inet_pton(AF_INET6,
"AD23:2DDA:6D1D:A223:E235:0232:1241:1666", &in6) < 0) {
1243 SCHInfoRestoreContextBackup();
1254 static int SCHInfoTestValidIPV4Address09(
void)
1256 SCHInfoCreateContextBackup();
1300 struct sockaddr_in servaddr;
1301 memset(&servaddr, 0,
sizeof(servaddr));
1302 if (inet_pton(AF_INET,
"192.168.0.0", &servaddr.sin_addr) <= 0) {
1313 memset(&servaddr, 0,
sizeof(servaddr));
1314 if (inet_pton(AF_INET,
"192.168.0.0", &servaddr.sin_addr) <= 0) {
1337 memset(&servaddr, 0,
sizeof(servaddr));
1338 if (inet_pton(AF_INET,
"192.168.0.0", &servaddr.sin_addr) <= 0) {
1349 memset(&servaddr, 0,
sizeof(servaddr));
1350 if (inet_pton(AF_INET,
"192.168.0.0", &servaddr.sin_addr) <= 0) {
1363 SCHInfoRestoreContextBackup();
1371 static int SCHInfoTestLoadFromConfig01(
void)
1378 windows: [10.0.0.0/8, 192.168.1.0/24]\n\
1379 linux: [10.0.0.5/32]\n\
1384 SCHInfoCreateContextBackup();
1406 SCHInfoRestoreContextBackup();
1414 static int SCHInfoTestLoadFromConfig02(
void)
1420 one-two: [0.0.0.0/0]\n\
1423 six-seven_eight: [10.0.0.0/8, 192.168.1.0/24]\n\
1424 nine_ten_eleven: [10.0.0.5/32]\n\
1429 SCHInfoCreateContextBackup();
1445 if (strcmp(
"one-two", policy->
name) != 0)
1449 if (strcmp(
"one-two-three", policy->
name) != 0)
1453 if (strcmp(
"four-five", policy->
name) != 0)
1457 if (strcmp(
"six-seven-eight", policy->
name) != 0)
1461 if (strcmp(
"nine-ten-eleven", policy->
name) != 0)
1474 SCHInfoRestoreContextBackup();
1482 static int SCHInfoTestLoadFromConfig03(
void)
1488 bsd-right: [0.0.0.1]\n\
1489 old-linux: [0.0.0.2]\n\
1490 old-solaris: [0.0.0.3]\n\
1491 windows: [0.0.0.4]\n\
1497 SCHInfoCreateContextBackup();
1510 printf(
"Invalid enum map inside\n");
1521 SCHInfoRestoreContextBackup();
1528 static int SCHInfoTestLoadFromConfig04(
void)
1534 bsd_right: [0.0.0.1]\n\
1535 old_linux: [0.0.0.2]\n\
1536 old_solaris: [0.0.0.3]\n\
1537 windows: [0.0.0.4]\n\
1543 SCHInfoCreateContextBackup();
1556 printf(
"Invalid enum map inside\n");
1567 SCHInfoRestoreContextBackup();
1574 static int SCHInfoTestLoadFromConfig05(
void)
1580 bsd_right: [0.0.0.1]\n\
1581 old_linux: [0.0.0.2]\n\
1582 old-solaris: [0.0.0.3]\n\
1583 windows: [0.0.0.4]\n\
1587 SCHInfoCreateContextBackup();
1604 SCHInfoRestoreContextBackup();
1616 SCHInfoTestInvalidOSFlavour01);
1618 SCHInfoTestInvalidIPV4Address02);
1620 SCHInfoTestInvalidIPV6Address03);
1622 SCHInfoTestValidIPV4Address04);
1624 SCHInfoTestValidIPV4Address05);
1626 SCHInfoTestValidIPV6Address06);
1628 SCHInfoTestValidIPV6Address07);
1630 SCHInfoTestValidIPV6Address08);
1632 SCHInfoTestValidIPV4Address09);
1634 UtRegisterTest(
"SCHInfoTestLoadFromConfig01", SCHInfoTestLoadFromConfig01);
1635 UtRegisterTest(
"SCHInfoTestLoadFromConfig02", SCHInfoTestLoadFromConfig02);
1636 UtRegisterTest(
"SCHInfoTestLoadFromConfig03", SCHInfoTestLoadFromConfig03);
1637 UtRegisterTest(
"SCHInfoTestLoadFromConfig04", SCHInfoTestLoadFromConfig04);
1638 UtRegisterTest(
"SCHInfoTestLoadFromConfig05", SCHInfoTestLoadFromConfig05);