From 8c8c583dec3707f8aaf839081a0711a055230a47 Mon Sep 17 00:00:00 2001 From: brenosilva Date: Tue, 26 Apr 2011 17:55:41 +0000 Subject: [PATCH] Rewriting parser for gsblookup --- apache2/re_operators.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/apache2/re_operators.c b/apache2/re_operators.c index bc17aec2..38cb6ff7 100644 --- a/apache2/re_operators.c +++ b/apache2/re_operators.c @@ -1136,12 +1136,14 @@ static int msre_op_gsbLookup_execute(modsec_rec *msr, msre_rule *rule, msre_var gsb_db *gsb = msr->txcfg->gsb; const char *match = NULL; unsigned int match_length; - int rv, i, ret, count_slash; + int rv, i, ret, count_slash, j; unsigned int size = var->value_len; char *base = NULL, *domain = NULL, *savedptr = NULL; char *str = NULL, *canon = NULL, *dot = NULL; char *data = NULL, *ptr = NULL, *url = NULL; int capture, domain_len; + int d_pos = -1; + int s_pos = -1; if (error_msg == NULL) return -1; *error_msg = NULL; @@ -1285,6 +1287,14 @@ static int msre_op_gsbLookup_execute(modsec_rec *msr, msre_rule *rule, msre_var /* Do the same for subdomains */ + for(j=0; jruleset->mp, match); while (*str != '\0') { @@ -1294,6 +1304,11 @@ static int msre_op_gsbLookup_execute(modsec_rec *msr, msre_rule *rule, msre_var domain++; domain_len = strlen(domain); + d_pos = strchr(domain,'.') - domain; + + if(s_pos >= 0 && d_pos >= 0 && d_pos > s_pos) + break; + if(*domain != '/') { if(domain[domain_len-1] == '.')