Commit 1d331314 authored by Graham Leggett's avatar Graham Leggett
Browse files

mod_session_cookie: Make sure that cookie attributes are correctly

included in the blank cookie when cookies are removed. This fixes an
inability to log out when using mod_auth_form.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@690400 13f79535-47bb-0310-9956-ffa450edef68
parent 89085893
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGES: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@
Changes with Apache 2.3.0
[ When backported to 2.2.x, remove entry from this file ]

  *) mod_session_cookie: Make sure that cookie attributes are correctly
     included in the blank cookie when cookies are removed. This fixes an
     inability to log out when using mod_auth_form. [Graham Leggett]

  *) mod_autoindex: add configuration option to insert string
     in HTML HEAD. [Nick Kew]

+6 −2
Changes for include/util_cookies.h: 6 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -82,16 +82,20 @@ AP_DECLARE(apr_status_t) ap_cookie_write2(request_rec * r, const char *name2, co
 *
 * @param r The request
 * @param name The name of the cookie.
 * @param attrs The string containing additional cookie attributes. If NULL, the
 *              CLEAR_ATTRS will be used.
 */
AP_DECLARE(apr_status_t) ap_cookie_remove(request_rec * r, const char *name);
AP_DECLARE(apr_status_t) ap_cookie_remove(request_rec * r, const char *name, const char *attrs);

/**
 * Remove an RFC2965 compliant cookie.
 *
 * @param r The request
 * @param name2 The name of the cookie.
 * @param attrs2 The string containing additional cookie attributes. If NULL, the
 *               CLEAR_ATTRS will be used.
 */
AP_DECLARE(apr_status_t) ap_cookie_remove2(request_rec * r, const char *name2);
AP_DECLARE(apr_status_t) ap_cookie_remove2(request_rec * r, const char *name2, const char *attrs2);

/**
 * Read a cookie called name, placing its value in val.
+2 −2
Changes for modules/session/mod_session_cookie.c: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ static int session_cookie_save(request_rec * r, session_rec * z)
            ap_cookie_write(r, conf->name, z->encoded, conf->name_attrs, z->maxage);
        }
        else {
            ap_cookie_remove(r, conf->name);
            ap_cookie_remove(r, conf->name, conf->name_attrs);
        }
    }

@@ -80,7 +80,7 @@ static int session_cookie_save(request_rec * r, session_rec * z)
            ap_cookie_write2(r, conf->name2, z->encoded, conf->name2_attrs, z->maxage);
        }
        else {
            ap_cookie_remove2(r, conf->name2);
            ap_cookie_remove2(r, conf->name2, conf->name2_attrs);
        }
    }

+4 −4
Changes for server/util_cookies.c: 4 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -99,12 +99,12 @@ AP_DECLARE(apr_status_t) ap_cookie_write2(request_rec * r, const char *name2, co
 * @param r The request
 * @param name The name of the cookie.
 */
AP_DECLARE(apr_status_t) ap_cookie_remove(request_rec * r, const char *name)
AP_DECLARE(apr_status_t) ap_cookie_remove(request_rec * r, const char *name, const char *attrs)
{

    /* create RFC2109 compliant cookie */
    char *rfc2109 = apr_pstrcat(r->pool, name, "=;",
                                CLEAR_ATTRS, NULL);
                                attrs ? attrs : CLEAR_ATTRS, NULL);
    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, LOG_PREFIX
                  "user '%s' removed cookie: '%s'", r->user, rfc2109);
    apr_table_addn(r->headers_out, SET_COOKIE, rfc2109);
@@ -119,12 +119,12 @@ AP_DECLARE(apr_status_t) ap_cookie_remove(request_rec * r, const char *name)
 * @param r The request
 * @param name2 The name of the cookie.
 */
AP_DECLARE(apr_status_t) ap_cookie_remove2(request_rec * r, const char *name2)
AP_DECLARE(apr_status_t) ap_cookie_remove2(request_rec * r, const char *name2, const char *attrs2)
{

    /* create RFC2965 compliant cookie */
    char *rfc2965 = apr_pstrcat(r->pool, name2, "=;",
                                CLEAR_ATTRS, NULL);
                                attrs2 ? attrs2 : CLEAR_ATTRS, NULL);
    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, LOG_PREFIX
                  "user '%s' removed cookie2: '%s'", r->user, rfc2965);
    apr_table_addn(r->headers_out, SET_COOKIE2, rfc2965);