]> granicus.if.org Git - apache/blobdiff - modules/session/mod_session_cookie.c
mod_session_cookie: avoid adding the Set-Cookie header
[apache] / modules / session / mod_session_cookie.c
index 8354537406baf9ea7bdf8f08fb833083ae1d65e0..36168b7ead7727826e65b184b16285b7f63b7a39 100644 (file)
@@ -20,7 +20,6 @@
 #include "http_log.h"
 #include "util_cookies.h"
 
-#define LOG_PREFIX "mod_session_cookie: "
 #define MOD_SESSION_COOKIE "mod_session_cookie"
 
 module AP_MODULE_DECLARE_DATA session_cookie_module;
@@ -39,9 +38,6 @@ typedef struct {
     int remove_set;
 } session_cookie_dir_conf;
 
-AP_DECLARE(int) ap_session_cookie_save(request_rec * r, session_rec * z);
-AP_DECLARE(int) ap_session_cookie_load(request_rec * r, session_rec ** z);
-
 /**
  * Set the cookie and embed the session within it.
  *
@@ -58,32 +54,35 @@ AP_DECLARE(int) ap_session_cookie_load(request_rec * r, session_rec ** z);
  * @param r The request pointer.
  * @param z A pointer to where the session will be written.
  */
-AP_DECLARE(int) ap_session_cookie_save(request_rec * r, session_rec * z)
+static apr_status_t session_cookie_save(request_rec * r, session_rec * z)
 {
 
     session_cookie_dir_conf *conf = ap_get_module_config(r->per_dir_config,
                                                     &session_cookie_module);
 
-    /* don't cache auth protected pages */
-    apr_table_addn(r->headers_out, "Cache-Control", "no-cache");
-
     /* create RFC2109 compliant cookie */
     if (conf->name_set) {
         if (z->encoded && z->encoded[0]) {
-            ap_cookie_write(r, conf->name, z->encoded, conf->name_attrs, z->maxage);
+            ap_cookie_write(r, conf->name, z->encoded, conf->name_attrs,
+                            z->maxage, r->err_headers_out,
+                            NULL);
         }
         else {
-            ap_cookie_remove(r, conf->name);
+            ap_cookie_remove(r, conf->name, conf->name_attrs, r->headers_out,
+                             r->err_headers_out, NULL);
         }
     }
 
     /* create RFC2965 compliant cookie */
     if (conf->name2_set) {
         if (z->encoded && z->encoded[0]) {
-            ap_cookie_write2(r, conf->name2, z->encoded, conf->name2_attrs, z->maxage);
+            ap_cookie_write2(r, conf->name2, z->encoded, conf->name2_attrs,
+                             z->maxage, r->err_headers_out,
+                             NULL);
         }
         else {
-            ap_cookie_remove2(r, conf->name2);
+            ap_cookie_remove2(r, conf->name2, conf->name2_attrs,
+                              r->headers_out, r->err_headers_out, NULL);
         }
     }
 
@@ -107,7 +106,7 @@ AP_DECLARE(int) ap_session_cookie_save(request_rec * r, session_rec * z)
  *
  * On success, this returns APR_SUCCESS.
  */
-AP_DECLARE(int) ap_session_cookie_load(request_rec * r, session_rec ** z)
+static apr_status_t session_cookie_load(request_rec * r, session_rec ** z)
 {
 
     session_cookie_dir_conf *conf = ap_get_module_config(r->per_dir_config,
@@ -140,7 +139,7 @@ AP_DECLARE(int) ap_session_cookie_load(request_rec * r, session_rec ** z)
     }
 
     /* first look in the notes */
-    note = apr_pstrcat(r->pool, MOD_SESSION_COOKIE, name, NULL);
+    note = apr_pstrcat(m->pool, MOD_SESSION_COOKIE, name, NULL);
     zz = (session_rec *)apr_table_get(m->notes, note);
     if (zz) {
         *z = zz;
@@ -151,16 +150,18 @@ AP_DECLARE(int) ap_session_cookie_load(request_rec * r, session_rec ** z)
     ap_cookie_read(r, name, &val, conf->remove);
 
     /* create a new session and return it */
-    zz = (session_rec *) apr_pcalloc(r->pool, sizeof(session_rec));
-    zz->pool = r->pool;
-    zz->entries = apr_table_make(r->pool, 10);
+    zz = (session_rec *) apr_pcalloc(m->pool, sizeof(session_rec));
+    zz->pool = m->pool;
+    zz->entries = apr_table_make(m->pool, 10);
     zz->encoded = val;
-    zz->uuid = (apr_uuid_t *) apr_pcalloc(r->pool, sizeof(apr_uuid_t));
     *z = zz;
 
     /* put the session in the notes so we don't have to parse it again */
     apr_table_setn(m->notes, note, (char *)zz);
 
+    /* don't cache auth protected pages */
+    apr_table_addn(r->headers_out, "Cache-Control", "no-cache, private");
+
     return OK;
 
 }
@@ -175,9 +176,11 @@ static void *create_session_cookie_dir_config(apr_pool_t * p, char *dummy)
     return (void *) new;
 }
 
-static void *merge_session_cookie_dir_config(apr_pool_t * p, void *basev, void *addv)
+static void *merge_session_cookie_dir_config(apr_pool_t * p, void *basev,
+                                             void *addv)
 {
-    session_cookie_dir_conf *new = (session_cookie_dir_conf *) apr_pcalloc(p, sizeof(session_cookie_dir_conf));
+    session_cookie_dir_conf *new = (session_cookie_dir_conf *)
+                                apr_pcalloc(p, sizeof(session_cookie_dir_conf));
     session_cookie_dir_conf *add = (session_cookie_dir_conf *) addv;
     session_cookie_dir_conf *base = (session_cookie_dir_conf *) basev;
 
@@ -207,7 +210,8 @@ static const char *check_string(cmd_parms * cmd, const char *string)
     return NULL;
 }
 
-static const char *set_cookie_name(cmd_parms * cmd, void *config, const char *args)
+static const char *set_cookie_name(cmd_parms * cmd, void *config,
+                                   const char *args)
 {
     char *last;
     char *line = apr_pstrdup(cmd->pool, args);
@@ -222,7 +226,8 @@ static const char *set_cookie_name(cmd_parms * cmd, void *config, const char *ar
     return check_string(cmd, cookie);
 }
 
-static const char *set_cookie_name2(cmd_parms * cmd, void *config, const char *args)
+static const char *set_cookie_name2(cmd_parms * cmd, void *config,
+                                    const char *args)
 {
     char *last;
     char *line = apr_pstrdup(cmd->pool, args);
@@ -262,11 +267,11 @@ static const command_rec session_cookie_cmds[] =
 
 static void register_hooks(apr_pool_t * p)
 {
-    ap_hook_session_load(ap_session_cookie_load, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_session_save(ap_session_cookie_save, NULL, NULL, APR_HOOK_MIDDLE);
+    ap_hook_session_load(session_cookie_load, NULL, NULL, APR_HOOK_MIDDLE);
+    ap_hook_session_save(session_cookie_save, NULL, NULL, APR_HOOK_MIDDLE);
 }
 
-module AP_MODULE_DECLARE_DATA session_cookie_module =
+AP_DECLARE_MODULE(session_cookie) =
 {
     STANDARD20_MODULE_STUFF,
     create_session_cookie_dir_config, /* dir config creater */