annotate src/http/modules/ngx_http_auth_basic_module.c @ 7281:bd6563e81cea

Limit req: improved handling of negative times. Negative times can appear since workers only update time on an event loop iteration start. If a worker was blocked for a long time during an event loop iteration, it is possible that another worker already updated the time stored in the node. As such, time since last update of the node (ms) will be negative. Previous code used ngx_abs(ms) in the calculations. That is, negative times were effectively treated as positive ones. As a result, it was not possible to maintain high request rates, where the same node can be updated multiple times from during an event loop iteration. In particular, this affected setups with many SSL handshakes, see http://mailman.nginx.org/pipermail/nginx/2018-May/056291.html. Fix is to only update the last update time stored in the node if the new time is larger than previously stored one. If a future time is stored in the node, we preserve this time as is. To prevent breaking things on platforms without monotonic time available if system time is updated backwards, a safety limit of 60 seconds is used. If the time stored in the node is more than 60 seconds in the future, we assume that the time was changed backwards and update lr->last to the current time.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 30 May 2018 15:40:34 +0300
parents e48ac0136ee3
children 0cb942c1c1aa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3922
diff changeset
4 * Copyright (C) Nginx, Inc.
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
3922
9c057d5e1c27 "$apr1", "{PLAIN}", and "{SSHA}" password methods in auth basic module
Igor Sysoev <igor@sysoev.ru>
parents: 3887
diff changeset
11 #include <ngx_crypt.h>
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #define NGX_HTTP_AUTH_BUF_SIZE 2048
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 typedef struct {
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
18 ngx_http_complex_value_t *realm;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
19 ngx_http_complex_value_t user_file;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 } ngx_http_auth_basic_loc_conf_t;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 static ngx_int_t ngx_http_auth_basic_handler(ngx_http_request_t *r);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 static ngx_int_t ngx_http_auth_basic_crypt_handler(ngx_http_request_t *r,
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
25 ngx_str_t *passwd, ngx_str_t *realm);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 static ngx_int_t ngx_http_auth_basic_set_realm(ngx_http_request_t *r,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 ngx_str_t *realm);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 static void ngx_http_auth_basic_close(ngx_file_t *file);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 static void *ngx_http_auth_basic_create_loc_conf(ngx_conf_t *cf);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 static char *ngx_http_auth_basic_merge_loc_conf(ngx_conf_t *cf,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 void *parent, void *child);
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
32 static ngx_int_t ngx_http_auth_basic_init(ngx_conf_t *cf);
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
33 static char *ngx_http_auth_basic_user_file(ngx_conf_t *cf, ngx_command_t *cmd,
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
34 void *conf);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 static ngx_command_t ngx_http_auth_basic_commands[] = {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 { ngx_string("auth_basic"),
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
40 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LMT_CONF
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
41 |NGX_CONF_TAKE1,
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
42 ngx_http_set_complex_value_slot,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 NGX_HTTP_LOC_CONF_OFFSET,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 offsetof(ngx_http_auth_basic_loc_conf_t, realm),
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
45 NULL },
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 { ngx_string("auth_basic_user_file"),
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
48 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LMT_CONF
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
49 |NGX_CONF_TAKE1,
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
50 ngx_http_auth_basic_user_file,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 NGX_HTTP_LOC_CONF_OFFSET,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 offsetof(ngx_http_auth_basic_loc_conf_t, user_file),
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 NULL },
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 ngx_null_command
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 };
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
59 static ngx_http_module_t ngx_http_auth_basic_module_ctx = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
60 NULL, /* preconfiguration */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
61 ngx_http_auth_basic_init, /* postconfiguration */
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 NULL, /* create main configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 NULL, /* init main configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 NULL, /* create server configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 NULL, /* merge server configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 ngx_http_auth_basic_create_loc_conf, /* create location configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 ngx_http_auth_basic_merge_loc_conf /* merge location configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 };
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 ngx_module_t ngx_http_auth_basic_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
75 NGX_MODULE_V1,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 &ngx_http_auth_basic_module_ctx, /* module context */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 ngx_http_auth_basic_commands, /* module directives */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
79 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
80 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
81 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
82 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
83 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
84 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
85 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
86 NGX_MODULE_V1_PADDING
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 };
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 static ngx_int_t
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 ngx_http_auth_basic_handler(ngx_http_request_t *r)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 off_t offset;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ssize_t n;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 ngx_fd_t fd;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
96 ngx_int_t rc;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
97 ngx_err_t err;
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
98 ngx_str_t pwd, realm, user_file;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
99 ngx_uint_t i, level, login, left, passwd;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ngx_file_t file;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 ngx_http_auth_basic_loc_conf_t *alcf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 u_char buf[NGX_HTTP_AUTH_BUF_SIZE];
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 enum {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 sw_login,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 sw_passwd,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 sw_skip
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 } state;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 alcf = ngx_http_get_module_loc_conf(r, ngx_http_auth_basic_module);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
111 if (alcf->realm == NULL || alcf->user_file.value.data == NULL) {
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
112 return NGX_DECLINED;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
113 }
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
114
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
115 if (ngx_http_complex_value(r, alcf->realm, &realm) != NGX_OK) {
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
116 return NGX_ERROR;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
117 }
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
118
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
119 if (realm.len == 3 && ngx_strncmp(realm.data, "off", 3) == 0) {
1786
adca43955f79 return NGX_DECLINED if access directives are not active,
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
120 return NGX_DECLINED;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
123 rc = ngx_http_auth_basic_user(r);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
125 if (rc == NGX_DECLINED) {
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
126
5433
c37f34bda5ea Auth basic: "info" logging level on no user/password.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4948
diff changeset
127 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
128 "no user/password was provided for basic authentication");
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
129
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
130 return ngx_http_auth_basic_set_realm(r, &realm);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
133 if (rc == NGX_ERROR) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
137 if (ngx_http_complex_value(r, &alcf->user_file, &user_file) != NGX_OK) {
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
138 return NGX_ERROR;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
139 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
140
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
141 fd = ngx_open_file(user_file.data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143 if (fd == NGX_INVALID_FILE) {
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
144 err = ngx_errno;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
145
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
146 if (err == NGX_ENOENT) {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
147 level = NGX_LOG_ERR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
148 rc = NGX_HTTP_FORBIDDEN;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
149
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
150 } else {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
151 level = NGX_LOG_CRIT;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
152 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
153 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
154
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
155 ngx_log_error(level, r->connection->log, err,
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
156 ngx_open_file_n " \"%s\" failed", user_file.data);
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
157
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
158 return rc;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 ngx_memzero(&file, sizeof(ngx_file_t));
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163 file.fd = fd;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
164 file.name = user_file;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 file.log = r->connection->log;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 state = sw_login;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 passwd = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 login = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 left = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 offset = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 for ( ;; ) {
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
174 i = left;
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
175
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 n = ngx_read_file(&file, buf + left, NGX_HTTP_AUTH_BUF_SIZE - left,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177 offset);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 if (n == NGX_ERROR) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180 ngx_http_auth_basic_close(&file);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 if (n == 0) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 for (i = left; i < left + n; i++) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189 switch (state) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191 case sw_login:
2524
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
192 if (login == 0) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
193
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
194 if (buf[i] == '#' || buf[i] == CR) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
195 state = sw_skip;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
196 break;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
197 }
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
198
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
199 if (buf[i] == LF) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
200 break;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
201 }
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
204 if (buf[i] != r->headers_in.user.data[login]) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 state = sw_skip;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
209 if (login == r->headers_in.user.len) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210 state = sw_passwd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 passwd = i + 1;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214 login++;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
215
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 case sw_passwd:
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219 if (buf[i] == LF || buf[i] == CR || buf[i] == ':') {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220 buf[i] = '\0';
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 ngx_http_auth_basic_close(&file);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 pwd.len = i - passwd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 pwd.data = &buf[passwd];
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
227 return ngx_http_auth_basic_crypt_handler(r, &pwd, &realm);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 case sw_skip:
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 if (buf[i] == LF) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 state = sw_login;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 login = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242 if (state == sw_passwd) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 left = left + n - passwd;
3887
e7798b5e990a use memmove() in appropriate places
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
244 ngx_memmove(buf, &buf[passwd], left);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 passwd = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 } else {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 left = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 offset += n;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254 ngx_http_auth_basic_close(&file);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
256 if (state == sw_passwd) {
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
257 pwd.len = i - passwd;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1786
diff changeset
258 pwd.data = ngx_pnalloc(r->pool, pwd.len + 1);
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
259 if (pwd.data == NULL) {
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
260 return NGX_HTTP_INTERNAL_SERVER_ERROR;
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
261 }
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
262
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
263 ngx_cpystrn(pwd.data, &buf[passwd], pwd.len + 1);
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
264
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
265 return ngx_http_auth_basic_crypt_handler(r, &pwd, &realm);
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
266 }
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
267
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
268 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7218
e48ac0136ee3 Auth basic: prevent null character in error log (ticket #1494).
Vadim Filimonov <fffilimonov@yandex.ru>
parents: 7109
diff changeset
269 "user \"%V\" was not found in \"%s\"",
e48ac0136ee3 Auth basic: prevent null character in error log (ticket #1494).
Vadim Filimonov <fffilimonov@yandex.ru>
parents: 7109
diff changeset
270 &r->headers_in.user, user_file.data);
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
271
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
272 return ngx_http_auth_basic_set_realm(r, &realm);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 static ngx_int_t
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
277 ngx_http_auth_basic_crypt_handler(ngx_http_request_t *r, ngx_str_t *passwd,
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
278 ngx_str_t *realm)
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 ngx_int_t rc;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 u_char *encrypted;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 rc = ngx_crypt(r->pool, r->headers_in.passwd.data, passwd->data,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 &encrypted);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5433
diff changeset
287 "rc: %i user: \"%V\" salt: \"%s\"",
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
288 rc, &r->headers_in.user, passwd->data);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
290 if (rc != NGX_OK) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
294 if (ngx_strcmp(encrypted, passwd->data) == 0) {
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
295 return NGX_OK;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
298 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
299 "encrypted: \"%s\"", encrypted);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
301 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
302 "user \"%V\": password mismatch",
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
303 &r->headers_in.user);
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
304
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
305 return ngx_http_auth_basic_set_realm(r, realm);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 static ngx_int_t
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310 ngx_http_auth_basic_set_realm(ngx_http_request_t *r, ngx_str_t *realm)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311 {
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
312 size_t len;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
313 u_char *basic, *p;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
314
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315 r->headers_out.www_authenticate = ngx_list_push(&r->headers_out.headers);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316 if (r->headers_out.www_authenticate == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
320 len = sizeof("Basic realm=\"\"") - 1 + realm->len;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
321
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
322 basic = ngx_pnalloc(r->pool, len);
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
323 if (basic == NULL) {
6986
0cdee26605f3 Cleaned up r->headers_out.headers allocation error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6480
diff changeset
324 r->headers_out.www_authenticate->hash = 0;
0cdee26605f3 Cleaned up r->headers_out.headers allocation error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6480
diff changeset
325 r->headers_out.www_authenticate = NULL;
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
326 return NGX_HTTP_INTERNAL_SERVER_ERROR;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
327 }
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
328
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
329 p = ngx_cpymem(basic, "Basic realm=\"", sizeof("Basic realm=\"") - 1);
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
330 p = ngx_cpymem(p, realm->data, realm->len);
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
331 *p = '"';
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
332
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
333 r->headers_out.www_authenticate->hash = 1;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
334 ngx_str_set(&r->headers_out.www_authenticate->key, "WWW-Authenticate");
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
335 r->headers_out.www_authenticate->value.data = basic;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
336 r->headers_out.www_authenticate->value.len = len;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
337
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
338 return NGX_HTTP_UNAUTHORIZED;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
341 static void
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
342 ngx_http_auth_basic_close(ngx_file_t *file)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
343 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
344 if (ngx_close_file(file->fd) == NGX_FILE_ERROR) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 ngx_log_error(NGX_LOG_ALERT, file->log, ngx_errno,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 ngx_close_file_n " \"%s\" failed", file->name.data);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
348 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
349
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
350
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
351 static void *
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352 ngx_http_auth_basic_create_loc_conf(ngx_conf_t *cf)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354 ngx_http_auth_basic_loc_conf_t *conf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_auth_basic_loc_conf_t));
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357 if (conf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2588
diff changeset
358 return NULL;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
359 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
360
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
361 return conf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
362 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
363
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
364
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
365 static char *
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
366 ngx_http_auth_basic_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
367 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
368 ngx_http_auth_basic_loc_conf_t *prev = parent;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369 ngx_http_auth_basic_loc_conf_t *conf = child;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
370
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
371 if (conf->realm == NULL) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
372 conf->realm = prev->realm;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
373 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
374
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
375 if (conf->user_file.value.data == NULL) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 conf->user_file = prev->user_file;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
377 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379 return NGX_CONF_OK;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 static ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
384 ngx_http_auth_basic_init(ngx_conf_t *cf)
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386 ngx_http_handler_pt *h;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387 ngx_http_core_main_conf_t *cmcf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
389 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
390
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391 h = ngx_array_push(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392 if (h == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393 return NGX_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
394 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396 *h = ngx_http_auth_basic_handler;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
397
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 return NGX_OK;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
400
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
401
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
402 static char *
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
403 ngx_http_auth_basic_user_file(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
404 {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
405 ngx_http_auth_basic_loc_conf_t *alcf = conf;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
406
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
407 ngx_str_t *value;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
408 ngx_http_compile_complex_value_t ccv;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
409
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
410 if (alcf->user_file.value.data) {
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
411 return "is duplicate";
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
412 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
413
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
414 value = cf->args->elts;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
415
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
416 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
417
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
418 ccv.cf = cf;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
419 ccv.value = &value[1];
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
420 ccv.complex_value = &alcf->user_file;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
421 ccv.zero = 1;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
422 ccv.conf_prefix = 1;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
423
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
424 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
425 return NGX_CONF_ERROR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
426 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
427
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
428 return NGX_CONF_OK;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
429 }