13 #define NGX_HTTP_REFERER_NO_URI_PART ((void *) 4)
17 #define ngx_regex_t void
39 static void * ngx_http_referer_create_conf(
ngx_conf_t *cf);
40 static char * ngx_http_referer_merge_conf(
ngx_conf_t *cf,
void *parent,
46 static char *ngx_http_add_regex_referer(
ngx_conf_t *cf,
48 static int ngx_libc_cdecl ngx_http_cmp_referer_wildcards(
const void *one,
56 ngx_http_valid_referers,
89 ngx_http_referer_create_conf,
90 ngx_http_referer_merge_conf
96 &ngx_http_referer_module_ctx,
97 ngx_http_referer_commands,
114 u_char *p, *ref, *last;
127 && rlcf->regex == NULL
145 if (len >=
sizeof(
"http://i.ru") - 1) {
169 for (p = ref; p < last; p++) {
170 if (*p ==
'/' || *p ==
':') {
194 referer.
len = len - 7;
220 for ( ; p < last; p++) {
268 ngx_http_referer_merge_conf(
ngx_conf_t *cf,
void *parent,
void *child)
275 if (conf->
keys == NULL) {
297 "the \"none\" or \"blocked\" referers are specified "
298 "in the \"valid_referers\" directive "
299 "without any valid referer");
313 hash.
name =
"referer_hash";
332 ngx_http_cmp_referer_wildcards);
352 ngx_http_cmp_referer_wildcards);
407 if (rlcf->
keys == NULL) {
409 if (rlcf->
keys == NULL) {
424 if (value[i].len == 0) {
426 "invalid referer \"%V\"", &value[i]);
435 if (
ngx_strcmp(value[i].data,
"blocked") == 0) {
442 if (
ngx_strcmp(value[i].data,
"server_names") == 0) {
452 if (ngx_http_add_regex_referer(cf, rlcf, &sn[n].name,
463 if (ngx_http_add_referer(cf, rlcf->
keys, &sn[n].
name, &uri)
473 if (value[i].data[0] ==
'~') {
474 if (ngx_http_add_regex_referer(cf, rlcf, &value[i], NULL) !=
NGX_OK)
482 p = (u_char *)
ngx_strchr(value[i].data,
'/');
490 if (ngx_http_add_referer(cf, rlcf->
keys, &value[i], &uri) !=
NGX_OK) {
526 "invalid hostname or wildcard \"%V\"", value);
531 "conflicting parameter \"%V\"", value);
547 if (name->
len == 1) {
554 if (rlcf->regex == NULL) {
595 "the using of the regex \"%V\" requires PCRE library",
605 ngx_http_cmp_referer_wildcards(
const void *one,
const void *two)