From 2791e7766ba69a0de0d524ac7a504bfe195f65a0 Mon Sep 17 00:00:00 2001 From: brenosilva Date: Sat, 16 Jun 2012 19:33:22 +0000 Subject: [PATCH] Fix code for windows --- apache2/msc_tree.c | 64 +++++++++++++++++++++--------------------- apache2/msc_tree.h | 17 ++++++----- apache2/msc_util.c | 18 ++++++++++++ apache2/msc_util.h | 2 ++ apache2/re_operators.c | 4 +-- 5 files changed, 62 insertions(+), 43 deletions(-) diff --git a/apache2/msc_tree.c b/apache2/msc_tree.c index 3a3cded2..8dae4e24 100644 --- a/apache2/msc_tree.c +++ b/apache2/msc_tree.c @@ -37,7 +37,7 @@ CPTTree *CPTCreateRadixTree(apr_pool_t *pool) { return tree; } -void ConvertIPNetmask(uint8_t *buffer, uint8_t netmask, uint16_t ip_bitmask) { +void ConvertIPNetmask(unsigned char *buffer, unsigned char netmask, unsigned int ip_bitmask) { int aux = 0, bytes = 0; int mask = 0, mask_bit = 0; @@ -72,7 +72,7 @@ TreeNode *CPTCreateNode(apr_pool_t *pool) { return node; } -CPTData *CPTCreateCPTData(uint8_t netmask, apr_pool_t *pool) { +CPTData *CPTCreateCPTData(unsigned char netmask, apr_pool_t *pool) { CPTData *prefix_data = apr_palloc(pool, sizeof(CPTData)); @@ -87,8 +87,8 @@ CPTData *CPTCreateCPTData(uint8_t netmask, apr_pool_t *pool) { return prefix_data; } -TreePrefix *InsertDataPrefix(TreePrefix *prefix, uint8_t *ipdata, uint16_t ip_bitmask, - uint8_t netmask, apr_pool_t *pool) { +TreePrefix *InsertDataPrefix(TreePrefix *prefix, unsigned char *ipdata, unsigned int ip_bitmask, + unsigned char netmask, apr_pool_t *pool) { if(prefix == NULL) return NULL; @@ -104,8 +104,8 @@ TreePrefix *InsertDataPrefix(TreePrefix *prefix, uint8_t *ipdata, uint16_t ip_bi return prefix; } -TreePrefix *CPTCreatePrefix(uint8_t *ipdata, uint16_t ip_bitmask, - uint8_t netmask, apr_pool_t *pool) { +TreePrefix *CPTCreatePrefix(unsigned char *ipdata, unsigned int ip_bitmask, + unsigned char netmask, apr_pool_t *pool) { TreePrefix *prefix = NULL; int bytes = ip_bitmask/8; @@ -162,7 +162,7 @@ void CPTAppendToCPTDataList(CPTData *new, CPTData **list) { return; } -int TreePrefixContainNetmask(TreePrefix *prefix, uint8_t netmask) { +int TreePrefixContainNetmask(TreePrefix *prefix, unsigned char netmask) { CPTData *prefix_data = NULL; if (prefix == NULL) { @@ -179,7 +179,7 @@ int TreePrefixContainNetmask(TreePrefix *prefix, uint8_t netmask) { return 0; } -int CheckBitmask(uint8_t netmask, uint16_t ip_bitmask) { +int CheckBitmask(unsigned char netmask, unsigned int ip_bitmask) { switch(netmask) { @@ -198,7 +198,7 @@ int CheckBitmask(uint8_t netmask, uint16_t ip_bitmask) { return 0; } -TreeNode *CPTCreateHead(TreePrefix *prefix, TreeNode *node, CPTTree *tree, uint8_t netmask, uint16_t ip_bitmask) { +TreeNode *CPTCreateHead(TreePrefix *prefix, TreeNode *node, CPTTree *tree, unsigned char netmask, unsigned int ip_bitmask) { if(tree == NULL) return NULL; @@ -216,7 +216,7 @@ TreeNode *CPTCreateHead(TreePrefix *prefix, TreeNode *node, CPTTree *tree, uint8 return node; node->count++; - node->netmasks = apr_palloc(tree->pool, (node->count * sizeof(uint8_t))); + node->netmasks = apr_palloc(tree->pool, (node->count * sizeof(unsigned char))); if(node->netmasks) node->netmasks[0] = netmask; @@ -243,7 +243,7 @@ TreeNode *SetParentNode(TreeNode *node, TreeNode *new_node, CPTTree *tree) { } int InsertNetmask(TreeNode *node, TreeNode *parent, TreeNode *new_node, - CPTTree *tree, uint8_t netmask, uint8_t bitlen) { + CPTTree *tree, unsigned char netmask, unsigned char bitlen) { int i; if (netmask != NETMASK_256-1 && netmask != NETMASK_128) { @@ -258,7 +258,7 @@ int InsertNetmask(TreeNode *node, TreeNode *parent, TreeNode *new_node, } node->count++; - node->netmasks = apr_palloc(tree->pool, (node->count * sizeof(uint8_t))); + node->netmasks = apr_palloc(tree->pool, (node->count * sizeof(unsigned char))); if(node->netmasks == NULL) return 0; @@ -286,12 +286,12 @@ int InsertNetmask(TreeNode *node, TreeNode *parent, TreeNode *new_node, return 0; } -TreeNode *CPTAddElement(uint8_t *ipdata, uint16_t ip_bitmask, CPTTree *tree, uint8_t netmask) { - uint8_t *buffer = NULL; - uint8_t bitlen = 0; +TreeNode *CPTAddElement(unsigned char *ipdata, unsigned int ip_bitmask, CPTTree *tree, unsigned char netmask) { + unsigned char *buffer = NULL; + unsigned char bitlen = 0; int bit_validation = 0, test_bit = 0; int i = 0, j = 0, temp = 0; - uint16_t x, y; + unsigned int x, y; TreeNode *node = NULL, *new_node = NULL; TreeNode *parent = NULL, *i_node = NULL; TreeNode *bottom_node = NULL; @@ -407,7 +407,7 @@ TreeNode *CPTAddElement(uint8_t *ipdata, uint16_t ip_bitmask, CPTTree *tree, uin node->count++; new_node = node; - node->netmasks = apr_palloc(tree->pool, (node->count * sizeof(uint8_t))); + node->netmasks = apr_palloc(tree->pool, (node->count * sizeof(unsigned char))); if ((node->count -1) == 0) { node->netmasks[0] = netmask; @@ -474,7 +474,7 @@ TreeNode *CPTAddElement(uint8_t *ipdata, uint16_t ip_bitmask, CPTTree *tree, uin i++; } - i_node->netmasks = apr_palloc(tree->pool, (node->count - i) * sizeof(uint8_t)); + i_node->netmasks = apr_palloc(tree->pool, (node->count - i) * sizeof(unsigned char)); if(i_node->netmasks == NULL) { return NULL; @@ -514,7 +514,7 @@ TreeNode *CPTAddElement(uint8_t *ipdata, uint16_t ip_bitmask, CPTTree *tree, uin return new_node; } -int TreeCheckData(TreePrefix *prefix, CPTData *prefix_data, uint16_t netmask) { +int TreeCheckData(TreePrefix *prefix, CPTData *prefix_data, unsigned int netmask) { for(prefix_data != NULL; ; prefix_data = prefix_data->next) { if (prefix_data->netmask == netmask) { @@ -525,7 +525,7 @@ int TreeCheckData(TreePrefix *prefix, CPTData *prefix_data, uint16_t netmask) return 0; } -int TreePrefixNetmask(modsec_rec *msr, TreePrefix *prefix, uint16_t netmask, int flag) { +int TreePrefixNetmask(modsec_rec *msr, TreePrefix *prefix, unsigned int netmask, int flag) { CPTData *prefix_data = NULL; int ret = 0; @@ -564,8 +564,8 @@ int TreePrefixNetmask(modsec_rec *msr, TreePrefix *prefix, uint16_t netmask, int return ret; } -TreeNode *CPTRetriveNode(modsec_rec *msr, uint8_t *buffer, uint16_t ip_bitmask, TreeNode *node) { - uint16_t x, y; +TreeNode *CPTRetriveNode(modsec_rec *msr, unsigned char *buffer, unsigned int ip_bitmask, TreeNode *node) { + unsigned int x, y; if(node == NULL) { if (msr->txcfg->debuglog_level >= 9) { @@ -610,7 +610,7 @@ TreeNode *CPTRetriveParentNode(TreeNode *node) { return node; } -TreeNode *CPTFindElementIPNetblock(modsec_rec *msr, uint8_t *ipdata, uint8_t ip_bitmask, TreeNode *node) { +TreeNode *CPTFindElementIPNetblock(modsec_rec *msr, unsigned char *ipdata, unsigned char ip_bitmask, TreeNode *node) { TreeNode *netmask_node = NULL; int mask = 0, bytes = 0; int i = 0, j = 0; @@ -690,10 +690,10 @@ TreeNode *CPTFindElementIPNetblock(modsec_rec *msr, uint8_t *ipdata, uint8_t ip_ return CPTFindElementIPNetblock(msr, ipdata, ip_bitmask, netmask_node->parent); } -TreeNode *CPTFindElement(modsec_rec *msr, uint8_t *ipdata, uint16_t ip_bitmask, CPTTree *tree) { +TreeNode *CPTFindElement(modsec_rec *msr, unsigned char *ipdata, unsigned int ip_bitmask, CPTTree *tree) { TreeNode *node = NULL; int mask = 0, bytes = 0; - uint8_t temp_data[NETMASK_256-1]; + unsigned char temp_data[NETMASK_256-1]; if (tree == NULL) { if (msr->txcfg->debuglog_level >= 9) { @@ -771,7 +771,7 @@ TreeNode *CPTFindElement(modsec_rec *msr, uint8_t *ipdata, uint16_t ip_bitmask, return CPTFindElementIPNetblock(msr, temp_data, ip_bitmask, node); } -TreeNode *CPTIpMatch(modsec_rec *msr, uint8_t *ipdata, CPTTree *tree, int type) { +TreeNode *CPTIpMatch(modsec_rec *msr, unsigned char *ipdata, CPTTree *tree, int type) { if(tree == NULL) { if (msr->txcfg->debuglog_level >= 9) { @@ -807,8 +807,8 @@ TreeNode *CPTIpMatch(modsec_rec *msr, uint8_t *ipdata, CPTTree *tree, int type) } TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) { - uint32_t ip, ret; - uint8_t netmask_v4 = NETMASK_32, netmask_v6 = NETMASK_128; + unsigned long ip, ret; + unsigned char netmask_v4 = NETMASK_32, netmask_v6 = NETMASK_128; char ip_strv4[NETMASK_32], ip_strv6[NETMASK_128]; struct in_addr addr4; struct in6_addr addr6; @@ -820,7 +820,7 @@ TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) { switch(type) { case IPV4_TREE: - bzero(&addr4, sizeof(addr4)); + memset(&addr4, 0, sizeof(addr4)); memset(ip_strv4, 0x0, NETMASK_32); strncpy(ip_strv4, buffer, sizeof(ip_strv4) - 2); @@ -849,10 +849,10 @@ TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) { tree->count++; - return CPTAddElement((uint8_t *)&ip, NETMASK_32, tree, netmask_v4); + return CPTAddElement((unsigned char *)&ip, NETMASK_32, tree, netmask_v4); case IPV6_TREE: - bzero(&addr6, sizeof(addr6)); + memset(&addr6, 0, sizeof(addr6)); memset(ip_strv6, 0x0, NETMASK_128); strncpy(ip_strv6, buffer, sizeof(ip_strv6) - 2); @@ -878,7 +878,7 @@ TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) { tree->count++; - return CPTAddElement((uint8_t *)&addr6.s6_addr, NETMASK_128, tree, netmask_v6); + return CPTAddElement((unsigned char *)&addr6.s6_addr, NETMASK_128, tree, netmask_v6); default: return NULL; } diff --git a/apache2/msc_tree.h b/apache2/msc_tree.h index 96b9fa57..6bda085f 100644 --- a/apache2/msc_tree.h +++ b/apache2/msc_tree.h @@ -16,7 +16,6 @@ #define __MSC_TREE_H__ #include "modsecurity.h" -#include typedef struct CPTData CPTData; typedef struct TreePrefix TreePrefix; @@ -45,20 +44,20 @@ typedef struct TreeRoot TreeRoot; #define NETMASK_2 0x2 struct CPTData { - uint8_t netmask; + unsigned char netmask; struct CPTData *next; }; struct TreePrefix { - uint8_t *buffer; - uint16_t bitlen; + unsigned char *buffer; + unsigned int bitlen; CPTData *prefix_data; }; struct TreeNode { - uint16_t bit; + unsigned int bit; int count; - uint8_t *netmasks; + unsigned char *netmasks; TreePrefix *prefix; struct TreeNode *left, *right; struct TreeNode *parent; @@ -75,8 +74,8 @@ struct TreeRoot { CPTTree *ipv6_tree; }; -CPTTree DSOLOCAL *CPTCreateRadixTree(apr_pool_t *pool); -TreeNode DSOLOCAL *CPTIpMatch(modsec_rec *, uint8_t *, CPTTree *, int); -TreeNode DSOLOCAL *TreeAddIP(const char *, CPTTree *, int); +CPTTree DSOLOCAL *CPTCreateRadixTree(apr_pool_t *pool); +TreeNode DSOLOCAL *CPTIpMatch(modsec_rec *msr, unsigned char *ipdata, CPTTree *tree, int type); +TreeNode DSOLOCAL *TreeAddIP(const char *buffer, CPTTree *tree, int type); #endif /*__MSC_TREE_H__ */ diff --git a/apache2/msc_util.c b/apache2/msc_util.c index ac4ecd4f..a3ecc701 100644 --- a/apache2/msc_util.c +++ b/apache2/msc_util.c @@ -571,6 +571,24 @@ char *file_basename(apr_pool_t *mp, const char *filename) { } #ifdef WIN32 +char *strcasestr(const char *haystack, const char *needle) { + char aux, lower_aux; + int length; + + if ((aux = *needle++) != 0) { + aux = (char)tolower((unsigned char)aux); + length = strlen(needle); + do { + do { + if ((lower_aux = *haystack++) == 0) + return NULL; + } while ((char)tolower((unsigned char)lower_aux) != aux); + } while (strncasecmp(haystack, needle, length) != 0); + haystack--; + } + return ((char *)haystack); +} + int inet_pton(int family, const char *src, void *dst) { struct addrinfo addr; struct sockaddr_in *in = NULL; diff --git a/apache2/msc_util.h b/apache2/msc_util.h index a7b765d5..80c8cadf 100644 --- a/apache2/msc_util.h +++ b/apache2/msc_util.h @@ -29,7 +29,9 @@ #include "re.h" #ifdef WIN32 +#include int DSOLOCAL inet_pton(int family, const char *src, void *dst); +char DSOLOCAL *strcasestr(const char *haystack, const char *needle); #endif int DSOLOCAL normalize_path_inplace(unsigned char *input, int len, int win, int *changed); diff --git a/apache2/re_operators.c b/apache2/re_operators.c index 86d91dc8..f12a8c96 100644 --- a/apache2/re_operators.c +++ b/apache2/re_operators.c @@ -333,7 +333,7 @@ static int msre_op_ipmatchFromFile_execute(modsec_rec *msr, msre_rule *rule, msr return 0; } - if (CPTIpMatch(msr, (uint8_t *)&in.s_addr, rtree->ipv4_tree, IPV4_TREE) != NULL) { + if (CPTIpMatch(msr, (unsigned char *)&in.s_addr, rtree->ipv4_tree, IPV4_TREE) != NULL) { *error_msg = apr_psprintf(msr->mp, "IPmatchFromFile \"%s\" matched at %s.", var->value, var->name); return 1; } @@ -347,7 +347,7 @@ static int msre_op_ipmatchFromFile_execute(modsec_rec *msr, msre_rule *rule, msr return 0; } - if (CPTIpMatch(msr, (uint8_t *)&in6.s6_addr, rtree->ipv6_tree, IPV6_TREE) != NULL) { + if (CPTIpMatch(msr, (unsigned char *)&in6.s6_addr, rtree->ipv6_tree, IPV6_TREE) != NULL) { *error_msg = apr_psprintf(msr->mp, "IPmatchFromFile \"%s\" matched at %s.", var->value, var->name); return 1; }