mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-30 03:34:29 +03:00
Make ipv6 portable
This commit is contained in:
@@ -192,21 +192,50 @@ static int msre_op_ipmatch_param_init(msre_rule *rule, char **error_msg) {
|
|||||||
maskbits = 128;
|
maskbits = 128;
|
||||||
|
|
||||||
while (maskbits >= 8) {
|
while (maskbits >= 8) {
|
||||||
|
#ifdef LINUX
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0xff;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0xff;
|
||||||
|
#elif SOLARIS2
|
||||||
|
mask6.sin6_addr.u6_addr.u6_addr8[j++] = 0xff;
|
||||||
|
#else
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j++] = 0xff;
|
||||||
|
#endif
|
||||||
maskbits -= 8;
|
maskbits -= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (maskbits-- > 0) {
|
while (maskbits-- > 0) {
|
||||||
|
#ifdef LINUX
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j] >>= 1;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j] >>= 1;
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j] |= 0x80;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j] |= 0x80;
|
||||||
|
#elif SOLARIS2
|
||||||
|
mask6.sin6_addr.u_addr.u6_addr8[j] >>= 1;
|
||||||
|
mask6.sin6_addr.u_addr.u6_addr8[j] |= 0x80;
|
||||||
|
#else
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j] >>= 1;
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j] |= 0x80;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
j++;
|
j++;
|
||||||
|
|
||||||
while (j < 16) {
|
while (j < 16) {
|
||||||
|
#ifdef LINUX
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0;
|
||||||
|
#elif SOLARIS2
|
||||||
|
mask6.sin6_addr.u_addr.u6_addr8[j++] = 0;
|
||||||
|
#else
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j++] = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (j = 0; j < 4; j++) {
|
||||||
for (j = 0; j < 4; j++)
|
#ifdef LINUX
|
||||||
sa.sin6_addr.__in6_u.__u6_addr32[j] &= mask6.sin6_addr.__in6_u.__u6_addr32[j];
|
sa.sin6_addr.__in6_u.__u6_addr32[j] &= mask6.sin6_addr.__in6_u.__u6_addr32[j];
|
||||||
|
#elif SOLARIS2
|
||||||
|
sa.sin6_addr.u6_addr.u6_addr32[j] &= mask6.sin6_addr.u6_addr.u6_addr32[j];
|
||||||
|
#else
|
||||||
|
sa.sin6_addr.__u6_addr.__u6_addr32[j] &= mask6.sin6_addr.__u6_addr.__u6_addr32[j];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,21 +273,50 @@ static int msre_op_ipmatch_param_init(msre_rule *rule, char **error_msg) {
|
|||||||
if(maskbits >= 1 && maskbits <= 128) {
|
if(maskbits >= 1 && maskbits <= 128) {
|
||||||
|
|
||||||
while (maskbits >= 8) {
|
while (maskbits >= 8) {
|
||||||
|
#ifdef LINUX
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0xff;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0xff;
|
||||||
|
#elif SOLARIS2
|
||||||
|
mask6.sin6_addr.u6_addr.u6_addr8[j++] = 0xff;
|
||||||
|
#else
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j++] = 0xff;
|
||||||
|
#endif
|
||||||
maskbits -= 8;
|
maskbits -= 8;
|
||||||
}
|
}
|
||||||
while (maskbits-- > 0) {
|
while (maskbits-- > 0) {
|
||||||
|
#ifdef LINUX
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j] >>= 1;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j] >>= 1;
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j] |= 0x80;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j] |= 0x80;
|
||||||
|
#elif SOLARIS2
|
||||||
|
mask6.sin6_addr.u6_addr.u6_addr8[j] >>= 1;
|
||||||
|
mask6.sin6_addr.u6_addr.u6_addr8[j] |= 0x80;
|
||||||
|
#else
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j] >>= 1;
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j] |= 0x80;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
j++;
|
j++;
|
||||||
|
|
||||||
while (j < 16) {
|
while (j < 16) {
|
||||||
|
#ifdef LINUX
|
||||||
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0;
|
mask6.sin6_addr.__in6_u.__u6_addr8[j++] = 0;
|
||||||
|
#elif SOLARIS2
|
||||||
|
mask6.sin6_addr.u6_addr.u6_addr8[j++] = 0;
|
||||||
|
#else
|
||||||
|
mask6.sin6_addr.__u6_addr.__u6_addr8[j++] = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (j = 0; j < 4; j++)
|
for (j = 0; j < 4; j++) {
|
||||||
|
#ifdef LINUX
|
||||||
sa.sin6_addr.__in6_u.__u6_addr32[j] &= mask6.sin6_addr.__in6_u.__u6_addr32[j];
|
sa.sin6_addr.__in6_u.__u6_addr32[j] &= mask6.sin6_addr.__in6_u.__u6_addr32[j];
|
||||||
|
#elif SOLARIS2
|
||||||
|
sa.sin6_addr.u6_addr.u6_addr32[j] &= mask6.sin6_addr.u6_addr.u6_addr32[j];
|
||||||
|
#else
|
||||||
|
sa.sin6_addr.__u6_addr.__u6_addr32[j] &= mask6.sin6_addr.__u6_addr.__u6_addr32[j];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -392,8 +450,16 @@ static int msre_op_ipmatch_execute(modsec_rec *msr, msre_rule *rule, msre_var *v
|
|||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 16; i++)
|
||||||
{
|
{
|
||||||
|
#ifdef LINUX
|
||||||
if (((sa.sin6_addr.__in6_u.__u6_addr8[i] ^ ipdata->netaddr->sin6_addr.__in6_u.__u6_addr8[i]) &
|
if (((sa.sin6_addr.__in6_u.__u6_addr8[i] ^ ipdata->netaddr->sin6_addr.__in6_u.__u6_addr8[i]) &
|
||||||
ipdata->netaddr->sin6_addr.__in6_u.__u6_addr8[i]) == 0)
|
ipdata->netaddr->sin6_addr.__in6_u.__u6_addr8[i]) == 0)
|
||||||
|
#elif SOLARIS2
|
||||||
|
if (((sa.sin6_addr.u6_addr.u6_addr8[i] ^ ipdata->netaddr->sin6_addr.u6_addr.u6_addr8[i]) &
|
||||||
|
ipdata->netaddr->sin6_addr.__u6_addr.__u6_addr8[i]) == 0)
|
||||||
|
#else
|
||||||
|
if (((sa.sin6_addr.__u6_addr.__u6_addr8[i] ^ ipdata->netaddr->sin6_addr.__u6_addr.__u6_addr8[i]) &
|
||||||
|
ipdata->netaddr->sin6_addr.__u6_addr.__u6_addr8[i]) == 0)
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user