From ead368268e1c6699c5d9439a5c27d7ada31f2fec Mon Sep 17 00:00:00 2001 From: brenosilva Date: Fri, 15 Jun 2012 20:44:10 +0000 Subject: [PATCH] Add inet_pton for windows --- apache2/msc_util.c | 35 +++++++++++++++++++++++++++++++++++ apache2/msc_util.h | 4 ++++ 2 files changed, 39 insertions(+) diff --git a/apache2/msc_util.c b/apache2/msc_util.c index 900da363..f8505eb8 100644 --- a/apache2/msc_util.c +++ b/apache2/msc_util.c @@ -570,6 +570,41 @@ char *file_basename(apr_pool_t *mp, const char *filename) { return d; } +#ifdef WIN32 +int inet_pton(int family, const char *src, void *dst) { + struct addrinfo addr; + struct sockaddr_in *in = NULL; + struct sockaddr_in6 *in6 = NULL; + struct addrinfo *addr_info = NULL; + + memset(&addr, 0, sizeof(struct addrinfo)); + addr.ai_family = family; + + if (getaddrinfo(src, NULL, &addr, &addr_info) != 0) + return -1; + + if (addr_info) { + if (addr_info->ai_family == AF_INET) { + in = (struct sockaddr_in*)addr_info->ai_addr; + memcpy(dst, &in->sin_addr, 4); + } + else if (addr_info->ai_family == AF_INET6) { + in6 = (struct sockaddr_in6*)addr_info->ai_addr; + memcpy(dst, &in6->sin6_addr, 16); + } + else { + freeaddrinfo(addr_info); + return -1; + } + + freeaddrinfo(addr_info); + return 1; + } + + return -1; +} +#endif + /** * */ diff --git a/apache2/msc_util.h b/apache2/msc_util.h index f32cce22..9a7b2fdd 100644 --- a/apache2/msc_util.h +++ b/apache2/msc_util.h @@ -28,6 +28,10 @@ #include "modsecurity.h" #include "re.h" +#if WIN32 +int DSOLOCAL inet_pton(int family, const char *src, void *dst) +#endif + int DSOLOCAL normalize_path_inplace(unsigned char *input, int len, int win, int *changed); int DSOLOCAL parse_boolean(const char *input);