annotate src/http/modules/ngx_http_auth_basic_module.c @ 8031:d26db4f82d7d

All known output headers can be linked lists now. The h->next pointer properly provided as NULL in all cases where known output headers are added. Note that there are 3rd party modules which might not do this, and it might be risky to rely on this for arbitrary headers.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 30 May 2022 21:25:45 +0300
parents be82e72c9af8
children
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;
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
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_create_loc_conf(ngx_conf_t *cf);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 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
30 void *parent, void *child);
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
31 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
32 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
33 void *conf);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34
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 static ngx_command_t ngx_http_auth_basic_commands[] = {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 { ngx_string("auth_basic"),
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
39 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
40 |NGX_CONF_TAKE1,
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
41 ngx_http_set_complex_value_slot,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 NGX_HTTP_LOC_CONF_OFFSET,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 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
44 NULL },
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 { ngx_string("auth_basic_user_file"),
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
47 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
48 |NGX_CONF_TAKE1,
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
49 ngx_http_auth_basic_user_file,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 NGX_HTTP_LOC_CONF_OFFSET,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 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
52 NULL },
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 ngx_null_command
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 };
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
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
58 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
59 NULL, /* preconfiguration */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
60 ngx_http_auth_basic_init, /* postconfiguration */
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 NULL, /* create main configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 NULL, /* init main configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 NULL, /* create server configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 NULL, /* merge server configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 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
69 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
70 };
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 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
74 NGX_MODULE_V1,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 &ngx_http_auth_basic_module_ctx, /* module context */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 ngx_http_auth_basic_commands, /* module directives */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
78 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
79 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
80 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
81 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
82 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
83 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
84 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
85 NGX_MODULE_V1_PADDING
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 };
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 static ngx_int_t
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 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
91 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 off_t offset;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 ssize_t n;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ngx_fd_t fd;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
95 ngx_int_t rc;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
96 ngx_err_t err;
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
97 ngx_str_t pwd, realm, user_file;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
98 ngx_uint_t i, level, login, left, passwd;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 ngx_file_t file;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ngx_http_auth_basic_loc_conf_t *alcf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 u_char buf[NGX_HTTP_AUTH_BUF_SIZE];
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 enum {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 sw_login,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 sw_passwd,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 sw_skip
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 } state;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 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
109
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
110 if (alcf->realm == NULL || alcf->user_file == NULL) {
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
111 return NGX_DECLINED;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
112 }
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 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
115 return NGX_ERROR;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
116 }
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 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
119 return NGX_DECLINED;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
122 rc = ngx_http_auth_basic_user(r);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
124 if (rc == NGX_DECLINED) {
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
125
5433
c37f34bda5ea Auth basic: "info" logging level on no user/password.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4948
diff changeset
126 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
127 "no user/password was provided for basic authentication");
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
128
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
129 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
130 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
132 if (rc == NGX_ERROR) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
136 if (ngx_http_complex_value(r, alcf->user_file, &user_file) != NGX_OK) {
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
137 return NGX_ERROR;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
138 }
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 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
141
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 if (fd == NGX_INVALID_FILE) {
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
143 err = ngx_errno;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
144
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
145 if (err == NGX_ENOENT) {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
146 level = NGX_LOG_ERR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
147 rc = NGX_HTTP_FORBIDDEN;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
148
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
149 } else {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
150 level = NGX_LOG_CRIT;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
151 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
152 }
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 ngx_log_error(level, r->connection->log, err,
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
155 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
156
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
157 return rc;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 }
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 ngx_memzero(&file, sizeof(ngx_file_t));
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 file.fd = fd;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
163 file.name = user_file;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 file.log = r->connection->log;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 state = sw_login;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 passwd = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 login = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 left = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 offset = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172 for ( ;; ) {
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
173 i = left;
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
174
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175 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
176 offset);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 if (n == NGX_ERROR) {
7637
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
179 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
180 goto cleanup;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 }
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 if (n == 0) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 }
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 for (i = left; i < left + n; i++) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 switch (state) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190 case sw_login:
2524
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
191 if (login == 0) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
192
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
193 if (buf[i] == '#' || buf[i] == CR) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
194 state = sw_skip;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
195 break;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
196 }
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 if (buf[i] == LF) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
199 break;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
200 }
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
203 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
204 state = sw_skip;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
208 if (login == r->headers_in.user.len) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209 state = sw_passwd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210 passwd = i + 1;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 }
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 login++;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
215 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 case sw_passwd:
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 if (buf[i] == LF || buf[i] == CR || buf[i] == ':') {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219 buf[i] = '\0';
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 pwd.len = i - passwd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 pwd.data = &buf[passwd];
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223
7637
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
224 rc = ngx_http_auth_basic_crypt_handler(r, &pwd, &realm);
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
225 goto cleanup;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 break;
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 case sw_skip:
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 if (buf[i] == LF) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 state = sw_login;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 login = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 break;
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 }
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 if (state == sw_passwd) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 left = left + n - passwd;
3887
e7798b5e990a use memmove() in appropriate places
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
242 ngx_memmove(buf, &buf[passwd], left);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 passwd = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 } else {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246 left = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 offset += n;
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
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
252 if (state == sw_passwd) {
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
253 pwd.len = i - passwd;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1786
diff changeset
254 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
255 if (pwd.data == NULL) {
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
256 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
257 }
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
258
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
259 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
260
7637
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
261 rc = ngx_http_auth_basic_crypt_handler(r, &pwd, &realm);
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
262 goto cleanup;
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
263 }
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
264
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
265 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
266 "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
267 &r->headers_in.user, user_file.data);
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
268
7637
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
269 rc = ngx_http_auth_basic_set_realm(r, &realm);
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
270
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
271 cleanup:
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
272
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
273 if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
274 ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
275 ngx_close_file_n " \"%s\" failed", user_file.data);
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
276 }
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
277
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
278 ngx_explicit_memzero(buf, NGX_HTTP_AUTH_BUF_SIZE);
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
279
0cb942c1c1aa Auth basic: explicitly zero out password buffer.
Ruslan Ermilov <ru@nginx.com>
parents: 7218
diff changeset
280 return rc;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 }
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 static ngx_int_t
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
285 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
286 ngx_str_t *realm)
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 ngx_int_t rc;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 u_char *encrypted;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 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
292 &encrypted);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5433
diff changeset
295 "rc: %i user: \"%V\" salt: \"%s\"",
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
296 rc, &r->headers_in.user, passwd->data);
503
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 if (rc != NGX_OK) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
302 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
303 return NGX_OK;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
306 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
307 "encrypted: \"%s\"", encrypted);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308
7109
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
309 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
310 "user \"%V\": password mismatch",
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
311 &r->headers_in.user);
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
312
4a670c18e5e6 Removed more remnants of the old pthread implementation.
Ruslan Ermilov <ru@nginx.com>
parents: 6986
diff changeset
313 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
314 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317 static ngx_int_t
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318 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
319 {
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
320 size_t len;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
321 u_char *basic, *p;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
322
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
323 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
324 if (r->headers_out.www_authenticate == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
325 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
326 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
327
4948
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
328 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
329
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
330 basic = ngx_pnalloc(r->pool, len);
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
331 if (basic == NULL) {
6986
0cdee26605f3 Cleaned up r->headers_out.headers allocation error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6480
diff changeset
332 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
333 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
334 return NGX_HTTP_INTERNAL_SERVER_ERROR;
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
335 }
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
336
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
337 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
338 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
339 *p = '"';
d03712b6914b The "auth_basic" directive gained support of variables.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
340
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
341 r->headers_out.www_authenticate->hash = 1;
8031
d26db4f82d7d All known output headers can be linked lists now.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7832
diff changeset
342 r->headers_out.www_authenticate->next = NULL;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
343 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
344 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
345 r->headers_out.www_authenticate->value.len = len;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 return NGX_HTTP_UNAUTHORIZED;
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
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7637
diff changeset
361 conf->realm = NGX_CONF_UNSET_PTR;
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
362 conf->user_file = NGX_CONF_UNSET_PTR;
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7637
diff changeset
363
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
364 return conf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
365 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
366
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 static char *
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369 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
370 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371 ngx_http_auth_basic_loc_conf_t *prev = parent;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
372 ngx_http_auth_basic_loc_conf_t *conf = child;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
373
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7637
diff changeset
374 ngx_conf_merge_ptr_value(conf->realm, prev->realm, NULL);
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
375 ngx_conf_merge_ptr_value(conf->user_file, prev->user_file, NULL);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
377 return NGX_CONF_OK;
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
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 static ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
382 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
383 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 ngx_http_handler_pt *h;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 ngx_http_core_main_conf_t *cmcf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
387 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
388
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389 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
390 if (h == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391 return NGX_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
394 *h = ngx_http_auth_basic_handler;
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 return NGX_OK;
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
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 static char *
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
401 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
402 {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
403 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
404
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
405 ngx_str_t *value;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
406 ngx_http_compile_complex_value_t ccv;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
407
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
408 if (alcf->user_file != NGX_CONF_UNSET_PTR) {
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
409 return "is duplicate";
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
410 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
411
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
412 alcf->user_file = ngx_palloc(cf->pool, sizeof(ngx_http_complex_value_t));
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
413 if (alcf->user_file == NULL) {
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
414 return NGX_CONF_ERROR;
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
415 }
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
416
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
417 value = cf->args->elts;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
418
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
419 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
420
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
421 ccv.cf = cf;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
422 ccv.value = &value[1];
7832
be82e72c9af8 Auth basic: changed alcf->user_file to be a pointer.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
423 ccv.complex_value = alcf->user_file;
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
424 ccv.zero = 1;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
425 ccv.conf_prefix = 1;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
426
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
427 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
428 return NGX_CONF_ERROR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
429 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
430
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
431 return NGX_CONF_OK;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
432 }