]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Fix bug in mod_usertrack when no CookieName is set.
authorJustin Erenkrantz <jerenkrantz@apache.org>
Mon, 8 Mar 2004 23:29:11 +0000 (23:29 +0000)
committerJustin Erenkrantz <jerenkrantz@apache.org>
Mon, 8 Mar 2004 23:29:11 +0000 (23:29 +0000)
PR: 24483
Submitted by: Manni Wood <manniwood planet-save.com>
Reviewed by: Cliff Woolley, Justin Erenkrantz, Sander Striker

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/APACHE_2_0_BRANCH@102892 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/metadata/mod_usertrack.c

diff --git a/CHANGES b/CHANGES
index c0d2ca00c1b5ceefd1771d700c6c247ba009c539..7d71e09fedd0a7e1d2fa2efe3d8872570c88480e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,8 @@
 Changes with Apache 2.0.49
 
+  *) Fix bug in mod_usertrack when no CookieName is set.  PR 24483.
+     [Manni Wood <manniwood planet-save.com>]
+
   *) Fix some piped log problems: bogus "piped log program '(null)'
      failed" messages during restart and problem with the logger
      respawning again after Apache is stopped.  PR 21648, PR 24805.
index 7408e79b3c5f34da5ec105a82ae489826b356066..6a345a76f470388f1174f03578dfc51d86883ef1 100644 (file)
@@ -156,6 +156,20 @@ static void make_cookie(request_rec *r)
  * which has three subexpressions, $0..$2 */
 #define NUM_SUBS 3
 
+static void set_and_comp_regexp(cookie_dir_rec *dcfg, 
+                                apr_pool_t *p,
+                                const char *cookie_name) 
+{
+    /* The goal is to end up with this regexp, 
+     * ^cookie_name=([^;]+)|;[\t]+cookie_name=([^;]+) 
+     * with cookie_name obviously substituted either
+     * with the real cookie name set by the user in httpd.conf, or with the
+     * default COOKIE_NAME. */
+    dcfg->regexp_string = apr_pstrcat(p, "^", cookie_name, "=([^;]+)|;[ \t]+", cookie_name, "=([^;]+)", NULL);
+
+    dcfg->regexp = ap_pregcomp(p, dcfg->regexp_string, REG_EXTENDED);
+}
+
 static int spot_cookie(request_rec *r)
 {
     cookie_dir_rec *dcfg = ap_get_module_config(r->per_dir_config,
@@ -214,6 +228,11 @@ static void *make_cookie_dir(apr_pool_t *p, char *d)
     dcfg->cookie_domain = NULL;
     dcfg->style = CT_UNSET;
     dcfg->enabled = 0;
+
+    /* In case the user does not use the CookieName directive,
+     * we need to compile the regexp for the default cookie name. */
+    set_and_comp_regexp(dcfg, p, COOKIE_NAME);
+
     return dcfg;
 }
 
@@ -299,18 +318,10 @@ static const char *set_cookie_name(cmd_parms *cmd, void *mconfig,
 {
     cookie_dir_rec *dcfg = (cookie_dir_rec *) mconfig;
 
-    /* The goal is to end up with this regexp,
-     * ^cookie_name=([^;]+)|;[ \t]+cookie_name=([^;]+)
-     * with cookie_name
-     * obviously substituted with the real cookie name set by the
-     * user in httpd.conf. */
-    dcfg->regexp_string = apr_pstrcat(cmd->pool, "^", name,
-                                      "=([^;]+)|;[ \t]+", name,
-                                      "=([^;]+)", NULL);
-
     dcfg->cookie_name = apr_pstrdup(cmd->pool, name);
 
-    dcfg->regexp = ap_pregcomp(cmd->pool, dcfg->regexp_string, REG_EXTENDED);
+    set_and_comp_regexp(dcfg, cmd->pool, name);
+
     if (dcfg->regexp == NULL) {
         return "Regular expression could not be compiled.";
     }