mirror of
https://github.com/nginx/nginx.git
synced 2026-02-03 20:29:27 -05:00
Merge 0d9b85ab82 into 86e5930e76
This commit is contained in:
commit
7f11c3b0a9
1 changed files with 79 additions and 0 deletions
|
|
@ -42,6 +42,8 @@ static ngx_int_t ngx_http_variable_cookie(ngx_http_request_t *r,
|
|||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_argument(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_argument_unescape(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
#if (NGX_HAVE_TCP_INFO)
|
||||
static ngx_int_t ngx_http_variable_tcpinfo(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
|
|
@ -79,6 +81,8 @@ static void ngx_http_variable_set_args(ngx_http_request_t *r,
|
|||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_is_args(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_uargs(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_document_root(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_realpath_root(ngx_http_request_t *r,
|
||||
|
|
@ -270,6 +274,9 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
|
|||
offsetof(ngx_http_request_t, args),
|
||||
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
|
||||
|
||||
{ ngx_string("uargs"), NULL, ngx_http_variable_uargs,
|
||||
0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
|
||||
|
||||
{ ngx_string("is_args"), NULL, ngx_http_variable_is_args,
|
||||
0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
|
||||
|
||||
|
|
@ -408,6 +415,9 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
|
|||
{ ngx_string("arg_"), NULL, ngx_http_variable_argument,
|
||||
0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_PREFIX, 0 },
|
||||
|
||||
{ ngx_string("uarg_"), NULL, ngx_http_variable_argument_unescape,
|
||||
0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_PREFIX, 0 },
|
||||
|
||||
ngx_http_null_variable
|
||||
};
|
||||
|
||||
|
|
@ -1133,6 +1143,44 @@ ngx_http_variable_argument(ngx_http_request_t *r, ngx_http_variable_value_t *v,
|
|||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_variable_argument_unescape(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data)
|
||||
{
|
||||
ngx_str_t *name = (ngx_str_t *) data;
|
||||
|
||||
u_char *arg, *dst, *src;
|
||||
size_t len;
|
||||
ngx_str_t value;
|
||||
|
||||
len = name->len - (sizeof("uarg_") - 1);
|
||||
arg = name->data + sizeof("uarg_") - 1;
|
||||
|
||||
if (len == 0 || ngx_http_arg(r, arg, len, &value) != NGX_OK) {
|
||||
v->not_found = 1;
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
/* allocate buffer for unescaped value (can only shrink or stay same) */
|
||||
dst = ngx_pnalloc(r->pool, value.len);
|
||||
if (dst == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
v->data = dst;
|
||||
src = value.data;
|
||||
|
||||
ngx_unescape_uri(&dst, &src, value.len, 0);
|
||||
|
||||
v->len = dst - v->data;
|
||||
v->valid = 1;
|
||||
v->no_cacheable = 0;
|
||||
v->not_found = 0;
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
#if (NGX_HAVE_TCP_INFO)
|
||||
|
||||
static ngx_int_t
|
||||
|
|
@ -1624,6 +1672,37 @@ ngx_http_variable_is_args(ngx_http_request_t *r,
|
|||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_variable_uargs(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data)
|
||||
{
|
||||
u_char *dst, *src;
|
||||
|
||||
if (r->args.len == 0) {
|
||||
*v = ngx_http_variable_null_value;
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
/* allocate buffer for unescaped value (can only shrink or stay same) */
|
||||
dst = ngx_pnalloc(r->pool, r->args.len);
|
||||
if (dst == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
v->data = dst;
|
||||
src = r->args.data;
|
||||
|
||||
ngx_unescape_uri(&dst, &src, r->args.len, 0);
|
||||
|
||||
v->len = dst - v->data;
|
||||
v->valid = 1;
|
||||
v->no_cacheable = 0;
|
||||
v->not_found = 0;
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_variable_document_root(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data)
|
||||
|
|
|
|||
Loading…
Reference in a new issue