static int DetectAddressIPv4CutNot05(void) { DetectAddress *a = NULL; DetectAddress *b = NULL; struct in_addr in; int result = 1; if ( (a = DetectAddressInit()) == NULL) return 0; if (inet_pton(AF_INET, "0.0.0.0", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "255.255.255.255", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCutNotIPv4(a, &b) == -1); DetectAddressFree(a); if (b != NULL) DetectAddressFree(b); return result; error: DetectAddressFree(a); if (b != NULL) DetectAddressFree(b); return 0; }
static int DetectAddressIPv4CutNot09(void) { DetectAddress *a = NULL; DetectAddress *b = NULL; struct in_addr in; int result = 1; if ( (a = DetectAddressInit()) == NULL) return 0; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCutNotIPv4(a, &b) == 0); if (inet_pton(AF_INET, "0.0.0.0", &in) < 0) goto error; result &= (a->ip.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; result &= (a->ip2.addr_data32[0] = in.s_addr); if (b == NULL) { result = 0; goto error; } else { result &= 1; } if (inet_pton(AF_INET, "192.168.1.3", &in) < 0) goto error; result &= (b->ip.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "255.255.255.255", &in) < 0) goto error; result &= (b->ip2.addr_data32[0] = in.s_addr); DetectAddressFree(a); if (b != NULL) DetectAddressFree(b); return result; error: DetectAddressFree(a); if (b != NULL) DetectAddressFree(b); return 0; }
static int DetectAddressIPv4IsCompleteIPSpace02(void) { DetectAddress *a = NULL; struct in_addr in; int result = 1; if ( (a = DetectAddressInit()) == NULL) goto error; if (inet_pton(AF_INET, "0.0.0.0", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "255.255.255.255", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 1); if (inet_pton(AF_INET, "0.0.0.1", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "255.255.255.255", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 0); DetectAddressFree(a); if ( (a = DetectAddressInit()) == NULL) goto error; if (inet_pton(AF_INET, "0.0.0.0", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "255.255.255.254", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 0); DetectAddressFree(a); return result; error: if (a != NULL) DetectAddressFree(a); return 0; }
/** * \internal * \brief this function will free memory associated with DetectThresholdData * * \param de pointer to DetectThresholdData */ static void DetectThresholdFree(void *de_ptr) { DetectThresholdData *de = (DetectThresholdData *)de_ptr; if (de) { DetectAddressFree(de->addr); SCFree(de); } }
static int DetectAddressIPv4IsCompleteIPSpace03(void) { DetectAddress *a = NULL; DetectAddress *temp = NULL; struct in_addr in; int result = 1; if ( (a = DetectAddressInit()) == NULL) goto error; temp = a; if (inet_pton(AF_INET, "0.0.0.0", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 0); if ( (temp->next = DetectAddressInit()) == NULL) goto error; temp = temp->next; if (inet_pton(AF_INET, "1.2.3.5", &in) < 0) goto error; temp->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "126.36.62.61", &in) < 0) goto error; temp->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 0); if ( (temp->next = DetectAddressInit()) == NULL) goto error; temp = temp->next; if (inet_pton(AF_INET, "126.36.62.62", &in) < 0) goto error; temp->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "222.52.21.62", &in) < 0) goto error; temp->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 0); if ( (temp->next = DetectAddressInit()) == NULL) goto error; temp = temp->next; if (inet_pton(AF_INET, "222.52.21.63", &in) < 0) goto error; temp->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "255.255.255.254", &in) < 0) goto error; temp->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 0); if ( (temp->next = DetectAddressInit()) == NULL) goto error; temp = temp->next; if (inet_pton(AF_INET, "255.255.255.255", &in) < 0) goto error; temp->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "255.255.255.255", &in) < 0) goto error; temp->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressIsCompleteIPSpaceIPv4(a) == 1); DetectAddressFree(a); return result; error: if (a != NULL) DetectAddressFree(a); return 0; }
static int DetectAddressIPv4TestAddressCmp01(void) { struct in_addr in; int result = 1; DetectAddress *a = DetectAddressInit(); if (a == NULL) return 0; DetectAddress *b = DetectAddressInit(); if (b == NULL) { DetectAddressFree(a); return 0; } if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_EQ); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_ES); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_ES); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_ES); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_ES); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_ES); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_EB); if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_EB); if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_EB); if (inet_pton(AF_INET, "1.2.3.5", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_EB); if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "128.128.128.128", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "128.128.128.128", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_LE); if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "128.128.128.128", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_LE); if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_LE); if (inet_pton(AF_INET, "170.170.170.169", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_LE); if (inet_pton(AF_INET, "170.170.170.169", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_LE); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_LT); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "185.185.185.185", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; /* we could get a LE */ result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_LT); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; /* we could get a LE */ result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_LT); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_LT); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_LT); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_LT); if (inet_pton(AF_INET, "128.128.128.128", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "128.128.128.128", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_GE); if (inet_pton(AF_INET, "128.128.128.128", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.3", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_GE); if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_GE); if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.169", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "180.180.180.180", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_GE); if (inet_pton(AF_INET, "170.170.170.169", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_GE); if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.169.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_GE); if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "200.200.200.200", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "185.185.185.185", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) == ADDRESS_GT); if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "200.200.200.200", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_GT); if (inet_pton(AF_INET, "182.168.1.2", &in) < 0) goto error; a->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "200.200.200.200", &in) < 0) goto error; a->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "170.170.170.170", &in) < 0) goto error; b->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; b->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressCmpIPv4(a, b) != ADDRESS_GT); DetectAddressFree(a); DetectAddressFree(b); return result; error: DetectAddressFree(a); DetectAddressFree(b); return 0; }
static int DetectAddressIPv4Join10(void) { struct in_addr in; int result = 1; DetectAddress *source = DetectAddressInit(); if (source == NULL) return 0; DetectAddress *target = DetectAddressInit(); if (target == NULL) { DetectAddressFree(source); return 0; } if (inet_pton(AF_INET, "128.51.61.124", &in) < 0) goto error; target->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; target->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; source->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; source->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressJoinIPv4(NULL, target, source) == 0); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; result &= (target->ip.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; result &= (target->ip2.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; target->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; target->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.5", &in) < 0) goto error; source->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.1", &in) < 0) goto error; source->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressJoinIPv4(NULL, target, source) == 0); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; result &= (target->ip.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; result &= (target->ip2.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; target->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; target->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "128.1.5.15", &in) < 0) goto error; source->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "200.202.200.200", &in) < 0) goto error; source->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressJoinIPv4(NULL, target, source) == 0); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; result &= (target->ip.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "200.202.200.200", &in) < 0) goto error; result &= (target->ip2.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "128.51.61.124", &in) < 0) goto error; target->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; target->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; source->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; source->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressJoinIPv4(NULL, target, source) == 0); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; result &= (target->ip.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; result &= (target->ip2.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; target->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; target->ip2.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; source->ip.addr_data32[0] = in.s_addr; if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; source->ip2.addr_data32[0] = in.s_addr; result &= (DetectAddressJoinIPv4(NULL, target, source) == 0); if (inet_pton(AF_INET, "1.2.3.4", &in) < 0) goto error; result &= (target->ip.addr_data32[0] == in.s_addr); if (inet_pton(AF_INET, "192.168.1.2", &in) < 0) goto error; result &= (target->ip2.addr_data32[0] == in.s_addr); DetectAddressFree(source); DetectAddressFree(target); return result; error: DetectAddressFree(source); DetectAddressFree(target); return 0; }
/** * \brief Cut groups and merge sigs * * a = 1.2.3.4, b = 1.2.3.4-1.2.3.5 * must result in: a == 1.2.3.4, b == 1.2.3.5, c == NULL * * a = 1.2.3.4, b = 1.2.3.3-1.2.3.5 * must result in: a == 1.2.3.3, b == 1.2.3.4, c == 1.2.3.5 * * a = 1.2.3.0/24 b = 1.2.3.128-1.2.4.10 * must result in: a == 1.2.3.0/24, b == 1.2.4.0-1.2.4.10, c == NULL * * a = 1.2.3.4, b = 1.2.3.0/24 * must result in: a == 1.2.3.0-1.2.3.3, b == 1.2.3.4, c == 1.2.3.5-1.2.3.255 * * \retval 0 On success. * \retval -1 On failure. */ int DetectAddressCutIPv4(DetectEngineCtx *de_ctx, DetectAddress *a, DetectAddress *b, DetectAddress **c) { uint32_t a_ip1 = SCNtohl(a->ip.addr_data32[0]); uint32_t a_ip2 = SCNtohl(a->ip2.addr_data32[0]); uint32_t b_ip1 = SCNtohl(b->ip.addr_data32[0]); uint32_t b_ip2 = SCNtohl(b->ip2.addr_data32[0]); DetectAddress *tmp = NULL; DetectAddress *tmp_c = NULL; int r = 0; /* default to NULL */ *c = NULL; r = DetectAddressCmpIPv4(a, b); if (r != ADDRESS_ES && r != ADDRESS_EB && r != ADDRESS_LE && r != ADDRESS_GE) { SCLogDebug("we shouldn't be here"); goto error; } /* get a place to temporary put sigs lists */ tmp = DetectAddressInit(); if (tmp == NULL) goto error; /* we have 3 parts: [aaa[abab)bbb] * part a: a_ip1 <-> b_ip1 - 1 * part b: b_ip1 <-> a_ip2 * part c: a_ip2 + 1 <-> b_ip2 */ if (r == ADDRESS_LE) { SCLogDebug("DetectAddressCutIPv4: r == ADDRESS_LE"); a->ip.addr_data32[0] = htonl(a_ip1); a->ip2.addr_data32[0] = htonl(b_ip1 - 1); b->ip.addr_data32[0] = htonl(b_ip1); b->ip2.addr_data32[0] = htonl(a_ip2); tmp_c = DetectAddressInit(); if (tmp_c == NULL) goto error; tmp_c->ip.family = AF_INET; tmp_c->ip.addr_data32[0] = htonl(a_ip2 + 1); tmp_c->ip2.addr_data32[0] = htonl(b_ip2); *c = tmp_c; /* we have 3 parts: [bbb[baba]aaa] * part a: b_ip1 <-> a_ip1 - 1 * part b: a_ip1 <-> b_ip2 * part c: b_ip2 + 1 <-> a_ip2 */ } else if (r == ADDRESS_GE) { SCLogDebug("DetectAddressCutIPv4: r == ADDRESS_GE"); a->ip.addr_data32[0] = htonl(b_ip1); a->ip2.addr_data32[0] = htonl(a_ip1 - 1); b->ip.addr_data32[0] = htonl(a_ip1); b->ip2.addr_data32[0] = htonl(b_ip2); tmp_c = DetectAddressInit(); if (tmp_c == NULL) goto error; tmp_c->ip.family = AF_INET; tmp_c->ip.addr_data32[0] = htonl(b_ip2 + 1); tmp_c->ip2.addr_data32[0] = htonl(a_ip2); *c = tmp_c; /* we have 2 or three parts: * * 2 part: [[abab]bbb] or [bbb[baba]] * part a: a_ip1 <-> a_ip2 * part b: a_ip2 + 1 <-> b_ip2 * * part a: b_ip1 <-> a_ip1 - 1 * part b: a_ip1 <-> a_ip2 * * 3 part [bbb[aaa]bbb] * becomes[aaa[bbb]ccc] * * part a: b_ip1 <-> a_ip1 - 1 * part b: a_ip1 <-> a_ip2 * part c: a_ip2 + 1 <-> b_ip2 */ } else if (r == ADDRESS_ES) { SCLogDebug("DetectAddressCutIPv4: r == ADDRESS_ES"); if (a_ip1 == b_ip1) { SCLogDebug("DetectAddressCutIPv4: 1"); a->ip.addr_data32[0] = htonl(a_ip1); a->ip2.addr_data32[0] = htonl(a_ip2); b->ip.addr_data32[0] = htonl(a_ip2 + 1); b->ip2.addr_data32[0] = htonl(b_ip2); } else if (a_ip2 == b_ip2) { SCLogDebug("DetectAddressCutIPv4: 2"); a->ip.addr_data32[0] = htonl(b_ip1); a->ip2.addr_data32[0] = htonl(a_ip1 - 1); b->ip.addr_data32[0] = htonl(a_ip1); b->ip2.addr_data32[0] = htonl(a_ip2); } else { SCLogDebug("3"); a->ip.addr_data32[0] = htonl(b_ip1); a->ip2.addr_data32[0] = htonl(a_ip1 - 1); b->ip.addr_data32[0] = htonl(a_ip1); b->ip2.addr_data32[0] = htonl(a_ip2); tmp_c = DetectAddressInit(); if (tmp_c == NULL) goto error; tmp_c->ip.family = AF_INET; tmp_c->ip.addr_data32[0] = htonl(a_ip2 + 1); tmp_c->ip2.addr_data32[0] = htonl(b_ip2); *c = tmp_c; } /* we have 2 or three parts: * * 2 part: [[baba]aaa] or [aaa[abab]] * part a: b_ip1 <-> b_ip2 * part b: b_ip2 + 1 <-> a_ip2 * * part a: a_ip1 <-> b_ip1 - 1 * part b: b_ip1 <-> b_ip2 * * 3 part [aaa[bbb]aaa] * becomes[aaa[bbb]ccc] * * part a: a_ip1 <-> b_ip2 - 1 * part b: b_ip1 <-> b_ip2 * part c: b_ip2 + 1 <-> a_ip2 */ } else if (r == ADDRESS_EB) { SCLogDebug("DetectAddressCutIPv4: r == ADDRESS_EB"); if (a_ip1 == b_ip1) { SCLogDebug("DetectAddressCutIPv4: 1"); a->ip.addr_data32[0] = htonl(b_ip1); a->ip2.addr_data32[0] = htonl(b_ip2); b->ip.addr_data32[0] = htonl(b_ip2 + 1); b->ip2.addr_data32[0] = htonl(a_ip2); } else if (a_ip2 == b_ip2) { SCLogDebug("DetectAddressCutIPv4: 2"); a->ip.addr_data32[0] = htonl(a_ip1); a->ip2.addr_data32[0] = htonl(b_ip1 - 1); b->ip.addr_data32[0] = htonl(b_ip1); b->ip2.addr_data32[0] = htonl(b_ip2); } else { SCLogDebug("DetectAddressCutIPv4: 3"); a->ip.addr_data32[0] = htonl(a_ip1); a->ip2.addr_data32[0] = htonl(b_ip1 - 1); b->ip.addr_data32[0] = htonl(b_ip1); b->ip2.addr_data32[0] = htonl(b_ip2); tmp_c = DetectAddressInit(); if (tmp_c == NULL) goto error; tmp_c->ip.family = AF_INET; tmp_c->ip.addr_data32[0] = htonl(b_ip2 + 1); tmp_c->ip2.addr_data32[0] = htonl(a_ip2); *c = tmp_c; } } if (tmp != NULL) DetectAddressFree(tmp); return 0; error: if (tmp != NULL) DetectAddressFree(tmp); return -1; }