annotate src/http/modules/ngx_http_index_module.c @ 2480:a9abdddaa92d

test allocated space as in try_files
author Igor Sysoev <igor@sysoev.ru>
date Tue, 27 Jan 2009 16:20:29 +0000
parents 5c0c7f65f8f0
children 47839f59ce2a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 401
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 401
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 401
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 401
diff changeset
5
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
7 #include <ngx_config.h>
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
8 #include <ngx_core.h>
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
9 #include <ngx_http.h>
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
10
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
11
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
12 typedef struct {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
13 ngx_str_t name;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
14 ngx_array_t *lengths;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
15 ngx_array_t *values;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
16 } ngx_http_index_t;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
17
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
18
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
19 typedef struct {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
20 ngx_array_t *indices; /* array of ngx_http_index_t */
469
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
21 size_t max_index_len;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
22 } ngx_http_index_loc_conf_t;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
23
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
24
293
ec3c049681fd nginx-0.0.3-2004-03-19-08:25:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
25 #define NGX_HTTP_DEFAULT_INDEX "index.html"
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
27
199
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
28 static ngx_int_t ngx_http_index_test_dir(ngx_http_request_t *r,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
29 ngx_http_core_loc_conf_t *clcf, u_char *path, u_char *last);
2160
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
30 static ngx_int_t ngx_http_index_error(ngx_http_request_t *r,
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
31 ngx_http_core_loc_conf_t *clcf, u_char *file, ngx_err_t err);
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
32
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
33 static ngx_int_t ngx_http_index_init(ngx_conf_t *cf);
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
34 static void *ngx_http_index_create_loc_conf(ngx_conf_t *cf);
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
35 static char *ngx_http_index_merge_loc_conf(ngx_conf_t *cf,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
36 void *parent, void *child);
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 32
diff changeset
37 static char *ngx_http_index_set_index(ngx_conf_t *cf, ngx_command_t *cmd,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
38 void *conf);
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
39
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
40
199
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
41 static ngx_command_t ngx_http_index_commands[] = {
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
42
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
43 { ngx_string("index"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
44 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
199
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
45 ngx_http_index_set_index,
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
46 NGX_HTTP_LOC_CONF_OFFSET,
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
47 0,
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
48 NULL },
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
49
199
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
50 ngx_null_command
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 32
diff changeset
51 };
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 32
diff changeset
52
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
53
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 661
diff changeset
54 static ngx_http_module_t ngx_http_index_module_ctx = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
55 NULL, /* preconfiguration */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
56 ngx_http_index_init, /* postconfiguration */
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 148
diff changeset
57
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
58 NULL, /* create main configuration */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
59 NULL, /* init main configuration */
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
60
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
61 NULL, /* create server configuration */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
62 NULL, /* merge server configuration */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
63
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
64 ngx_http_index_create_loc_conf, /* create location configration */
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
65 ngx_http_index_merge_loc_conf /* merge location configration */
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
66 };
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
67
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 32
diff changeset
69 ngx_module_t ngx_http_index_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
70 NGX_MODULE_V1,
90
37530da31268 nginx-0.0.1-2003-05-16-19:27:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
71 &ngx_http_index_module_ctx, /* module context */
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
72 ngx_http_index_commands, /* module directives */
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
73 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
74 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
75 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
76 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
77 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
78 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
79 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
80 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
81 NGX_MODULE_V1_PADDING
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
82 };
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
83
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
84
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
85 /*
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
86 * Try to open the first index file before the test of the directory existence
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
87 * because the valid requests should be many more than invalid ones.
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
88 * If open() would fail, then stat() should be more quickly because some data
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
89 * is already cached in the kernel.
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
90 * Besides, Win32 has ERROR_PATH_NOT_FOUND (NGX_ENOTDIR).
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
91 * Unix has ENOTDIR error, although it less helpfull - it points only
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
92 * that path contains the usual file in place of the directory.
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
93 */
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
94
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
95 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
96 ngx_http_index_handler(ngx_http_request_t *r)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 {
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
98 u_char *p, *name;
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
99 size_t len, root, reserve, allocated;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
100 ngx_int_t rc;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
101 ngx_str_t path, uri;
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
102 ngx_uint_t i, dir_tested;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
103 ngx_http_index_t *index;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
104 ngx_open_file_info_t of;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
105 ngx_http_script_code_pt code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
106 ngx_http_script_engine_t e;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
107 ngx_http_core_loc_conf_t *clcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
108 ngx_http_index_loc_conf_t *ilcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
109 ngx_http_script_len_code_pt lcode;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
111 if (r->uri.data[r->uri.len - 1] != '/') {
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
112 return NGX_DECLINED;
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
113 }
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
114
955
ff762576da78 limit the ngx_http_index_module methods to GET, HEAD and POST
Igor Sysoev <igor@sysoev.ru>
parents: 813
diff changeset
115 if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD|NGX_HTTP_POST))) {
ff762576da78 limit the ngx_http_index_module methods to GET, HEAD and POST
Igor Sysoev <igor@sysoev.ru>
parents: 813
diff changeset
116 return NGX_DECLINED;
ff762576da78 limit the ngx_http_index_module methods to GET, HEAD and POST
Igor Sysoev <igor@sysoev.ru>
parents: 813
diff changeset
117 }
ff762576da78 limit the ngx_http_index_module methods to GET, HEAD and POST
Igor Sysoev <igor@sysoev.ru>
parents: 813
diff changeset
118
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
119 /* TODO: Win32 */
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
120 if (r->zero_in_uri) {
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
121 return NGX_DECLINED;
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
122 }
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
123
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
124 ilcf = ngx_http_get_module_loc_conf(r, ngx_http_index_module);
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
125 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
126
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
127 allocated = 0;
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
128 root = 0;
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
129 dir_tested = 0;
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
130 name = NULL;
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
131 /* suppress MSVC warning */
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
132 path.data = NULL;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
133
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
134 index = ilcf->indices->elts;
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
135 for (i = 0; i < ilcf->indices->nelts; i++) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
136
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
137 if (index[i].lengths == NULL) {
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
138
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
139 if (index[i].name.data[0] == '/') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
140 return ngx_http_internal_redirect(r, &index[i].name, &r->args);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
141 }
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
142
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
143 reserve = ilcf->max_index_len;
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
144 len = index[i].name.len;
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
145
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
146 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
147 ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
148
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
149 e.ip = index[i].lengths->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
150 e.request = r;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
151 e.flushed = 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
152
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
153 /* 1 is for terminating '\0' as in static names */
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
154 len = 1;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
155
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
156 while (*(uintptr_t *) e.ip) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
157 lcode = *(ngx_http_script_len_code_pt *) e.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
158 len += lcode(&e);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
159 }
44
0e81ac0bb3e2 nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 43
diff changeset
160
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
161 /* 16 bytes are preallocation */
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
162
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
163 reserve = len + 16;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
164 }
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
165
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
166 if (reserve > allocated) {
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
167
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
168 name = ngx_http_map_uri_to_path(r, &path, &root, reserve);
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
169 if (name == NULL) {
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
170 return NGX_ERROR;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
171 }
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
172
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
173 allocated = path.data + path.len - name;
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
174 }
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
175
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
176 if (index[i].values == NULL) {
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
177
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
178 /* index[i].name.len includes the terminating '\0' */
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
179
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
180 ngx_memcpy(name, index[i].name.data, index[i].name.len);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
182 path.len = (name + index[i].name.len - 1) - path.data;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
183
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
184 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
185 e.ip = index[i].values->elts;
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
186 e.pos = name;
293
ec3c049681fd nginx-0.0.3-2004-03-19-08:25:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
187
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
188 while (*(uintptr_t *) e.ip) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
189 code = *(ngx_http_script_code_pt *) e.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
190 code((ngx_http_script_engine_t *) &e);
396
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 356
diff changeset
191 }
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 356
diff changeset
192
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
193 if (*name == '/') {
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
194 uri.len = len - 1;
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
195 uri.data = name;
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
196 return ngx_http_internal_redirect(r, &uri, &r->args);
396
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 356
diff changeset
197 }
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 356
diff changeset
198
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
199 path.len = e.pos - path.data;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
200
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
201 *e.pos++ = '\0';
293
ec3c049681fd nginx-0.0.3-2004-03-19-08:25:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
202 }
ec3c049681fd nginx-0.0.3-2004-03-19-08:25:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
203
2405
5c0c7f65f8f0 remove seldom used variable
Igor Sysoev <igor@sysoev.ru>
parents: 2181
diff changeset
204 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
5c0c7f65f8f0 remove seldom used variable
Igor Sysoev <igor@sysoev.ru>
parents: 2181
diff changeset
205 "open index \"%V\"", &path);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206
2068
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
207 ngx_memzero(&of, sizeof(ngx_open_file_info_t));
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
208
2129
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2068
diff changeset
209 of.directio = clcf->directio;
1767
c42431762903 open_file_cache_retest > open_file_cache_valid
Igor Sysoev <igor@sysoev.ru>
parents: 1627
diff changeset
210 of.valid = clcf->open_file_cache_valid;
1772
25c93614e6b9 open_file_cache_min_uses
Igor Sysoev <igor@sysoev.ru>
parents: 1767
diff changeset
211 of.min_uses = clcf->open_file_cache_min_uses;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
212 of.errors = clcf->open_file_cache_errors;
1457
223e92651ca5 open_file_cache_events
Igor Sysoev <igor@sysoev.ru>
parents: 1454
diff changeset
213 of.events = clcf->open_file_cache_events;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
214
1799
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
215 if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
216 != NGX_OK)
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
217 {
2405
5c0c7f65f8f0 remove seldom used variable
Igor Sysoev <igor@sysoev.ru>
parents: 2181
diff changeset
218 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, of.err,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
219 ngx_open_file_n " \"%s\" failed", path.data);
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
220
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
221 if (of.err == 0) {
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
222 return NGX_HTTP_INTERNAL_SERVER_ERROR;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
223 }
47
d81326c3b21b nginx-0.0.1-2003-01-15-10:02:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 46
diff changeset
224
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
225 if (of.err == NGX_ENOTDIR || of.err == NGX_EACCES) {
2160
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
226 return ngx_http_index_error(r, clcf, path.data, of.err);
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
227 }
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
228
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
229 if (!dir_tested) {
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
230 rc = ngx_http_index_test_dir(r, clcf, path.data, name - 1);
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
231
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
232 if (rc != NGX_OK) {
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
233 return rc;
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
234 }
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
235
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
236 dir_tested = 1;
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
237 }
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
238
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
239 if (of.err == NGX_ENOENT) {
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
240 continue;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 32
diff changeset
241 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242
2405
5c0c7f65f8f0 remove seldom used variable
Igor Sysoev <igor@sysoev.ru>
parents: 2181
diff changeset
243 ngx_log_error(NGX_LOG_ERR, r->connection->log, of.err,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
244 ngx_open_file_n " \"%s\" failed", path.data);
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
245
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
246 return NGX_HTTP_INTERNAL_SERVER_ERROR;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
249 uri.len = r->uri.len + len - 1;
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
250
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
251 if (!clcf->alias) {
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
252 uri.data = path.data + root;
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
253
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
254 } else {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
255 uri.data = ngx_pnalloc(r->pool, uri.len);
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
256 if (uri.data == NULL) {
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
257 return NGX_HTTP_INTERNAL_SERVER_ERROR;
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
258 }
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
259
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
260 p = ngx_copy(uri.data, r->uri.data, r->uri.len);
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
261 ngx_memcpy(p, name, len - 1);
199
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
262 }
a65b630b3a66 nginx-0.0.1-2003-11-28-11:40:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
263
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
264 return ngx_http_internal_redirect(r, &uri, &r->args);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
267 return NGX_DECLINED;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
269
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
270
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
271 static ngx_int_t
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
272 ngx_http_index_test_dir(ngx_http_request_t *r, ngx_http_core_loc_conf_t *clcf,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
273 u_char *path, u_char *last)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
274 {
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
275 u_char c;
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
276 ngx_str_t dir;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
277 ngx_open_file_info_t of;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
278
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
279 c = *last;
1627
bf5521329069 fix autoindex for "alias /"
Igor Sysoev <igor@sysoev.ru>
parents: 1602
diff changeset
280 if (c != '/' || path == last) {
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
281 /* "alias" without trailing slash */
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
282 c = *(++last);
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
283 }
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
284 *last = '\0';
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
285
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
286 dir.len = last - path;
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
287 dir.data = path;
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
288
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
289 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
290 "http index check dir: \"%V\"", &dir);
47
d81326c3b21b nginx-0.0.1-2003-01-15-10:02:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 46
diff changeset
291
2068
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
292 ngx_memzero(&of, sizeof(ngx_open_file_info_t));
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
293
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
294 of.test_dir = 1;
1767
c42431762903 open_file_cache_retest > open_file_cache_valid
Igor Sysoev <igor@sysoev.ru>
parents: 1627
diff changeset
295 of.valid = clcf->open_file_cache_valid;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
296 of.errors = clcf->open_file_cache_errors;
47
d81326c3b21b nginx-0.0.1-2003-01-15-10:02:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 46
diff changeset
297
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
298 if (ngx_open_cached_file(clcf->open_file_cache, &dir, &of, r->pool)
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
299 != NGX_OK)
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
300 {
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
301 if (of.err) {
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
302
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
303 if (of.err == NGX_ENOENT) {
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
304 *last = c;
2160
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
305 return ngx_http_index_error(r, clcf, dir.data, NGX_ENOENT);
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
306 }
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
307
2181
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
308 if (of.err == NGX_EACCES) {
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
309
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
310 *last = c;
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
311
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
312 /*
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
313 * ngx_http_index_test_dir() is called after the first index
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
314 * file testing has returned an error distinct from NGX_EACCES.
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
315 * This means that directory searching is allowed.
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
316 */
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
317
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
318 return NGX_OK;
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
319 }
774bef502c78 ignore NGX_EACCES error while directory test
Igor Sysoev <igor@sysoev.ru>
parents: 2160
diff changeset
320
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
321 ngx_log_error(NGX_LOG_CRIT, r->connection->log, of.err,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
322 ngx_open_file_n " \"%s\" failed", dir.data);
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
323 }
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
324
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
325 return NGX_HTTP_INTERNAL_SERVER_ERROR;
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
326 }
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
327
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
328 *last = c;
47
d81326c3b21b nginx-0.0.1-2003-01-15-10:02:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 46
diff changeset
329
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1048
diff changeset
330 if (of.is_dir) {
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
331 return NGX_OK;
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
332 }
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
333
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
334 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
335 "\"%s\" is not a directory", dir.data);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
336
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
337 return NGX_HTTP_INTERNAL_SERVER_ERROR;
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
338 }
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
339
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
340
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
341 static ngx_int_t
2160
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
342 ngx_http_index_error(ngx_http_request_t *r, ngx_http_core_loc_conf_t *clcf,
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
343 u_char *file, ngx_err_t err)
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
344 {
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
345 if (err == NGX_EACCES) {
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
346 ngx_log_error(NGX_LOG_ERR, r->connection->log, err,
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
347 "\"%s\" is forbidden", file);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
348
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
349 return NGX_HTTP_FORBIDDEN;
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
350 }
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
351
2160
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
352 if (clcf->log_not_found) {
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
353 ngx_log_error(NGX_LOG_ERR, r->connection->log, err,
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
354 "\"%s\" is not found", file);
e21f3b073843 consider log_not_found while testing index files
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
355 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
356
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
357 return NGX_HTTP_NOT_FOUND;
46
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
358 }
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
359
f84a648211f4 nginx-0.0.1-2003-01-10-20:45:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 45
diff changeset
360
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
361 static void *
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
362 ngx_http_index_create_loc_conf(ngx_conf_t *cf)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
363 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
364 ngx_http_index_loc_conf_t *conf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
365
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
366 conf = ngx_palloc(cf->pool, sizeof(ngx_http_index_loc_conf_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
367 if (conf == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
368 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
369 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
370
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
371 conf->indices = NULL;
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
372 conf->max_index_len = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
373
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
374 return conf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
375 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
376
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
377
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
378 static char *
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
379 ngx_http_index_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
380 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
381 ngx_http_index_loc_conf_t *prev = parent;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
382 ngx_http_index_loc_conf_t *conf = child;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
383
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
384 ngx_http_index_t *index;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
385
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
386 if (conf->indices == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
387 conf->indices = prev->indices;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
388 conf->max_index_len = prev->max_index_len;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
389 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
390
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
391 if (conf->indices == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
392 conf->indices = ngx_array_create(cf->pool, 1, sizeof(ngx_http_index_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
393 if (conf->indices == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
394 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
395 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
396
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
397 index = ngx_array_push(conf->indices);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
398 if (index == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
399 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
400 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
401
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
402 index->name.len = sizeof(NGX_HTTP_DEFAULT_INDEX);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
403 index->name.data = (u_char *) NGX_HTTP_DEFAULT_INDEX;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
404 index->lengths = NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
405 index->values = NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
406
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
407 conf->max_index_len = sizeof(NGX_HTTP_DEFAULT_INDEX);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
408
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
409 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
410 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
411
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
412 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
413 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
414
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
415
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
416 static ngx_int_t
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
417 ngx_http_index_init(ngx_conf_t *cf)
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
418 {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
419 ngx_http_handler_pt *h;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
420 ngx_http_core_main_conf_t *cmcf;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
421
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
422 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
423
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
424 h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
425 if (h == NULL) {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
426 return NGX_ERROR;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
427 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
428
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
429 *h = ngx_http_index_handler;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
430
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
431 return NGX_OK;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
432 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
433
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
434
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
435 /* TODO: warn about duplicate indices */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
436
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
437 static char *
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
438 ngx_http_index_set_index(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
439 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
440 ngx_http_index_loc_conf_t *ilcf = conf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
441
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
442 ngx_str_t *value;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
443 ngx_uint_t i, n;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
444 ngx_http_index_t *index;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
445 ngx_http_script_compile_t sc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
446
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
447 if (ilcf->indices == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
448 ilcf->indices = ngx_array_create(cf->pool, 2, sizeof(ngx_http_index_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
449 if (ilcf->indices == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
450 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
451 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
452 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
453
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
454 value = cf->args->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
455
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
456 for (i = 1; i < cf->args->nelts; i++) {
1602
55c8aede41f5 refactor index module: remove context
Igor Sysoev <igor@sysoev.ru>
parents: 1601
diff changeset
457
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
458 if (value[i].data[0] == '/' && i != cf->args->nelts - 1) {
1601
cba2bb1796e4 change emerg to a warn for absolute index
Igor Sysoev <igor@sysoev.ru>
parents: 1600
diff changeset
459 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
460 "only the last index in \"index\" directive "
1601
cba2bb1796e4 change emerg to a warn for absolute index
Igor Sysoev <igor@sysoev.ru>
parents: 1600
diff changeset
461 "should be absolute");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
462 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
463
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
464 if (value[i].len == 0) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
465 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
466 "index \"%V\" in \"index\" directive is invalid",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
467 &value[1]);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
468 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
469 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
470
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
471 index = ngx_array_push(ilcf->indices);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
472 if (index == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
473 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
474 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
475
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
476 index->name.len = value[i].len;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
477 index->name.data = value[i].data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
478 index->lengths = NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
479 index->values = NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
480
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
481 n = ngx_http_script_variables_count(&value[i]);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
482
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
483 if (n == 0) {
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
484 if (ilcf->max_index_len < index->name.len) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
485 ilcf->max_index_len = index->name.len;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
486 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
487
1600
1d659775325a fix mime type for absolute index
Igor Sysoev <igor@sysoev.ru>
parents: 1457
diff changeset
488 if (index->name.data[0] == '/') {
1d659775325a fix mime type for absolute index
Igor Sysoev <igor@sysoev.ru>
parents: 1457
diff changeset
489 continue;
1d659775325a fix mime type for absolute index
Igor Sysoev <igor@sysoev.ru>
parents: 1457
diff changeset
490 }
1d659775325a fix mime type for absolute index
Igor Sysoev <igor@sysoev.ru>
parents: 1457
diff changeset
491
2480
a9abdddaa92d test allocated space as in try_files
Igor Sysoev <igor@sysoev.ru>
parents: 2405
diff changeset
492 /* include the terminating '\0' to the length to use ngx_memcpy() */
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
493 index->name.len++;
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
494
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
495 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
496 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
497
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
498 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
499
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
500 sc.cf = cf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
501 sc.source = &value[i];
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
502 sc.lengths = &index->lengths;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
503 sc.values = &index->values;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
504 sc.variables = n;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
505 sc.complete_lengths = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
506 sc.complete_values = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
507
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
508 if (ngx_http_script_compile(&sc) != NGX_OK) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
509 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
510 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
511 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
512
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
513 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
514 }