From 8bf46a3d87f1b9d8ea7e3de292f26e0fab968132 Mon Sep 17 00:00:00 2001 From: brenosilva Date: Fri, 15 Jun 2012 19:27:59 +0000 Subject: [PATCH] Fix PRNG code and windows compilation errors --- apache2/apache2_config.c | 5 +++-- apache2/msc_crypt.c | 20 +++----------------- apache2/msc_crypt.h | 7 ------- apache2/msc_tree.h | 33 ++++++++++++++++++++------------- 4 files changed, 26 insertions(+), 39 deletions(-) diff --git a/apache2/apache2_config.c b/apache2/apache2_config.c index 78f46660..13393e5f 100644 --- a/apache2/apache2_config.c +++ b/apache2/apache2_config.c @@ -686,6 +686,7 @@ void init_directory_config(directory_config *dcfg) /* Encryption */ if (dcfg->crypto_key == NOT_SET_P) dcfg->crypto_key = getkey(dcfg->mp); + if (dcfg->crypto_key_len == NOT_SET) dcfg->crypto_key_len = strlen(dcfg->crypto_key); if (dcfg->crypto_key_add == NOT_SET) dcfg->crypto_key_add = ENCRYPTION_KEYONLY; if (dcfg->crypto_param_name == NOT_SET_P) dcfg->crypto_param_name = "crypt"; if (dcfg->encryption_is_enabled == NOT_SET) dcfg->encryption_is_enabled = ENCRYPTION_DISABLED; @@ -2315,9 +2316,9 @@ static const char *cmd_encryption_key(cmd_parms *cmd, void *_dcfg, const char *_ char *p1 = NULL; if (dcfg == NULL) return NULL; + if (_p1 == NULL) return NULL; - if (p1 == NULL) return NULL; - if (strcasecmp(p1, "Rand") == 0) { + if (strcasecmp(_p1, "Rand") == 0) { p1 = apr_pstrdup(cmd->pool, getkey(cmd->pool)); dcfg->crypto_key = p1; dcfg->crypto_key_len = strlen(dcfg->crypto_key); diff --git a/apache2/msc_crypt.c b/apache2/msc_crypt.c index e831f729..1838bf9f 100644 --- a/apache2/msc_crypt.c +++ b/apache2/msc_crypt.c @@ -177,24 +177,10 @@ unsigned long prng() { */ unsigned char *getkey(apr_pool_t *mp) { unsigned short int length = 12; - struct glinear data; - uint64_t seed; - char output[13]; - char *key = NULL; + unsigned char *key = NULL; + unsigned long int seed = time(NULL); - output[length] = '\0'; - - seed = data.seed; - srand(data.seed); - while(length--) { - seed *= data.mul; - seed += data.add; - data.seed = seed % data.mod; - output[length] = (rand() % 94 + 33); - srand(data.seed + prng()); - } - - key = apr_psprintf(mp,"%s",output); + key = apr_psprintf(mp,"%lu%lu",prng(),seed); return key; } diff --git a/apache2/msc_crypt.h b/apache2/msc_crypt.h index 8bd74d6d..bf0cfc8f 100644 --- a/apache2/msc_crypt.h +++ b/apache2/msc_crypt.h @@ -27,13 +27,6 @@ #define INT32_MAX (2147483647) #endif -struct glinear { - uint32_t seed; - uint32_t mod; - uint32_t mul; - uint32_t add; -}; - #define N16BITS_MASK 65536L #define N16BITS_MAX 0xFFFF #define N15BITS_MASK 0x7FFF diff --git a/apache2/msc_tree.h b/apache2/msc_tree.h index 04d96444..7c4d9009 100644 --- a/apache2/msc_tree.h +++ b/apache2/msc_tree.h @@ -16,6 +16,13 @@ #define __MSC_TREE_H__ #include "modsecurity.h" +#include + +typedef struct CPTData CPTData; +typedef struct TreePrefix TreePrefix; +typedef struct TreeNode TreeNode; +typedef struct CPTTree CPTTree; +typedef struct TreeRoot TreeRoot; #define IPV4_TREE 0x1 #define IPV6_TREE 0x2 @@ -37,36 +44,36 @@ #define NETMASK_4 0x4 #define NETMASK_2 0x2 -typedef struct CPTData_ { +struct CPTData { uint8_t netmask; - struct CPTData_ *next; -} CPTData; + struct CPTData *next; +}; -typedef struct TreePrefix_ { +struct TreePrefix { uint8_t *buffer; uint16_t bitlen; CPTData *prefix_data; -} TreePrefix; +}; -typedef struct TreeNode_ { +struct TreeNode { uint16_t bit; int count; uint8_t *netmasks; TreePrefix *prefix; - struct TreeNode_ *left, *right; - struct TreeNode_ *parent; -} TreeNode; + struct TreeNode *left, *right; + struct TreeNode *parent; +}; -typedef struct CPTTree_ { +struct CPTTree { int count; apr_pool_t *pool; TreeNode *head; -} CPTTree; +}; -typedef struct TreeRoot_ { +struct TreeRoot { CPTTree *ipv4_tree; CPTTree *ipv6_tree; -} TreeRoot; +}; DSOLOCAL CPTTree *CPTCreateRadixTree(apr_pool_t *pool); DSOLOCAL TreeNode *CPTIpMatch(modsec_rec *, uint8_t *, CPTTree *, int);