mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00
Updated header_handler in apache2filter and apache_hooks
This commit is contained in:
parent
494dbdb1c1
commit
aaaf67e19e
2 changed files with 78 additions and 44 deletions
|
@ -91,7 +91,7 @@ php_apache_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
|
|||
}
|
||||
|
||||
static int
|
||||
php_apache_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
|
||||
php_apache_sapi_header_handler(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC)
|
||||
{
|
||||
php_struct *ctx;
|
||||
ap_filter_t *f;
|
||||
|
@ -100,29 +100,44 @@ php_apache_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_str
|
|||
ctx = SG(server_context);
|
||||
f = ctx->r->output_filters;
|
||||
|
||||
val = strchr(sapi_header->header, ':');
|
||||
switch(op) {
|
||||
case SAPI_HEADER_DELETE:
|
||||
apr_table_unset(ctx->r->headers_out, sapi_header->header);
|
||||
return 0;
|
||||
|
||||
if (!val) {
|
||||
sapi_free_header(sapi_header);
|
||||
return 0;
|
||||
case SAPI_HEADER_DELETE_ALL:
|
||||
apr_table_clear(ctx->r->headers_out);
|
||||
return 0;
|
||||
|
||||
case SAPI_HEADER_ADD:
|
||||
case SAPI_HEADER_REPLACE:
|
||||
val = strchr(sapi_header->header, ':');
|
||||
|
||||
if (!val) {
|
||||
sapi_free_header(sapi_header);
|
||||
return 0;
|
||||
}
|
||||
ptr = val;
|
||||
|
||||
*val = '\0';
|
||||
|
||||
do {
|
||||
val++;
|
||||
} while (*val == ' ');
|
||||
|
||||
if (!strcasecmp(sapi_header->header, "content-type"))
|
||||
ctx->r->content_type = apr_pstrdup(ctx->r->pool, val);
|
||||
else if (op == SAPI_HEADER_REPLACE)
|
||||
apr_table_set(ctx->r->headers_out, sapi_header->header, val);
|
||||
else
|
||||
apr_table_add(ctx->r->headers_out, sapi_header->header, val);
|
||||
|
||||
*ptr = ':';
|
||||
return SAPI_HEADER_ADD;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
ptr = val;
|
||||
|
||||
*val = '\0';
|
||||
|
||||
do {
|
||||
val++;
|
||||
} while (*val == ' ');
|
||||
|
||||
if (!strcasecmp(sapi_header->header, "content-type"))
|
||||
ctx->r->content_type = apr_pstrdup(ctx->r->pool, val);
|
||||
else if (sapi_header->replace)
|
||||
apr_table_set(ctx->r->headers_out, sapi_header->header, val);
|
||||
else
|
||||
apr_table_add(ctx->r->headers_out, sapi_header->header, val);
|
||||
|
||||
*ptr = ':';
|
||||
return SAPI_HEADER_ADD;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -34,7 +34,7 @@ static void php_save_umask(void);
|
|||
static void php_restore_umask(void);
|
||||
static int sapi_apache_read_post(char *buffer, uint count_bytes TSRMLS_DC);
|
||||
static char *sapi_apache_read_cookies(TSRMLS_D);
|
||||
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC);
|
||||
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC);
|
||||
static int sapi_apache_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC);
|
||||
static int send_php(request_rec *r, int display_source_mode, char *filename);
|
||||
static int send_parsed_php(request_rec * r);
|
||||
|
@ -308,35 +308,54 @@ static char *sapi_apache_read_cookies(TSRMLS_D)
|
|||
|
||||
/* {{{ sapi_apache_header_handler
|
||||
*/
|
||||
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
|
||||
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC)
|
||||
{
|
||||
char *header_name, *header_content, *p;
|
||||
request_rec *r = (request_rec *) SG(server_context);
|
||||
|
||||
header_name = sapi_header->header;
|
||||
|
||||
header_content = p = strchr(header_name, ':');
|
||||
if (!p) {
|
||||
efree(sapi_header->header);
|
||||
if(!r) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
*p = 0;
|
||||
do {
|
||||
header_content++;
|
||||
} while (*header_content==' ');
|
||||
switch(op) {
|
||||
case SAPI_HEADER_DELETE_ALL:
|
||||
clear_table(r->headers_out);
|
||||
return 0;
|
||||
|
||||
if (!strcasecmp(header_name, "Content-Type")) {
|
||||
r->content_type = pstrdup(r->pool, header_content);
|
||||
} else if (!strcasecmp(header_name, "Set-Cookie")) {
|
||||
table_add(r->headers_out, header_name, header_content);
|
||||
} else {
|
||||
table_set(r->headers_out, header_name, header_content);
|
||||
case SAPI_HEADER_DELETE:
|
||||
table_unset(r->headers_out, sapi_header->header);
|
||||
return 0;
|
||||
|
||||
case SAPI_HEADER_ADD:
|
||||
case SAPI_HEADER_REPLACE:
|
||||
header_name = sapi_header->header;
|
||||
|
||||
header_content = p = strchr(header_name, ':');
|
||||
if (!p) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
*p = 0;
|
||||
do {
|
||||
header_content++;
|
||||
} while (*header_content==' ');
|
||||
|
||||
if (!strcasecmp(header_name, "Content-Type")) {
|
||||
r->content_type = pstrdup(r->pool, header_content);
|
||||
} else if (!strcasecmp(header_name, "Set-Cookie")) {
|
||||
table_add(r->headers_out, header_name, header_content);
|
||||
} else if (op == SAPI_HEADER_REPLACE) {
|
||||
table_set(r->headers_out, header_name, header_content);
|
||||
} else {
|
||||
table_add(r->headers_out, header_name, header_content);
|
||||
}
|
||||
|
||||
*p = ':'; /* a well behaved header handler shouldn't change its original arguments */
|
||||
|
||||
return SAPI_HEADER_ADD;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
*p = ':'; /* a well behaved header handler shouldn't change its original arguments */
|
||||
|
||||
return SAPI_HEADER_ADD;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue