[nginx] Referer: fixed $invalid_referer.
Ruslan Ermilov
ru at nginx.com
Fri Aug 4 05:03:18 UTC 2017
details: http://hg.nginx.org/nginx/rev/7564a919d333
branches:
changeset: 7079:7564a919d333
user: Ruslan Ermilov <ru at nginx.com>
date: Fri Aug 04 08:01:55 2017 +0300
description:
Referer: fixed $invalid_referer.
The variable was considered non-existent in the absence of any
valid_referers directives.
Given the following config snippet,
location / {
return 200 $invalid_referer;
}
location /referer {
valid_referers server_names;
}
"location /" should work identically and independently on other
"location /referer".
The fix is to always add the $invalid_referer variable as long
as the module is compiled in, as is done by other modules.
diffstat:
src/http/modules/ngx_http_referer_module.c | 39 +++++++++++++++++++----------
1 files changed, 25 insertions(+), 14 deletions(-)
diffs (77 lines):
diff -r 1eb753aa8e5e -r 7564a919d333 src/http/modules/ngx_http_referer_module.c
--- a/src/http/modules/ngx_http_referer_module.c Tue Aug 01 19:12:10 2017 +0300
+++ b/src/http/modules/ngx_http_referer_module.c Fri Aug 04 08:01:55 2017 +0300
@@ -32,6 +32,7 @@ typedef struct {
} ngx_http_referer_conf_t;
+static ngx_int_t ngx_http_referer_add_variables(ngx_conf_t *cf);
static void * ngx_http_referer_create_conf(ngx_conf_t *cf);
static char * ngx_http_referer_merge_conf(ngx_conf_t *cf, void *parent,
void *child);
@@ -77,7 +78,7 @@ static ngx_command_t ngx_http_referer_c
static ngx_http_module_t ngx_http_referer_module_ctx = {
- NULL, /* preconfiguration */
+ ngx_http_referer_add_variables, /* preconfiguration */
NULL, /* postconfiguration */
NULL, /* create main configuration */
@@ -107,6 +108,9 @@ ngx_module_t ngx_http_referer_module =
};
+static ngx_str_t ngx_http_invalid_referer_name = ngx_string("invalid_referer");
+
+
static ngx_int_t
ngx_http_referer_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
uintptr_t data)
@@ -263,6 +267,23 @@ valid:
}
+static ngx_int_t
+ngx_http_referer_add_variables(ngx_conf_t *cf)
+{
+ ngx_http_variable_t *var;
+
+ var = ngx_http_add_variable(cf, &ngx_http_invalid_referer_name,
+ NGX_HTTP_VAR_CHANGEABLE);
+ if (var == NULL) {
+ return NGX_ERROR;
+ }
+
+ var->get_handler = ngx_http_referer_variable;
+
+ return NGX_OK;
+}
+
+
static void *
ngx_http_referer_create_conf(ngx_conf_t *cf)
{
@@ -452,19 +473,9 @@ ngx_http_valid_referers(ngx_conf_t *cf,
{
ngx_http_referer_conf_t *rlcf = conf;
- u_char *p;
- ngx_str_t *value, uri, name;
- ngx_uint_t i;
- ngx_http_variable_t *var;
-
- ngx_str_set(&name, "invalid_referer");
-
- var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
- if (var == NULL) {
- return NGX_CONF_ERROR;
- }
-
- var->get_handler = ngx_http_referer_variable;
+ u_char *p;
+ ngx_str_t *value, uri;
+ ngx_uint_t i;
if (rlcf->keys == NULL) {
rlcf->keys = ngx_pcalloc(cf->temp_pool, sizeof(ngx_hash_keys_arrays_t));
More information about the nginx-devel
mailing list