fix: testing error

This commit is contained in:
A13501350
2025-10-23 00:16:50 +08:00
parent fa4166ffd9
commit 7eca5bb06d
3 changed files with 75 additions and 76 deletions

View File

@@ -175,8 +175,6 @@ endif()
# Compile definitions to match the original Makefile.win
set(MODSECURITY_VERSION_FLAG "VERSION_IIS") # Define the version flag string
target_compile_definitions(${IIS_MODULE_NAME} PRIVATE
WIN32
WINNT
inline=APR_INLINE
AP_DECLARE_STATIC
WITH_CURL
@@ -198,11 +196,11 @@ option(WITH_YAJL "Enable YAJL support" OFF)
if(WITH_YAJL)
# Manually find YAJL if config.cmake is not available (e.g., from vcpkg)
find_path(YAJL_INCLUDE_DIR yajl/yajl_common.h
PATHS "${CMAKE_CURRENT_SOURCE_DIR}/build-${ARCHITECTURE}/vcpkg_installed/${ARCHITECTURE}-windows/include"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}/build/vcpkg_installed/${ARCHITECTURE}-windows/include"
NO_DEFAULT_PATH
)
find_library(YAJL_LIBRARY NAMES yajl
PATHS "${CMAKE_CURRENT_SOURCE_DIR}/build-${ARCHITECTURE}/vcpkg_installed/${ARCHITECTURE}-windows/lib"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}/build/vcpkg_installed/${ARCHITECTURE}-windows/lib"
NO_DEFAULT_PATH
)
@@ -281,17 +279,10 @@ endif()
if(MSVC)
target_compile_options(${IIS_MODULE_NAME} PRIVATE
/nologo
/O2
/W3
/wd4244
/wd4018
/MD
/Zi
)
# Linker options to match the original Makefile.win
set_target_properties(${IIS_MODULE_NAME} PROPERTIES
LINK_FLAGS "/DEBUG /OPT:REF /OPT:ICF"
)
endif()

View File

@@ -17,8 +17,6 @@
#undef inline
#define inline inline
#include "winsock2.h"
// IIS7 Server API header file
#include <Windows.h>
#include <sal.h>
@@ -32,6 +30,8 @@
#include "api.h"
#include "moduleconfig.h"
#include "winsock2.h"
class REQUEST_STORED_CONTEXT : public IHttpStoredContext
{
@@ -90,66 +90,63 @@ class REQUEST_STORED_CONTEXT : public IHttpStoredContext
char *GetIpAddr(apr_pool_t *pool, PSOCKADDR pAddr)
{
if (pAddr == nullptr) {
return apr_pstrdup(pool, "");
}
DWORD addrSize = pAddr->sa_family == AF_INET ? sizeof(SOCKADDR_IN) : sizeof(SOCKADDR_IN6);
auto buf = (char*)apr_palloc(pool, NI_MAXHOST);
if (buf == nullptr) {
return apr_pstrdup(pool, "");
}
buf[0] = '\0';
if (GetNameInfo(pAddr, addrSize, buf, NI_MAXHOST, nullptr, 0, NI_NUMERICHOST) != 0) {
return apr_pstrdup(pool, "");
}
return buf;
const char *format = "%15[0-9.]:%5[0-9]";
char ip[16] = { 0 }; // ip4 addresses have max len 15
char port[6] = { 0 }; // port numbers are 16bit, ie 5 digits max
DWORD len = 50;
char *buf = (char *)apr_palloc(pool, len);
if(buf == NULL)
return "";
buf[0] = 0;
WSAAddressToString(pAddr, sizeof(SOCKADDR), NULL, buf, &len);
// test for IPV4 with port on the end
if (sscanf(buf, format, ip, port) == 2) {
// IPV4 but with port - remove the port
char* input = ":";
char* ipv4 = strtok(buf, input);
return ipv4;
}
return buf;
}
apr_sockaddr_t *CopySockAddr(apr_pool_t *pool, PSOCKADDR pAddr)
{
apr_sockaddr_t *addr = (apr_sockaddr_t *)apr_palloc(pool, sizeof(apr_sockaddr_t));
apr_sockaddr_t *addr = (apr_sockaddr_t *)apr_palloc(pool, sizeof(apr_sockaddr_t));
int adrlen = 16, iplen = 4;
addr->pool = pool;
addr->hostname = "unknown";
addr->servname = addr->hostname;
addr->family = AF_UNSPEC;
addr->addr_str_len = 0;
addr->ipaddr_len = 0;
addr->ipaddr_ptr = nullptr;
addr->salen = 0;
addr->port = 0;
if (pAddr == nullptr) {
return addr;
if(pAddr->sa_family == AF_INET6)
{
adrlen = 46;
iplen = 16;
}
addr->addr_str_len = adrlen;
addr->family = pAddr->sa_family;
if (pAddr->sa_family == AF_INET) {
auto sin = (SOCKADDR_IN *)pAddr;
addr->addr_str_len = INET_ADDRSTRLEN;
addr->ipaddr_len = sizeof(struct in_addr);
addr->ipaddr_ptr = &addr->sa.sin.sin_addr;
addr->sa.sin.sin_family = AF_INET;
addr->sa.sin.sin_port = sin->sin_port; /* keep network byte order */
/* copy address */
memcpy(&addr->sa.sin.sin_addr, &sin->sin_addr, sizeof(struct in_addr));
addr->salen = sizeof(addr->sa);
addr->port = ntohs(sin->sin_port);
} else if (pAddr->sa_family == AF_INET6) {
auto sin6 = (SOCKADDR_IN6 *)pAddr;
addr->addr_str_len = INET6_ADDRSTRLEN;
addr->ipaddr_len = sizeof(struct in6_addr);
addr->ipaddr_ptr = &addr->sa.sin6.sin6_addr;
addr->sa.sin6.sin6_family = AF_INET6;
addr->sa.sin6.sin6_port = sin6->sin6_port;
memcpy(&addr->sa.sin6.sin6_addr, &sin6->sin6_addr, sizeof(struct in6_addr));
addr->salen = sizeof(addr->sa);
addr->port = ntohs(sin6->sin6_port);
}
addr->hostname = "unknown";
#ifdef WIN32
addr->ipaddr_len = sizeof(IN_ADDR);
#else
addr->ipaddr_len = sizeof(struct in_addr);
#endif
addr->ipaddr_ptr = &addr->sa.sin.sin_addr;
addr->pool = pool;
addr->port = 80;
#ifdef WIN32
memcpy(&addr->sa.sin.sin_addr.S_un.S_addr, pAddr->sa_data, iplen);
#else
memcpy(&addr->sa.sin.sin_addr.s_addr, pAddr->sa_data, iplen);
#endif
addr->sa.sin.sin_family = pAddr->sa_family;
addr->sa.sin.sin_port = 80;
addr->salen = sizeof(addr->sa);
addr->servname = addr->hostname;
return addr;
}
@@ -1324,4 +1321,4 @@ BOOL CMyHttpModule::WriteEventViewerLog(LPCSTR szNotification, WORD category)
NULL, 1, 0, &szNotification, NULL );
}
return FALSE;
}
}