annotate src/http/modules/ngx_http_auth_basic_module.c @ 3440:88741ec7731a stable-0.7

merge r3294, r3305: Fix a bug introduced in r2032: After a child process has read a terminate message from a channel, the process tries to read the channel again. The kernel (at least FreeBSD) may preempt the process and sends a SIGIO signal to a master process. The master process sends a new terminate message, the kernel switches again to the the child process, and the child process reads the messages instead of an EAGAIN error. And this may repeat over and over. Being that the child process can not exit the cycle and test the termination flag set by the message handler. The fix disallow the master process to send a new terminate message on SIGIO signal reception. It may send the message only on SIGALARM signal.
author Igor Sysoev <igor@sysoev.ru>
date Mon, 01 Feb 2010 15:49:36 +0000
parents 2efa8d2fcde1
children dd1570b6f237
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
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 #include <ngx_config.h>
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_http.h>
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #define NGX_HTTP_AUTH_BUF_SIZE 2048
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 typedef struct {
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
16 ngx_str_t passwd;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 } ngx_http_auth_basic_ctx_t;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 typedef struct {
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
21 ngx_str_t realm;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
22 ngx_http_complex_value_t user_file;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 } ngx_http_auth_basic_loc_conf_t;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 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
27 static ngx_int_t ngx_http_auth_basic_crypt_handler(ngx_http_request_t *r,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 ngx_http_auth_basic_ctx_t *ctx, ngx_str_t *passwd, ngx_str_t *realm);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 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
30 ngx_str_t *realm);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 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
32 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
33 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
34 void *parent, void *child);
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
35 static ngx_int_t 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
36 static char *ngx_http_auth_basic(ngx_conf_t *cf, void *post, void *data);
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
37 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
38 void *conf);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 static ngx_conf_post_handler_pt ngx_http_auth_basic_p = ngx_http_auth_basic;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 static ngx_command_t ngx_http_auth_basic_commands[] = {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 { ngx_string("auth_basic"),
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
46 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
47 |NGX_CONF_TAKE1,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 ngx_conf_set_str_slot,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 NGX_HTTP_LOC_CONF_OFFSET,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 offsetof(ngx_http_auth_basic_loc_conf_t, realm),
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 &ngx_http_auth_basic_p },
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 { ngx_string("auth_basic_user_file"),
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
54 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
55 |NGX_CONF_TAKE1,
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
56 ngx_http_auth_basic_user_file,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 NGX_HTTP_LOC_CONF_OFFSET,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 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
59 NULL },
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 ngx_null_command
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
65 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
66 NULL, /* preconfiguration */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
67 ngx_http_auth_basic_init, /* postconfiguration */
503
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 NULL, /* create main configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 NULL, /* init main 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 NULL, /* create server configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 NULL, /* merge server configuration */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 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
76 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
77 };
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 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
81 NGX_MODULE_V1,
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 &ngx_http_auth_basic_module_ctx, /* module context */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 ngx_http_auth_basic_commands, /* module directives */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
85 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
86 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
87 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
88 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
89 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
90 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
91 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
92 NGX_MODULE_V1_PADDING
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 };
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 static ngx_int_t
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 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
98 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 off_t offset;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ssize_t n;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 ngx_fd_t fd;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
102 ngx_int_t rc;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
103 ngx_err_t err;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
104 ngx_str_t pwd, user_file;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
105 ngx_uint_t i, level, login, left, passwd;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 ngx_file_t file;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 ngx_http_auth_basic_ctx_t *ctx;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 ngx_http_auth_basic_loc_conf_t *alcf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 u_char buf[NGX_HTTP_AUTH_BUF_SIZE];
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 enum {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 sw_login,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 sw_passwd,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 sw_skip
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 } state;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 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
117
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
118 if (alcf->realm.len == 0 || alcf->user_file.value.len == 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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 ctx = ngx_http_get_module_ctx(r, ngx_http_auth_basic_module);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 if (ctx) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 return ngx_http_auth_basic_crypt_handler(r, ctx, &ctx->passwd,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 &alcf->realm);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
129 rc = ngx_http_auth_basic_user(r);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
131 if (rc == NGX_DECLINED) {
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
132
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
133 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
134 "no user/password was provided for basic authentication");
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
135
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 return ngx_http_auth_basic_set_realm(r, &alcf->realm);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
139 if (rc == NGX_ERROR) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 return NGX_HTTP_INTERNAL_SERVER_ERROR;
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
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
143 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
144 return NGX_ERROR;
2567
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
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
147 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
148
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 if (fd == NGX_INVALID_FILE) {
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
150 err = ngx_errno;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
151
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
152 if (err == NGX_ENOENT) {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
153 level = NGX_LOG_ERR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
154 rc = NGX_HTTP_FORBIDDEN;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
155
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
156 } else {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
157 level = NGX_LOG_CRIT;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
158 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
159 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
160
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
161 ngx_log_error(level, r->connection->log, err,
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
162 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
163
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
164 return rc;
503
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 ngx_memzero(&file, sizeof(ngx_file_t));
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 file.fd = fd;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
170 file.name = user_file;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 file.log = r->connection->log;
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 state = sw_login;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174 passwd = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175 login = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 left = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177 offset = 0;
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 for ( ;; ) {
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
180 i = left;
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
181
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182 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
183 offset);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 if (n == NGX_ERROR) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 ngx_http_auth_basic_close(&file);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 }
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 if (n == 0) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191 break;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194 for (i = left; i < left + n; i++) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195 switch (state) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 case sw_login:
2524
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
198 if (login == 0) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
199
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
200 if (buf[i] == '#' || buf[i] == CR) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
201 state = sw_skip;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
202 break;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
203 }
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
204
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
205 if (buf[i] == LF) {
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
206 break;
fd4ee75c6eee name/password were ignored after odd empty lines
Igor Sysoev <igor@sysoev.ru>
parents: 2523
diff changeset
207 }
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
210 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
211 state = sw_skip;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 break;
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
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
215 if (login == r->headers_in.user.len) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 state = sw_passwd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 passwd = i + 1;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220 login++;
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 break;
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 case sw_passwd:
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 if (buf[i] == LF || buf[i] == CR || buf[i] == ':') {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 buf[i] = '\0';
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 ngx_http_auth_basic_close(&file);
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 pwd.len = i - passwd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 pwd.data = &buf[passwd];
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 return ngx_http_auth_basic_crypt_handler(r, NULL, &pwd,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 &alcf->realm);
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237 break;
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 case sw_skip:
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240 if (buf[i] == LF) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 state = sw_login;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242 login = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 }
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 break;
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 }
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 if (state == sw_passwd) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 left = left + n - passwd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 ngx_memcpy(buf, &buf[passwd], left);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 passwd = 0;
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 } else {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255 left = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 offset += n;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 ngx_http_auth_basic_close(&file);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262
890
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
263 if (state == sw_passwd) {
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
264 pwd.len = i - passwd;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1786
diff changeset
265 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
266 if (pwd.data == NULL) {
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
267 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
268 }
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
269
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
270 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
271
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
272 return ngx_http_auth_basic_crypt_handler(r, NULL, &pwd, &alcf->realm);
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
273 }
6356b34cf027 fix when last htpasswd line has no CR or LF
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
274
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
275 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
276 "user \"%V\" was not found in \"%V\"",
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
277 &r->headers_in.user, &user_file);
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
278
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 return ngx_http_auth_basic_set_realm(r, &alcf->realm);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 }
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 static ngx_int_t
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 ngx_http_auth_basic_crypt_handler(ngx_http_request_t *r,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 ngx_http_auth_basic_ctx_t *ctx, ngx_str_t *passwd, ngx_str_t *realm)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 ngx_int_t rc;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 u_char *encrypted;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 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
291 &encrypted);
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 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
294 "rc: %d user: \"%V\" salt: \"%s\"",
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
295 rc, &r->headers_in.user, passwd->data);
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 if (rc == NGX_OK) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298 if (ngx_strcmp(encrypted, passwd->data) == 0) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 return NGX_OK;
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 "encrypted: \"%s\"", encrypted);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304
2523
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
305 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
306 "user \"%V\": password mismatch",
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
307 &r->headers_in.user);
7764f0fdd2a4 add auth basic failure logging
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
308
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 return ngx_http_auth_basic_set_realm(r, realm);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
312 if (rc == NGX_ERROR) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313 return NGX_HTTP_INTERNAL_SERVER_ERROR;
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 /* rc == NGX_AGAIN */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318 if (ctx == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319 ctx = ngx_palloc(r->pool, sizeof(ngx_http_auth_basic_ctx_t));
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
320 if (ctx == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
321 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
322 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
323
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
324 ngx_http_set_ctx(r, ctx, ngx_http_auth_basic_module);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
325
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
326 ctx->passwd.len = passwd->len;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
327 passwd->len++;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
328
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
329 ctx->passwd.data = ngx_pstrdup(r->pool, passwd);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
330 if (ctx->passwd.data == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
331 return NGX_HTTP_INTERNAL_SERVER_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
332 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
333
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
334 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
335
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
336 /* TODO: add mutex event */
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 rc;
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
342 static ngx_int_t
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
343 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
344 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 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
346 if (r->headers_out.www_authenticate == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 return NGX_HTTP_INTERNAL_SERVER_ERROR;
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
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
350 r->headers_out.www_authenticate->hash = 1;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
351 r->headers_out.www_authenticate->key.len = sizeof("WWW-Authenticate") - 1;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352 r->headers_out.www_authenticate->key.data = (u_char *) "WWW-Authenticate";
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353 r->headers_out.www_authenticate->value = *realm;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355 return NGX_HTTP_UNAUTHORIZED;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358 static void
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
359 ngx_http_auth_basic_close(ngx_file_t *file)
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 if (ngx_close_file(file->fd) == NGX_FILE_ERROR) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
362 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
363 ngx_close_file_n " \"%s\" failed", file->name.data);
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 }
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 void *
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369 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
370 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371 ngx_http_auth_basic_loc_conf_t *conf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
372
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
373 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
374 if (conf == NULL) {
3237
2efa8d2fcde1 merge r2903, r2911, r2912, r3002:
Igor Sysoev <igor@sysoev.ru>
parents: 2588
diff changeset
375 return 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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378 return conf;
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
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 static char *
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 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
384 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 ngx_http_auth_basic_loc_conf_t *prev = parent;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386 ngx_http_auth_basic_loc_conf_t *conf = child;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
388 if (conf->realm.data == NULL) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389 conf->realm = prev->realm;
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
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
392 if (conf->user_file.value.len == 0) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393 conf->user_file = prev->user_file;
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 return NGX_CONF_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 ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
401 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
402 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
403 ngx_http_handler_pt *h;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
404 ngx_http_core_main_conf_t *cmcf;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
405
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
406 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
407
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
408 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
409 if (h == NULL) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
410 return NGX_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
411 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
412
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
413 *h = ngx_http_auth_basic_handler;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
414
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415 return NGX_OK;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
416 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
417
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
418
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
419 static char *
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
420 ngx_http_auth_basic(ngx_conf_t *cf, void *post, void *data)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
421 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
422 ngx_str_t *realm = data;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
423
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
424 size_t len;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
425 u_char *basic, *p;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
426
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
427 if (ngx_strcmp(realm->data, "off") == 0) {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
428 realm->len = 0;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
429 realm->data = (u_char *) "";
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
430
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
431 return NGX_CONF_OK;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
432 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
433
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
434 len = sizeof("Basic realm=\"") - 1 + realm->len + 1;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
435
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1786
diff changeset
436 basic = ngx_pnalloc(cf->pool, len);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
437 if (basic == NULL) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
438 return NGX_CONF_ERROR;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
439 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
440
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
441 p = ngx_cpymem(basic, "Basic realm=\"", sizeof("Basic realm=\"") - 1);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
442 p = ngx_cpymem(p, realm->data, realm->len);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
443 *p = '"';
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
444
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
445 realm->len = len;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
446 realm->data = basic;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
447
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
448 return NGX_CONF_OK;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449 }
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
450
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
451
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
452 static char *
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
453 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
454 {
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
455 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
456
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
457 ngx_str_t *value;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
458 ngx_http_compile_complex_value_t ccv;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
459
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
460 if (alcf->user_file.value.len) {
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
461 return "is duplicate";
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
462 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
463
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
464 value = cf->args->elts;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
465
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
466 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
467
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
468 ccv.cf = cf;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
469 ccv.value = &value[1];
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
470 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
471 ccv.zero = 1;
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
472 ccv.conf_prefix = 1;
2567
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
473
2588
a6954ce88b80 use complex values in add_header, auth_basic_user_file,
Igor Sysoev <igor@sysoev.ru>
parents: 2571
diff changeset
474 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
475 return NGX_CONF_ERROR;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
476 }
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
477
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
478 return NGX_CONF_OK;
f0f64973ba2f auth_basic_user_file supports variables
Igor Sysoev <igor@sysoev.ru>
parents: 2524
diff changeset
479 }