--- nginx-0.6.6/src/http/ngx_http_special_response.c 2007-07-29 22:11:39.000000000 +0400 +++ ../nginx-0.6.6/src/http/ngx_http_special_response.c 2008-01-03 05:31:21.000000000 +0300 @@ -323,10 +323,54 @@ ngx_chain_t *out, *cl; ngx_http_err_page_t *err_page; ngx_http_core_loc_conf_t *clcf; + + ngx_list_part_t *part; + ngx_table_elt_t *header; + ngx_table_elt_t *set_cookie; ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http special response: %d, \"%V\"", error, &r->uri); + + part = &r->upstream->headers_in.headers.part; + header = part->elts; + + ngx_log_debug(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, + "upstream_in_header_num: \"%d\"",part->nelts); + + for (i = 0; ; i++) { + if (i >= part->nelts) { + if (part->next == NULL) { + break; + } + + part = part->next; + header = part->elts; + i = 0; + } + + if (header[i].hash == 0) { + continue; + } + + if (ngx_strcasecmp(header[i].key.data, "Set-Cookie") == 0) { + ngx_log_debug(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, + "upstream_in_header: \"%V\"",&header[i].value); + + set_cookie = ngx_list_push(&r->headers_out.headers); + if (set_cookie == NULL) { + return NGX_ERROR; + } + + set_cookie->hash = 1; + set_cookie->key.len = sizeof("Set-Cookie") - 1; + set_cookie->key.data = (u_char *) "Set-Cookie"; + set_cookie->value.len = header[i].value.len; + set_cookie->value.data = header[i].value.data; + } + } + + rc = ngx_http_discard_body(r); if (rc == NGX_HTTP_INTERNAL_SERVER_ERROR) {