test->i = l4->cli_addr.ss_family;
if (test->i == AF_INET)
test->ptr = (void *)&((struct sockaddr_in *)&l4->cli_addr)->sin_addr;
- else
+ else if (test->i == AF_INET6)
test->ptr = (void *)&((struct sockaddr_in6 *)(&l4->cli_addr))->sin6_addr;
+ else
+ return 0;
+
test->flags = ACL_TEST_F_READ_ONLY;
return 1;
}
pattern_fetch_src(struct proxy *px, struct session *l4, void *l7, int dir,
const char *arg, int arg_len, union pattern_data *data)
{
+ if (l4->cli_addr.ss_family != AF_INET )
+ return 0;
+
data->ip.s_addr = ((struct sockaddr_in *)&l4->cli_addr)->sin_addr.s_addr;
return 1;
}
{
if (l4->cli_addr.ss_family == AF_INET)
test->i = ntohs(((struct sockaddr_in *)&l4->cli_addr)->sin_port);
- else
+ else if (l4->cli_addr.ss_family == AF_INET6)
test->i = ntohs(((struct sockaddr_in6 *)(&l4->cli_addr))->sin6_port);
+ else
+ return 0;
+
test->flags = 0;
return 1;
}
test->i = l4->frt_addr.ss_family;
if (test->i == AF_INET)
test->ptr = (void *)&((struct sockaddr_in *)&l4->frt_addr)->sin_addr;
- else
+ else if (test->i == AF_INET6)
test->ptr = (void *)&((struct sockaddr_in6 *)(&l4->frt_addr))->sin6_addr;
+ else
+ return 0;
+
test->flags = ACL_TEST_F_READ_ONLY;
return 1;
}
if (!(l4->flags & SN_FRT_ADDR_SET))
get_frt_addr(l4);
+ if (l4->frt_addr.ss_family != AF_INET)
+ return 0;
+
data->ip.s_addr = ((struct sockaddr_in *)&l4->frt_addr)->sin_addr.s_addr;
return 1;
}
if (l4->frt_addr.ss_family == AF_INET)
test->i = ntohs(((struct sockaddr_in *)&l4->frt_addr)->sin_port);
- else
+ else if (l4->frt_addr.ss_family == AF_INET6)
test->i = ntohs(((struct sockaddr_in6 *)(&l4->frt_addr))->sin6_port);
+ else
+ return 0;
+
test->flags = 0;
return 1;
}
if (!(l4->flags & SN_FRT_ADDR_SET))
get_frt_addr(l4);
+ if (l4->frt_addr.ss_family != AF_INET)
+ return 0;
+
data->integer = ntohs(((struct sockaddr_in *)&l4->frt_addr)->sin_port);
return 1;
}