annotate src/http/modules/ngx_http_ssi_filter_module.c @ 6963:3ff293cfdab8

Slice filter: prevented slice redirection (ticket #1219). When a slice subrequest was redirected to a new location, its context was lost. After its completion, a new slice subrequest for the same slice was created. This could lead to infinite loop. Now the slice module makes sure each slice subrequest starts output with the slice context available.
author Roman Arutyunyan <arut@nginx.com>
date Fri, 31 Mar 2017 21:47:56 +0300
parents 7a6456398fc3
children e699e6b6d76c
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: 290
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: 290
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
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4381
diff changeset
4 * Copyright (C) Nginx, Inc.
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: 290
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
6
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
11
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
12 #define NGX_HTTP_SSI_ERROR 1
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
13
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
14 #define NGX_HTTP_SSI_DATE_LEN 2048
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
15
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
16 #define NGX_HTTP_SSI_ADD_PREFIX 1
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
17 #define NGX_HTTP_SSI_ADD_ZERO 2
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
18
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
19
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
20 typedef struct {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
21 ngx_flag_t enable;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
22 ngx_flag_t silent_errors;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
23 ngx_flag_t ignore_recycled_buffers;
5228
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
24 ngx_flag_t last_modified;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
25
2166
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
26 ngx_hash_t types;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
27
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
28 size_t min_file_chunk;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
29 size_t value_len;
2166
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
30
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
31 ngx_array_t *types_keys;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
32 } ngx_http_ssi_loc_conf_t;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
33
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
34
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
35 typedef struct {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
36 ngx_str_t name;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
37 ngx_uint_t key;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
38 ngx_str_t value;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
39 } ngx_http_ssi_var_t;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
40
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
41
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
42 typedef struct {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
43 ngx_str_t name;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
44 ngx_chain_t *bufs;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
45 ngx_uint_t count;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
46 } ngx_http_ssi_block_t;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
47
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
48
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
49 typedef enum {
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
50 ssi_start_state = 0,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
51 ssi_tag_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
52 ssi_comment0_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
53 ssi_comment1_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
54 ssi_sharp_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
55 ssi_precommand_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
56 ssi_command_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
57 ssi_preparam_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
58 ssi_param_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
59 ssi_preequal_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
60 ssi_prevalue_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
61 ssi_double_quoted_value_state,
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
62 ssi_quoted_value_state,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
63 ssi_quoted_symbol_state,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
64 ssi_postparam_state,
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
65 ssi_comment_end0_state,
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
66 ssi_comment_end1_state,
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
67 ssi_error_state,
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
68 ssi_error_end0_state,
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
69 ssi_error_end1_state
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
70 } ngx_http_ssi_state_e;
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
73 static ngx_int_t ngx_http_ssi_output(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
74 ngx_http_ssi_ctx_t *ctx);
3680
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
75 static void ngx_http_ssi_buffered(ngx_http_request_t *r,
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
76 ngx_http_ssi_ctx_t *ctx);
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
77 static ngx_int_t ngx_http_ssi_parse(ngx_http_request_t *r,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
78 ngx_http_ssi_ctx_t *ctx);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
79 static ngx_str_t *ngx_http_ssi_get_variable(ngx_http_request_t *r,
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
80 ngx_str_t *name, ngx_uint_t key);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
81 static ngx_int_t ngx_http_ssi_evaluate_string(ngx_http_request_t *r,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
82 ngx_http_ssi_ctx_t *ctx, ngx_str_t *text, ngx_uint_t flags);
4381
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
83 static ngx_int_t ngx_http_ssi_regex_match(ngx_http_request_t *r,
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
84 ngx_str_t *pattern, ngx_str_t *str);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
85
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
86 static ngx_int_t ngx_http_ssi_include(ngx_http_request_t *r,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
87 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
88 static ngx_int_t ngx_http_ssi_stub_output(ngx_http_request_t *r, void *data,
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
89 ngx_int_t rc);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
90 static ngx_int_t ngx_http_ssi_set_variable(ngx_http_request_t *r, void *data,
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
91 ngx_int_t rc);
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
92 static ngx_int_t ngx_http_ssi_echo(ngx_http_request_t *r,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
93 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
94 static ngx_int_t ngx_http_ssi_config(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
95 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
96 static ngx_int_t ngx_http_ssi_set(ngx_http_request_t *r,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
97 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
98 static ngx_int_t ngx_http_ssi_if(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
99 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
100 static ngx_int_t ngx_http_ssi_else(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
101 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
102 static ngx_int_t ngx_http_ssi_endif(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
103 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
104 static ngx_int_t ngx_http_ssi_block(ngx_http_request_t *r,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
105 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
106 static ngx_int_t ngx_http_ssi_endblock(ngx_http_request_t *r,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
107 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
108
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
109 static ngx_int_t ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
2041
3f75a582a11e style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
110 ngx_http_variable_value_t *v, uintptr_t gmt);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
111
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
112 static ngx_int_t ngx_http_ssi_preconfiguration(ngx_conf_t *cf);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
113 static void *ngx_http_ssi_create_main_conf(ngx_conf_t *cf);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
114 static char *ngx_http_ssi_init_main_conf(ngx_conf_t *cf, void *conf);
1169
ea5676ca98f4 style fix: rename functions
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
115 static void *ngx_http_ssi_create_loc_conf(ngx_conf_t *cf);
ea5676ca98f4 style fix: rename functions
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
116 static char *ngx_http_ssi_merge_loc_conf(ngx_conf_t *cf,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
117 void *parent, void *child);
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
118 static ngx_int_t ngx_http_ssi_filter_init(ngx_conf_t *cf);
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
119
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
120
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
121 static ngx_command_t ngx_http_ssi_filter_commands[] = {
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
122
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
123 { ngx_string("ssi"),
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
124 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
125 |NGX_CONF_FLAG,
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
126 ngx_conf_set_flag_slot,
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
127 NGX_HTTP_LOC_CONF_OFFSET,
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
128 offsetof(ngx_http_ssi_loc_conf_t, enable),
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
129 NULL },
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
130
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
131 { ngx_string("ssi_silent_errors"),
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
132 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
133 ngx_conf_set_flag_slot,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
134 NGX_HTTP_LOC_CONF_OFFSET,
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
135 offsetof(ngx_http_ssi_loc_conf_t, silent_errors),
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
136 NULL },
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
137
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
138 { ngx_string("ssi_ignore_recycled_buffers"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
139 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
140 ngx_conf_set_flag_slot,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
141 NGX_HTTP_LOC_CONF_OFFSET,
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
142 offsetof(ngx_http_ssi_loc_conf_t, ignore_recycled_buffers),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
143 NULL },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
144
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
145 { ngx_string("ssi_min_file_chunk"),
4273
e444e8f6538b Fixed NGX_CONF_TAKE1/NGX_CONF_FLAG misuse.
Sergey Budnevitch <sb@waeme.net>
parents: 3887
diff changeset
146 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
147 ngx_conf_set_size_slot,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
148 NGX_HTTP_LOC_CONF_OFFSET,
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
149 offsetof(ngx_http_ssi_loc_conf_t, min_file_chunk),
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
150 NULL },
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
151
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
152 { ngx_string("ssi_value_length"),
4273
e444e8f6538b Fixed NGX_CONF_TAKE1/NGX_CONF_FLAG misuse.
Sergey Budnevitch <sb@waeme.net>
parents: 3887
diff changeset
153 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
154 ngx_conf_set_size_slot,
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
155 NGX_HTTP_LOC_CONF_OFFSET,
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
156 offsetof(ngx_http_ssi_loc_conf_t, value_len),
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
157 NULL },
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
158
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
159 { ngx_string("ssi_types"),
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
160 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
2166
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
161 ngx_http_types_slot,
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
162 NGX_HTTP_LOC_CONF_OFFSET,
2166
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
163 offsetof(ngx_http_ssi_loc_conf_t, types_keys),
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
164 &ngx_http_html_default_types[0] },
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
165
5228
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
166 { ngx_string("ssi_last_modified"),
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
167 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
168 ngx_conf_set_flag_slot,
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
169 NGX_HTTP_LOC_CONF_OFFSET,
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
170 offsetof(ngx_http_ssi_loc_conf_t, last_modified),
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
171 NULL },
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
172
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
173 ngx_null_command
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
174 };
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
175
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
176
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
177
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
178 static ngx_http_module_t ngx_http_ssi_filter_module_ctx = {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
179 ngx_http_ssi_preconfiguration, /* preconfiguration */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
180 ngx_http_ssi_filter_init, /* postconfiguration */
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
181
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
182 ngx_http_ssi_create_main_conf, /* create main configuration */
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
183 ngx_http_ssi_init_main_conf, /* init main configuration */
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
185 NULL, /* create server configuration */
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
186 NULL, /* merge server configuration */
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
187
1169
ea5676ca98f4 style fix: rename functions
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
188 ngx_http_ssi_create_loc_conf, /* create location configuration */
ea5676ca98f4 style fix: rename functions
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
189 ngx_http_ssi_merge_loc_conf /* merge location configuration */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
190 };
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
193 ngx_module_t ngx_http_ssi_filter_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
194 NGX_MODULE_V1,
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
195 &ngx_http_ssi_filter_module_ctx, /* module context */
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
196 ngx_http_ssi_filter_commands, /* module directives */
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
197 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
198 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
199 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
200 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
201 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
202 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
203 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
204 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
205 NGX_MODULE_V1_PADDING
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 };
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
209 static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
210 static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
211
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
212
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
213 static u_char ngx_http_ssi_string[] = "<!--";
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
214
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
215 static ngx_str_t ngx_http_ssi_none = ngx_string("(none)");
5540
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
216 static ngx_str_t ngx_http_ssi_timefmt = ngx_string("%A, %d-%b-%Y %H:%M:%S %Z");
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
217 static ngx_str_t ngx_http_ssi_null_string = ngx_null_string;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
218
16
6ce4755737b4 nginx-0.0.1-2002-09-26-20:50:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 15
diff changeset
219
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
220 #define NGX_HTTP_SSI_INCLUDE_VIRTUAL 0
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
221 #define NGX_HTTP_SSI_INCLUDE_FILE 1
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
222 #define NGX_HTTP_SSI_INCLUDE_WAIT 2
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
223 #define NGX_HTTP_SSI_INCLUDE_SET 3
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
224 #define NGX_HTTP_SSI_INCLUDE_STUB 4
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
225
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
226 #define NGX_HTTP_SSI_ECHO_VAR 0
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
227 #define NGX_HTTP_SSI_ECHO_DEFAULT 1
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
228 #define NGX_HTTP_SSI_ECHO_ENCODING 2
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
229
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
230 #define NGX_HTTP_SSI_CONFIG_ERRMSG 0
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
231 #define NGX_HTTP_SSI_CONFIG_TIMEFMT 1
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
232
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
233 #define NGX_HTTP_SSI_SET_VAR 0
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
234 #define NGX_HTTP_SSI_SET_VALUE 1
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
235
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
236 #define NGX_HTTP_SSI_IF_EXPR 0
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
237
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
238 #define NGX_HTTP_SSI_BLOCK_NAME 0
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
239
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
240
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
241 static ngx_http_ssi_param_t ngx_http_ssi_include_params[] = {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
242 { ngx_string("virtual"), NGX_HTTP_SSI_INCLUDE_VIRTUAL, 0, 0 },
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
243 { ngx_string("file"), NGX_HTTP_SSI_INCLUDE_FILE, 0, 0 },
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
244 { ngx_string("wait"), NGX_HTTP_SSI_INCLUDE_WAIT, 0, 0 },
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
245 { ngx_string("set"), NGX_HTTP_SSI_INCLUDE_SET, 0, 0 },
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
246 { ngx_string("stub"), NGX_HTTP_SSI_INCLUDE_STUB, 0, 0 },
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
247 { ngx_null_string, 0, 0, 0 }
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
248 };
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
249
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
250
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
251 static ngx_http_ssi_param_t ngx_http_ssi_echo_params[] = {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
252 { ngx_string("var"), NGX_HTTP_SSI_ECHO_VAR, 1, 0 },
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
253 { ngx_string("default"), NGX_HTTP_SSI_ECHO_DEFAULT, 0, 0 },
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
254 { ngx_string("encoding"), NGX_HTTP_SSI_ECHO_ENCODING, 0, 0 },
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
255 { ngx_null_string, 0, 0, 0 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
256 };
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
257
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
258
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
259 static ngx_http_ssi_param_t ngx_http_ssi_config_params[] = {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
260 { ngx_string("errmsg"), NGX_HTTP_SSI_CONFIG_ERRMSG, 0, 0 },
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
261 { ngx_string("timefmt"), NGX_HTTP_SSI_CONFIG_TIMEFMT, 0, 0 },
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
262 { ngx_null_string, 0, 0, 0 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
263 };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
264
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
265
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
266 static ngx_http_ssi_param_t ngx_http_ssi_set_params[] = {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
267 { ngx_string("var"), NGX_HTTP_SSI_SET_VAR, 1, 0 },
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
268 { ngx_string("value"), NGX_HTTP_SSI_SET_VALUE, 1, 0 },
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
269 { ngx_null_string, 0, 0, 0 }
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
270 };
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
271
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
272
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
273 static ngx_http_ssi_param_t ngx_http_ssi_if_params[] = {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
274 { ngx_string("expr"), NGX_HTTP_SSI_IF_EXPR, 1, 0 },
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
275 { ngx_null_string, 0, 0, 0 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
276 };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
277
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
278
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
279 static ngx_http_ssi_param_t ngx_http_ssi_block_params[] = {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
280 { ngx_string("name"), NGX_HTTP_SSI_BLOCK_NAME, 1, 0 },
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
281 { ngx_null_string, 0, 0, 0 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
282 };
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
283
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
284
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
285 static ngx_http_ssi_param_t ngx_http_ssi_no_params[] = {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
286 { ngx_null_string, 0, 0, 0 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
287 };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
288
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
289
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
290 static ngx_http_ssi_command_t ngx_http_ssi_commands[] = {
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
291 { ngx_string("include"), ngx_http_ssi_include,
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
292 ngx_http_ssi_include_params, 0, 0, 1 },
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
293 { ngx_string("echo"), ngx_http_ssi_echo,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
294 ngx_http_ssi_echo_params, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
295 { ngx_string("config"), ngx_http_ssi_config,
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
296 ngx_http_ssi_config_params, 0, 0, 0 },
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
297 { ngx_string("set"), ngx_http_ssi_set, ngx_http_ssi_set_params, 0, 0, 0 },
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
298
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
299 { ngx_string("if"), ngx_http_ssi_if, ngx_http_ssi_if_params, 0, 0, 0 },
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
300 { ngx_string("elif"), ngx_http_ssi_if, ngx_http_ssi_if_params,
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
301 NGX_HTTP_SSI_COND_IF, 0, 0 },
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
302 { ngx_string("else"), ngx_http_ssi_else, ngx_http_ssi_no_params,
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
303 NGX_HTTP_SSI_COND_IF, 0, 0 },
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
304 { ngx_string("endif"), ngx_http_ssi_endif, ngx_http_ssi_no_params,
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
305 NGX_HTTP_SSI_COND_ELSE, 0, 0 },
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
306
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
307 { ngx_string("block"), ngx_http_ssi_block,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
308 ngx_http_ssi_block_params, 0, 0, 0 },
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
309 { ngx_string("endblock"), ngx_http_ssi_endblock,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
310 ngx_http_ssi_no_params, 0, 1, 0 },
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
311
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
312 { ngx_null_string, NULL, NULL, 0, 0, 0 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
313 };
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
314
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
315
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
316 static ngx_http_variable_t ngx_http_ssi_vars[] = {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
317
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
318 { ngx_string("date_local"), NULL, ngx_http_ssi_date_gmt_local_variable, 0,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1545
diff changeset
319 NGX_HTTP_VAR_NOCACHEABLE, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
320
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
321 { ngx_string("date_gmt"), NULL, ngx_http_ssi_date_gmt_local_variable, 1,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1545
diff changeset
322 NGX_HTTP_VAR_NOCACHEABLE, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
323
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
324 { ngx_null_string, NULL, NULL, 0, 0, 0 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
325 };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
326
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
327
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
328
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
329 static ngx_int_t
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
330 ngx_http_ssi_header_filter(ngx_http_request_t *r)
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
331 {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
332 ngx_http_ssi_ctx_t *ctx;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
333 ngx_http_ssi_loc_conf_t *slcf;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
334
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
335 slcf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
336
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
337 if (!slcf->enable
2166
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
338 || r->headers_out.content_length_n == 0
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
339 || ngx_http_test_content_type(r, &slcf->types) == NULL)
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 243
diff changeset
340 {
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 243
diff changeset
341 return ngx_http_next_header_filter(r);
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 243
diff changeset
342 }
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 243
diff changeset
343
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
344 ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_ssi_ctx_t));
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
345 if (ctx == NULL) {
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
346 return NGX_ERROR;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
347 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
348
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
349 ngx_http_set_ctx(r, ctx, ngx_http_ssi_filter_module);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
350
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
351
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
352 ctx->value_len = slcf->value_len;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
353 ctx->last_out = &ctx->out;
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
354
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
355 ctx->encoding = NGX_HTTP_SSI_ENTITY_ENCODING;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
356 ctx->output = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
357
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
358 ctx->params.elts = ctx->params_array;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
359 ctx->params.size = sizeof(ngx_table_elt_t);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
360 ctx->params.nalloc = NGX_HTTP_SSI_PARAMS_N;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
361 ctx->params.pool = r->pool;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
362
5540
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
363 ctx->timefmt = ngx_http_ssi_timefmt;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3500
diff changeset
364 ngx_str_set(&ctx->errmsg,
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3500
diff changeset
365 "[an error occurred while processing the directive]");
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
366
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
367 r->filter_need_in_memory = 1;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
368
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
369 if (r == r->main) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
370 ngx_http_clear_content_length(r);
3005
5bc8811728f8 clear "Accept-Ranges" for SSI responses
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
371 ngx_http_clear_accept_ranges(r);
5228
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
372
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
373 if (!slcf->last_modified) {
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
374 ngx_http_clear_last_modified(r);
5733
e491b26fa5a1 Entity tags: downgrade strong etags to weak ones as needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5540
diff changeset
375 ngx_http_clear_etag(r);
e491b26fa5a1 Entity tags: downgrade strong etags to weak ones as needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5540
diff changeset
376
e491b26fa5a1 Entity tags: downgrade strong etags to weak ones as needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5540
diff changeset
377 } else {
e491b26fa5a1 Entity tags: downgrade strong etags to weak ones as needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5540
diff changeset
378 ngx_http_weak_etag(r);
5228
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
379 }
509
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
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
382 return ngx_http_next_header_filter(r);
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
383 }
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
384
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
385
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
386 static ngx_int_t
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
387 ngx_http_ssi_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
15
cbb38b60495c nginx-0.0.1-2002-09-18-20:32:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 14
diff changeset
388 {
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
389 size_t len;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
390 ngx_int_t rc;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
391 ngx_buf_t *b;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
392 ngx_uint_t i, index;
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
393 ngx_chain_t *cl, **ll;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
394 ngx_table_elt_t *param;
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
395 ngx_http_ssi_ctx_t *ctx, *mctx;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
396 ngx_http_ssi_block_t *bl;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
397 ngx_http_ssi_param_t *prm;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
398 ngx_http_ssi_command_t *cmd;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
399 ngx_http_ssi_loc_conf_t *slcf;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
400 ngx_http_ssi_main_conf_t *smcf;
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 597
diff changeset
401 ngx_str_t *params[NGX_HTTP_SSI_MAX_PARAMS + 1];
16
6ce4755737b4 nginx-0.0.1-2002-09-26-20:50:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 15
diff changeset
402
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
403 ctx = ngx_http_get_module_ctx(r, ngx_http_ssi_filter_module);
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
404
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
405 if (ctx == NULL
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
406 || (in == NULL
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
407 && ctx->buf == NULL
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
408 && ctx->in == NULL
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
409 && ctx->busy == NULL))
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
410 {
243
bf2faf694c19 nginx-0.0.1-2004-01-28-23:38:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
411 return ngx_http_next_body_filter(r, in);
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
412 }
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
413
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
414 /* add the incoming chain to the chain ctx->in */
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
415
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
416 if (in) {
2536
a6d6d762c554 small optimization: " == NGX_ERROR" > " != NGX_OK"
Igor Sysoev <igor@sysoev.ru>
parents: 2426
diff changeset
417 if (ngx_chain_add_copy(r->pool, &ctx->in, in) != NGX_OK) {
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
418 return NGX_ERROR;
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
419 }
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
420 }
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
421
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
422 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
423 "http ssi filter \"%V?%V\"", &r->uri, &r->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
424
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
425 if (ctx->wait) {
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
426
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
427 if (r != r->connection->data) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
428 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
429 "http ssi filter wait \"%V?%V\" non-active",
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
430 &ctx->wait->uri, &ctx->wait->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
431
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
432 return NGX_AGAIN;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
433 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
434
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
435 if (ctx->wait->done) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
436 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
437 "http ssi filter wait \"%V?%V\" done",
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
438 &ctx->wait->uri, &ctx->wait->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
439
767
cad7543dc419 fix <!--#include virtual=... wait="yes" -->
Igor Sysoev <igor@sysoev.ru>
parents: 765
diff changeset
440 ctx->wait = NULL;
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
441
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
442 } else {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
443 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
444 "http ssi filter wait \"%V?%V\"",
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
445 &ctx->wait->uri, &ctx->wait->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
446
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
447 return ngx_http_next_body_filter(r, NULL);
767
cad7543dc419 fix <!--#include virtual=... wait="yes" -->
Igor Sysoev <igor@sysoev.ru>
parents: 765
diff changeset
448 }
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
449 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
450
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
451 slcf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
452
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
453 while (ctx->in || ctx->buf) {
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
454
3642
ac33852faaac style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
455 if (ctx->buf == NULL) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
456 ctx->buf = ctx->in->buf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
457 ctx->in = ctx->in->next;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
458 ctx->pos = ctx->buf->pos;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
459 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
460
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
461 if (ctx->state == ssi_start_state) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
462 ctx->copy_start = ctx->pos;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
463 ctx->copy_end = ctx->pos;
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
464 }
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
465
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
466 b = NULL;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
467
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
468 while (ctx->pos < ctx->buf->last) {
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
469
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
470 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5733
diff changeset
471 "saved: %uz state: %ui", ctx->saved, ctx->state);
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
472
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
473 rc = ngx_http_ssi_parse(r, ctx);
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
474
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
475 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5733
diff changeset
476 "parse: %i, looked: %uz %p-%p",
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
477 rc, ctx->looked, ctx->copy_start, ctx->copy_end);
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
478
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
479 if (rc == NGX_ERROR) {
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
480 return rc;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
481 }
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
482
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
483 if (ctx->copy_start != ctx->copy_end) {
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
484
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
485 if (ctx->output) {
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 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5733
diff changeset
488 "saved: %uz", ctx->saved);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
489
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
490 if (ctx->saved) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
491
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
492 if (ctx->free) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
493 cl = ctx->free;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
494 ctx->free = ctx->free->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
495 b = cl->buf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
496 ngx_memzero(b, sizeof(ngx_buf_t));
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
497
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
498 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
499 b = ngx_calloc_buf(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
500 if (b == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
501 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
502 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
503
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
504 cl = ngx_alloc_chain_link(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
505 if (cl == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
506 return NGX_ERROR;
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
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
509 cl->buf = b;
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 b->memory = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
513 b->pos = ngx_http_ssi_string;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
514 b->last = ngx_http_ssi_string + ctx->saved;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
515
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
516 *ctx->last_out = cl;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
517 ctx->last_out = &cl->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
518
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
519 ctx->saved = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
520 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
521
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
522 if (ctx->free) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
523 cl = ctx->free;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
524 ctx->free = ctx->free->next;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
525 b = cl->buf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
526
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
527 } else {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
528 b = ngx_alloc_buf(r->pool);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
529 if (b == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
530 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
531 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
532
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
533 cl = ngx_alloc_chain_link(r->pool);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
534 if (cl == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
535 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
536 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
537
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
538 cl->buf = b;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
539 }
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
540
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
541 ngx_memcpy(b, ctx->buf, sizeof(ngx_buf_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
542
513
fbbf16224844 nginx-0.1.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
543 b->pos = ctx->copy_start;
fbbf16224844 nginx-0.1.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
544 b->last = ctx->copy_end;
fbbf16224844 nginx-0.1.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
545 b->shadow = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
546 b->last_buf = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
547 b->recycled = 0;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
548
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
549 if (b->in_file) {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
550 if (slcf->min_file_chunk < (size_t) (b->last - b->pos))
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
551 {
2079
333ef9e18a59 fix error when response parsed by sub filter, then by SSI filter
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
552 b->file_last = b->file_pos
333ef9e18a59 fix error when response parsed by sub filter, then by SSI filter
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
553 + (b->last - ctx->buf->pos);
333ef9e18a59 fix error when response parsed by sub filter, then by SSI filter
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
554 b->file_pos += b->pos - ctx->buf->pos;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
555
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
556 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
557 b->in_file = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
558 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
559 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
560
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
561 cl->next = NULL;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
562 *ctx->last_out = cl;
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
563 ctx->last_out = &cl->next;
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
564
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
565 } else {
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
566 if (ctx->block
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
567 && ctx->saved + (ctx->copy_end - ctx->copy_start))
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
568 {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
569 b = ngx_create_temp_buf(r->pool,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
570 ctx->saved + (ctx->copy_end - ctx->copy_start));
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
571
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
572 if (b == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
573 return NGX_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
574 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
575
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
576 if (ctx->saved) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
577 b->last = ngx_cpymem(b->pos, ngx_http_ssi_string,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
578 ctx->saved);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
579 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
580
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
581 b->last = ngx_cpymem(b->last, ctx->copy_start,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
582 ctx->copy_end - ctx->copy_start);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
583
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
584 cl = ngx_alloc_chain_link(r->pool);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
585 if (cl == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
586 return NGX_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
587 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
588
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
589 cl->buf = b;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
590 cl->next = NULL;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
591
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
592 b = NULL;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
593
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
594 mctx = ngx_http_get_module_ctx(r->main,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
595 ngx_http_ssi_filter_module);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
596 bl = mctx->blocks->elts;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
597 for (ll = &bl[mctx->blocks->nelts - 1].bufs;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
598 *ll;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
599 ll = &(*ll)->next)
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
600 {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
601 /* void */
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
602 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
603
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
604 *ll = cl;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
605 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
606
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
607 ctx->saved = 0;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
608 }
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
609 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
610
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
611 if (ctx->state == ssi_start_state) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
612 ctx->copy_start = ctx->pos;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
613 ctx->copy_end = ctx->pos;
240
725129fdd524 nginx-0.0.1-2004-01-26-20:22:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 239
diff changeset
614
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
615 } else {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
616 ctx->copy_start = NULL;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
617 ctx->copy_end = NULL;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
618 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
619
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
620 if (rc == NGX_AGAIN) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
621 continue;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
622 }
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
623
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
624
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
625 b = NULL;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
626
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
627 if (rc == NGX_OK) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
628
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
629 smcf = ngx_http_get_module_main_conf(r,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
630 ngx_http_ssi_filter_module);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
631
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
632 cmd = ngx_hash_find(&smcf->hash, ctx->key, ctx->command.data,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
633 ctx->command.len);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
634
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
635 if (cmd == NULL) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
636 if (ctx->output) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
637 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
638 "invalid SSI command: \"%V\"",
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
639 &ctx->command);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
640 goto ssi_error;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
641 }
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
642
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
643 continue;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
644 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
645
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
646 if (!ctx->output && !cmd->block) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
647
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
648 if (ctx->block) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
649
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
650 /* reconstruct the SSI command text */
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
651
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
652 len = 5 + ctx->command.len + 4;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
653
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
654 param = ctx->params.elts;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
655 for (i = 0; i < ctx->params.nelts; i++) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
656 len += 1 + param[i].key.len + 2
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
657 + param[i].value.len + 1;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
658 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
659
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
660 b = ngx_create_temp_buf(r->pool, len);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
661
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
662 if (b == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
663 return NGX_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
664 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
665
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
666 cl = ngx_alloc_chain_link(r->pool);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
667 if (cl == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
668 return NGX_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
669 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
670
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
671 cl->buf = b;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
672 cl->next = NULL;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
673
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
674 *b->last++ = '<';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
675 *b->last++ = '!';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
676 *b->last++ = '-';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
677 *b->last++ = '-';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
678 *b->last++ = '#';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
679
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
680 b->last = ngx_cpymem(b->last, ctx->command.data,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
681 ctx->command.len);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
682
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
683 for (i = 0; i < ctx->params.nelts; i++) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
684 *b->last++ = ' ';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
685 b->last = ngx_cpymem(b->last, param[i].key.data,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
686 param[i].key.len);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
687 *b->last++ = '=';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
688 *b->last++ = '"';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
689 b->last = ngx_cpymem(b->last, param[i].value.data,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
690 param[i].value.len);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
691 *b->last++ = '"';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
692 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
693
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
694 *b->last++ = ' ';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
695 *b->last++ = '-';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
696 *b->last++ = '-';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
697 *b->last++ = '>';
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
698
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
699 mctx = ngx_http_get_module_ctx(r->main,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
700 ngx_http_ssi_filter_module);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
701 bl = mctx->blocks->elts;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
702 for (ll = &bl[mctx->blocks->nelts - 1].bufs;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
703 *ll;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
704 ll = &(*ll)->next)
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
705 {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
706 /* void */
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
707 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
708
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
709 *ll = cl;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
710
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
711 b = NULL;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
712
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
713 continue;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
714 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
715
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
716 if (cmd->conditional == 0) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
717 continue;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
718 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
719 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
720
4374
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
721 if (cmd->conditional
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
722 && (ctx->conditional == 0
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
723 || ctx->conditional > cmd->conditional))
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
724 {
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
725 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
726 "invalid context of SSI command: \"%V\"",
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
727 &ctx->command);
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
728 goto ssi_error;
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
729 }
ae376a94de11 SSI bugfix: the "if" command did not work inside the "block" command and
Valentin Bartenev <vbart@nginx.com>
parents: 4273
diff changeset
730
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
731 if (ctx->params.nelts > NGX_HTTP_SSI_MAX_PARAMS) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
732 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4567
1f0ecc900010 Corrected spelling of error message (ticket #136).
Ruslan Ermilov <ru@nginx.com>
parents: 4528
diff changeset
733 "too many SSI command parameters: \"%V\"",
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
734 &ctx->command);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
735 goto ssi_error;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
736 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
737
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
738 ngx_memzero(params,
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 597
diff changeset
739 (NGX_HTTP_SSI_MAX_PARAMS + 1) * sizeof(ngx_str_t *));
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
740
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
741 param = ctx->params.elts;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
742
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
743 for (i = 0; i < ctx->params.nelts; i++) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
744
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
745 for (prm = cmd->params; prm->name.len; prm++) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
746
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
747 if (param[i].key.len != prm->name.len
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
748 || ngx_strncmp(param[i].key.data, prm->name.data,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
749 prm->name.len) != 0)
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
750 {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
751 continue;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
752 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
753
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
754 if (!prm->multiple) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
755 if (params[prm->index]) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
756 ngx_log_error(NGX_LOG_ERR,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
757 r->connection->log, 0,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
758 "duplicate \"%V\" parameter "
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
759 "in \"%V\" SSI command",
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
760 &param[i].key, &ctx->command);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
761
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
762 goto ssi_error;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
763 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
764
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
765 params[prm->index] = &param[i].value;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
766
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
767 break;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
768 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
769
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
770 for (index = prm->index; params[index]; index++) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
771 /* void */
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
772 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
773
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
774 params[index] = &param[i].value;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
775
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
776 break;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
777 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
778
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
779 if (prm->name.len == 0) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
780 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
781 "invalid parameter name: \"%V\" "
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
782 "in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
783 &param[i].key, &ctx->command);
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
784
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
785 goto ssi_error;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
786 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
787 }
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
788
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
789 for (prm = cmd->params; prm->name.len; prm++) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
790 if (prm->mandatory && params[prm->index] == 0) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
791 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
792 "mandatory \"%V\" parameter is absent "
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
793 "in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
794 &prm->name, &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
795
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
796 goto ssi_error;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
797 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
798 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
799
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
800 if (cmd->flush && ctx->out) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
801
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
802 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
803 "ssi flush");
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
804
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
805 if (ngx_http_ssi_output(r, ctx) == NGX_ERROR) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
806 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
807 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
808 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
809
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
810 rc = cmd->handler(r, ctx, params);
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
811
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
812 if (rc == NGX_OK) {
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
813 continue;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
814 }
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
815
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
816 if (rc == NGX_DONE || rc == NGX_AGAIN || rc == NGX_ERROR) {
3680
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
817 ngx_http_ssi_buffered(r, ctx);
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
818 return rc;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
819 }
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
820 }
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
821
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
822
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
823 /* rc == NGX_HTTP_SSI_ERROR */
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
824
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
825 ssi_error:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
826
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
827 if (slcf->silent_errors) {
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
828 continue;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
829 }
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
830
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
831 if (ctx->free) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
832 cl = ctx->free;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
833 ctx->free = ctx->free->next;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
834 b = cl->buf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
835 ngx_memzero(b, sizeof(ngx_buf_t));
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
836
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
837 } else {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
838 b = ngx_calloc_buf(r->pool);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
839 if (b == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
840 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
841 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
842
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
843 cl = ngx_alloc_chain_link(r->pool);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
844 if (cl == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
845 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
846 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
847
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
848 cl->buf = b;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
849 }
16
6ce4755737b4 nginx-0.0.1-2002-09-26-20:50:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 15
diff changeset
850
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
851 b->memory = 1;
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
852 b->pos = ctx->errmsg.data;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
853 b->last = ctx->errmsg.data + ctx->errmsg.len;
16
6ce4755737b4 nginx-0.0.1-2002-09-26-20:50:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 15
diff changeset
854
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
855 cl->next = NULL;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
856 *ctx->last_out = cl;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
857 ctx->last_out = &cl->next;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
858
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
859 continue;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
860 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
861
710
6875ee9f93c7 ssi did work with memcached and nonbuffered responses
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
862 if (ctx->buf->last_buf || ngx_buf_in_memory(ctx->buf)) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
863 if (b == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
864 if (ctx->free) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
865 cl = ctx->free;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
866 ctx->free = ctx->free->next;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
867 b = cl->buf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
868 ngx_memzero(b, sizeof(ngx_buf_t));
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
869
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
870 } else {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
871 b = ngx_calloc_buf(r->pool);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
872 if (b == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
873 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
874 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
875
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
876 cl = ngx_alloc_chain_link(r->pool);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
877 if (cl == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
878 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
879 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
880
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
881 cl->buf = b;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
882 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
883
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
884 b->sync = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
885
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
886 cl->next = NULL;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
887 *ctx->last_out = cl;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
888 ctx->last_out = &cl->next;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
889 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
890
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
891 b->last_buf = ctx->buf->last_buf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
892 b->shadow = ctx->buf;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
893
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
894 if (slcf->ignore_recycled_buffers == 0) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
895 b->recycled = ctx->buf->recycled;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
896 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
897 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
898
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
899 ctx->buf = NULL;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
900
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
901 ctx->saved = ctx->looked;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
902 }
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
903
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
904 if (ctx->out == NULL && ctx->busy == NULL) {
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
905 return NGX_OK;
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
906 }
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
907
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
908 return ngx_http_ssi_output(r, ctx);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
909 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
910
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
911
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
912 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
913 ngx_http_ssi_output(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
914 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
915 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
916 ngx_buf_t *b;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
917 ngx_chain_t *cl;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
918
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
919 #if 1
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
920 b = NULL;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
921 for (cl = ctx->out; cl; cl = cl->next) {
643
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
922 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
923 "ssi out: %p %p", cl->buf, cl->buf->pos);
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
924 if (cl->buf == b) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
925 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
926 "the same buf was used in ssi");
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
927 ngx_debug_point();
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
928 return NGX_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
929 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
930 b = cl->buf;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
931 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
932 #endif
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
933
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
934 rc = ngx_http_next_body_filter(r, ctx->out);
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
935
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
936 if (ctx->busy == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
937 ctx->busy = ctx->out;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
938
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
939 } else {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
940 for (cl = ctx->busy; cl->next; cl = cl->next) { /* void */ }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
941 cl->next = ctx->out;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
942 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
943
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
944 ctx->out = NULL;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
945 ctx->last_out = &ctx->out;
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
946
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
947 while (ctx->busy) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
948
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
949 cl = ctx->busy;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
950 b = cl->buf;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
951
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
952 if (ngx_buf_size(b) != 0) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
953 break;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
954 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
955
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
956 if (b->shadow) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
957 b->shadow->pos = b->shadow->last;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
958 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
959
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
960 ctx->busy = cl->next;
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
961
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
962 if (ngx_buf_in_memory(b) || b->in_file) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
963 /* add data bufs only to the free buf chain */
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
964
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
965 cl->next = ctx->free;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
966 ctx->free = cl;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
967 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
968 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
969
3680
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
970 ngx_http_ssi_buffered(r, ctx);
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
971
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
972 return rc;
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
973 }
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
974
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
975
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
976 static void
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
977 ngx_http_ssi_buffered(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
0d492ae53a57 update r->buffered after processing SSI command,
Igor Sysoev <igor@sysoev.ru>
parents: 3642
diff changeset
978 {
829
362d156f0278 high level HTTP buffered flags should be on per-subrequest basis,
Igor Sysoev <igor@sysoev.ru>
parents: 787
diff changeset
979 if (ctx->in || ctx->buf) {
362d156f0278 high level HTTP buffered flags should be on per-subrequest basis,
Igor Sysoev <igor@sysoev.ru>
parents: 787
diff changeset
980 r->buffered |= NGX_HTTP_SSI_BUFFERED;
362d156f0278 high level HTTP buffered flags should be on per-subrequest basis,
Igor Sysoev <igor@sysoev.ru>
parents: 787
diff changeset
981
362d156f0278 high level HTTP buffered flags should be on per-subrequest basis,
Igor Sysoev <igor@sysoev.ru>
parents: 787
diff changeset
982 } else {
362d156f0278 high level HTTP buffered flags should be on per-subrequest basis,
Igor Sysoev <igor@sysoev.ru>
parents: 787
diff changeset
983 r->buffered &= ~NGX_HTTP_SSI_BUFFERED;
362d156f0278 high level HTTP buffered flags should be on per-subrequest basis,
Igor Sysoev <igor@sysoev.ru>
parents: 787
diff changeset
984 }
129
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
985 }
7a886b9a67dc nginx-0.0.1-2003-08-10-20:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
986
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
987
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
988 static ngx_int_t
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
989 ngx_http_ssi_parse(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
990 {
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
991 u_char *p, *value, *last, *copy_end, ch;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
992 size_t looked;
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
993 ngx_http_ssi_state_e state;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
994
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
995 state = ctx->state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
996 looked = ctx->looked;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
997 last = ctx->buf->last;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
998 copy_end = ctx->copy_end;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
999
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1000 for (p = ctx->pos; p < last; p++) {
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1001
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1002 ch = *p;
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1003
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1004 if (state == ssi_start_state) {
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1005
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1006 /* the tight loop */
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1007
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1008 for ( ;; ) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1009 if (ch == '<') {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1010 copy_end = p;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1011 looked = 1;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1012 state = ssi_tag_state;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1013
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1014 goto tag_started;
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1015 }
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1016
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1017 if (++p == last) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1018 break;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1019 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1020
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1021 ch = *p;
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1022 }
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1023
1260
c3541b8973de if "<!--" was on edge of buf, then ssi_sharp_state was saved in ctx->saved
Igor Sysoev <igor@sysoev.ru>
parents: 1190
diff changeset
1024 ctx->state = state;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1025 ctx->pos = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1026 ctx->looked = looked;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1027 ctx->copy_end = p;
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1028
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1029 if (ctx->copy_start == NULL) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1030 ctx->copy_start = ctx->buf->pos;
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1031 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1032
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1033 return NGX_AGAIN;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1034
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1035 tag_started:
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1036
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1037 continue;
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1038 }
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1039
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
1040 switch (state) {
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1041
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
1042 case ssi_start_state:
4821
f1867c1d4c63 Mark logically dead code with corresponding comment.
Andrey Belov <defan@nginx.com>
parents: 4746
diff changeset
1043 /* not reached */
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1044 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1045
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1046 case ssi_tag_state:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1047 switch (ch) {
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1048 case '!':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1049 looked = 2;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1050 state = ssi_comment0_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1051 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1052
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1053 case '<':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1054 copy_end = p;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1055 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1056
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1057 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1058 copy_end = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1059 looked = 0;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1060 state = ssi_start_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1061 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1062 }
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1063
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1064 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1065
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1066 case ssi_comment0_state:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1067 switch (ch) {
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1068 case '-':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1069 looked = 3;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1070 state = ssi_comment1_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1071 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1072
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1073 case '<':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1074 copy_end = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1075 looked = 1;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1076 state = ssi_tag_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1077 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1078
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1079 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1080 copy_end = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1081 looked = 0;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1082 state = ssi_start_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1083 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1084 }
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1085
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1086 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1087
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1088 case ssi_comment1_state:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1089 switch (ch) {
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1090 case '-':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1091 looked = 4;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1092 state = ssi_sharp_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1093 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1094
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1095 case '<':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1096 copy_end = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1097 looked = 1;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1098 state = ssi_tag_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1099 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1100
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1101 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1102 copy_end = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1103 looked = 0;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1104 state = ssi_start_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1105 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1106 }
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1107
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1108 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1109
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1110 case ssi_sharp_state:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1111 switch (ch) {
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1112 case '#':
659
649c9063d0fd nginx-0.3.51-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
1113 if (p - ctx->pos < 4) {
649c9063d0fd nginx-0.3.51-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
1114 ctx->saved = 0;
649c9063d0fd nginx-0.3.51-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
1115 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1116 looked = 0;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1117 state = ssi_precommand_state;
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1118 break;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1119
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1120 case '<':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1121 copy_end = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1122 looked = 1;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1123 state = ssi_tag_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1124 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1125
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1126 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1127 copy_end = p;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1128 looked = 0;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1129 state = ssi_start_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1130 break;
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1131 }
16
6ce4755737b4 nginx-0.0.1-2002-09-26-20:50:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 15
diff changeset
1132
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1133 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1134
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1135 case ssi_precommand_state:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1136 switch (ch) {
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1137 case ' ':
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1138 case CR:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1139 case LF:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1140 case '\t':
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1141 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1142
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1143 default:
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1144 ctx->command.len = 1;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1145 ctx->command.data = ngx_pnalloc(r->pool,
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1146 NGX_HTTP_SSI_COMMAND_LEN);
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1147 if (ctx->command.data == NULL) {
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1148 return NGX_ERROR;
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1149 }
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1150
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1151 ctx->command.data[0] = ch;
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1152
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1153 ctx->key = 0;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1154 ctx->key = ngx_hash(ctx->key, ch);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1155
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1156 ctx->params.nelts = 0;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1157
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1158 state = ssi_command_state;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1159 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1160 }
16
6ce4755737b4 nginx-0.0.1-2002-09-26-20:50:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 15
diff changeset
1161
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1162 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1163
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1164 case ssi_command_state:
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1165 switch (ch) {
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1166 case ' ':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1167 case CR:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1168 case LF:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1169 case '\t':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1170 state = ssi_preparam_state;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1171 break;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1172
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1173 case '-':
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1174 state = ssi_comment_end0_state;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1175 break;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1176
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1177 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1178 if (ctx->command.len == NGX_HTTP_SSI_COMMAND_LEN) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1179 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1180 "the \"%V%c...\" SSI command is too long",
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1181 &ctx->command, ch);
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1182
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1183 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1184 break;
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1185 }
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1186
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1187 ctx->command.data[ctx->command.len++] = ch;
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1188 ctx->key = ngx_hash(ctx->key, ch);
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1189 }
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1190
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1191 break;
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1192
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1193 case ssi_preparam_state:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1194 switch (ch) {
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1195 case ' ':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1196 case CR:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1197 case LF:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1198 case '\t':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1199 break;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1200
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1201 case '-':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1202 state = ssi_comment_end0_state;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1203 break;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1204
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1205 default:
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1206 ctx->param = ngx_array_push(&ctx->params);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
1207 if (ctx->param == NULL) {
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1208 return NGX_ERROR;
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1209 }
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1210
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1211 ctx->param->key.len = 1;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1212 ctx->param->key.data = ngx_pnalloc(r->pool,
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1213 NGX_HTTP_SSI_PARAM_LEN);
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1214 if (ctx->param->key.data == NULL) {
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1215 return NGX_ERROR;
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1216 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1217
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1218 ctx->param->key.data[0] = ch;
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1219
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1220 ctx->param->value.len = 0;
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1221
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1222 if (ctx->value_buf == NULL) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1223 ctx->param->value.data = ngx_pnalloc(r->pool,
4528
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1224 ctx->value_len + 1);
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1225 if (ctx->param->value.data == NULL) {
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1226 return NGX_ERROR;
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1227 }
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1228
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1229 } else {
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1230 ctx->param->value.data = ctx->value_buf;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1231 }
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1232
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1233 state = ssi_param_state;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1234 break;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1235 }
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1236
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1237 break;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1238
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1239 case ssi_param_state:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1240 switch (ch) {
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1241 case ' ':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1242 case CR:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1243 case LF:
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1244 case '\t':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1245 state = ssi_preequal_state;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1246 break;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1247
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1248 case '=':
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1249 state = ssi_prevalue_state;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1250 break;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1251
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1252 case '-':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1253 state = ssi_error_end0_state;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1254
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1255 ctx->param->key.data[ctx->param->key.len++] = ch;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1256 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1257 "invalid \"%V\" parameter in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1258 &ctx->param->key, &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1259 break;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1260
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1261 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1262 if (ctx->param->key.len == NGX_HTTP_SSI_PARAM_LEN) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1263 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1264 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1265 "too long \"%V%c...\" parameter in "
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1266 "\"%V\" SSI command",
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1267 &ctx->param->key, ch, &ctx->command);
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1268 break;
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1269 }
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1270
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1271 ctx->param->key.data[ctx->param->key.len++] = ch;
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1272 }
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1273
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1274 break;
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1275
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1276 case ssi_preequal_state:
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1277 switch (ch) {
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1278 case ' ':
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1279 case CR:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1280 case LF:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1281 case '\t':
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1282 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1283
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1284 case '=':
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1285 state = ssi_prevalue_state;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1286 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1287
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1288 default:
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1289 if (ch == '-') {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1290 state = ssi_error_end0_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1291 } else {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1292 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1293 }
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1294
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1295 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1296 "unexpected \"%c\" symbol after \"%V\" "
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1297 "parameter in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1298 ch, &ctx->param->key, &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1299 break;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1300 }
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1301
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1302 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1303
127
4cbe22f9907f nginx-0.0.1-2003-08-07-10:07:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
1304 case ssi_prevalue_state:
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1305 switch (ch) {
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1306 case ' ':
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1307 case CR:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1308 case LF:
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1309 case '\t':
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1310 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1311
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1312 case '"':
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1313 state = ssi_double_quoted_value_state;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1314 break;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1315
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1316 case '\'':
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1317 state = ssi_quoted_value_state;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1318 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1319
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1320 default:
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1321 if (ch == '-') {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1322 state = ssi_error_end0_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1323 } else {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1324 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1325 }
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1326
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1327 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1328 "unexpected \"%c\" symbol before value of "
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1329 "\"%V\" parameter in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1330 ch, &ctx->param->key, &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1331 break;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1332 }
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1333
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1334 break;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1335
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1336 case ssi_double_quoted_value_state:
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1337 switch (ch) {
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1338 case '"':
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1339 state = ssi_postparam_state;
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1340 break;
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1341
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1342 case '\\':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1343 ctx->saved_state = ssi_double_quoted_value_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1344 state = ssi_quoted_symbol_state;
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1345
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1346 /* fall through */
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1347
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1348 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1349 if (ctx->param->value.len == ctx->value_len) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1350 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1351 "too long \"%V%c...\" value of \"%V\" "
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1352 "parameter in \"%V\" SSI command",
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1353 &ctx->param->value, ch, &ctx->param->key,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1354 &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1355 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1356 break;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1357 }
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1358
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1359 ctx->param->value.data[ctx->param->value.len++] = ch;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1360 }
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1361
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1362 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1363
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1364 case ssi_quoted_value_state:
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1365 switch (ch) {
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1366 case '\'':
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1367 state = ssi_postparam_state;
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1368 break;
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1369
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1370 case '\\':
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1371 ctx->saved_state = ssi_quoted_value_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1372 state = ssi_quoted_symbol_state;
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1373
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1374 /* fall through */
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1375
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1376 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1377 if (ctx->param->value.len == ctx->value_len) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1378 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1379 "too long \"%V%c...\" value of \"%V\" "
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1380 "parameter in \"%V\" SSI command",
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1381 &ctx->param->value, ch, &ctx->param->key,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1382 &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1383 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1384 break;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1385 }
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1386
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1387 ctx->param->value.data[ctx->param->value.len++] = ch;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1388 }
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1389
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1390 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1391
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1392 case ssi_quoted_symbol_state:
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1393 state = ctx->saved_state;
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1394
4528
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1395 if (ctx->param->value.len == ctx->value_len) {
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1396 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1397 "too long \"%V%c...\" value of \"%V\" "
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1398 "parameter in \"%V\" SSI command",
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1399 &ctx->param->value, ch, &ctx->param->key,
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1400 &ctx->command);
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1401 state = ssi_error_state;
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1402 break;
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1403 }
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1404
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1405 ctx->param->value.data[ctx->param->value.len++] = ch;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1406
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1407 break;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1408
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1409 case ssi_postparam_state:
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1410
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1411 if (ctx->param->value.len + 1 < ctx->value_len / 2) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1412 value = ngx_pnalloc(r->pool, ctx->param->value.len + 1);
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1413 if (value == NULL) {
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1414 return NGX_ERROR;
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1415 }
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1416
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1417 ngx_memcpy(value, ctx->param->value.data,
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1418 ctx->param->value.len);
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1419
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1420 ctx->value_buf = ctx->param->value.data;
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1421 ctx->param->value.data = value;
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1422
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1423 } else {
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1424 ctx->value_buf = NULL;
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1425 }
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
1426
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1427 switch (ch) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1428 case ' ':
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1429 case CR:
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1430 case LF:
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1431 case '\t':
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1432 state = ssi_preparam_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1433 break;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1434
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1435 case '-':
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1436 state = ssi_comment_end0_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1437 break;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1438
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1439 default:
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1440 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1441 "unexpected \"%c\" symbol after \"%V\" value "
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1442 "of \"%V\" parameter in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1443 ch, &ctx->param->value, &ctx->param->key,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1444 &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1445 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1446 break;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1447 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1448
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1449 break;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1450
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1451 case ssi_comment_end0_state:
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1452 switch (ch) {
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1453 case '-':
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1454 state = ssi_comment_end1_state;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1455 break;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1456
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1457 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1458 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1459 "unexpected \"%c\" symbol in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1460 ch, &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1461 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1462 break;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1463 }
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1464
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1465 break;
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1466
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1467 case ssi_comment_end1_state:
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1468 switch (ch) {
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1469 case '>':
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1470 ctx->state = ssi_start_state;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1471 ctx->pos = p + 1;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1472 ctx->looked = looked;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1473 ctx->copy_end = copy_end;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1474
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1475 if (ctx->copy_start == NULL && copy_end) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1476 ctx->copy_start = ctx->buf->pos;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1477 }
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1478
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1479 return NGX_OK;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1480
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1481 default:
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1482 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1483 "unexpected \"%c\" symbol in \"%V\" SSI command",
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1484 ch, &ctx->command);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1485 state = ssi_error_state;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1486 break;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1487 }
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1488
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1489 break;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1490
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1491 case ssi_error_state:
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1492 switch (ch) {
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1493 case '-':
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1494 state = ssi_error_end0_state;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1495 break;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1496
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1497 default:
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1498 break;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1499 }
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1500
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1501 break;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1502
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1503 case ssi_error_end0_state:
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1504 switch (ch) {
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1505 case '-':
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1506 state = ssi_error_end1_state;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1507 break;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1508
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1509 default:
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1510 state = ssi_error_state;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1511 break;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1512 }
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1513
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1514 break;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1515
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1516 case ssi_error_end1_state:
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1517 switch (ch) {
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1518 case '>':
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1519 ctx->state = ssi_start_state;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1520 ctx->pos = p + 1;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1521 ctx->looked = looked;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1522 ctx->copy_end = copy_end;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1523
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1524 if (ctx->copy_start == NULL && copy_end) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1525 ctx->copy_start = ctx->buf->pos;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1526 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1527
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1528 return NGX_HTTP_SSI_ERROR;
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1529
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
1530 default:
241
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
1531 state = ssi_error_state;
3bfa496bc22e nginx-0.0.1-2004-01-27-10:08:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 240
diff changeset
1532 break;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1533 }
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1534
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1535 break;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1536 }
16
6ce4755737b4 nginx-0.0.1-2002-09-26-20:50:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 15
diff changeset
1537 }
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1538
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1539 ctx->state = state;
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 127
diff changeset
1540 ctx->pos = p;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1541 ctx->looked = looked;
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 125
diff changeset
1542
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1543 ctx->copy_end = (state == ssi_start_state) ? p : copy_end;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1544
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1545 if (ctx->copy_start == NULL && ctx->copy_end) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1546 ctx->copy_start = ctx->buf->pos;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1547 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1548
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
1549 return NGX_AGAIN;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1550 }
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1551
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
1552
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1553 static ngx_str_t *
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1554 ngx_http_ssi_get_variable(ngx_http_request_t *r, ngx_str_t *name,
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1555 ngx_uint_t key)
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1556 {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1557 ngx_uint_t i;
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1558 ngx_list_part_t *part;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1559 ngx_http_ssi_var_t *var;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1560 ngx_http_ssi_ctx_t *ctx;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1561
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1562 ctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1563
4381
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1564 #if (NGX_PCRE)
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1565 {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1566 ngx_str_t *value;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1567
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1568 if (key >= '0' && key <= '9') {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1569 i = key - '0';
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1570
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1571 if (i < ctx->ncaptures) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1572 value = ngx_palloc(r->pool, sizeof(ngx_str_t));
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1573 if (value == NULL) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1574 return NULL;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1575 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1576
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1577 i *= 2;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1578
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1579 value->data = ctx->captures_data + ctx->captures[i];
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1580 value->len = ctx->captures[i + 1] - ctx->captures[i];
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1581
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1582 return value;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1583 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1584 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1585 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1586 #endif
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1587
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
1588 if (ctx->variables == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
1589 return NULL;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
1590 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
1591
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1592 part = &ctx->variables->part;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1593 var = part->elts;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1594
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1595 for (i = 0; /* void */ ; i++) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1596
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1597 if (i >= part->nelts) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1598 if (part->next == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1599 break;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1600 }
787
b310630d129e style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 784
diff changeset
1601
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1602 part = part->next;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1603 var = part->elts;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1604 i = 0;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1605 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1606
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1607 if (name->len != var[i].name.len) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1608 continue;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1609 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1610
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1611 if (key != var[i].key) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1612 continue;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1613 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1614
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1615 if (ngx_strncmp(name->data, var[i].name.data, name->len) == 0) {
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1616 return &var[i].value;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1617 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1618 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1619
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1620 return NULL;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1621 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1622
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1623
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1624 static ngx_int_t
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1625 ngx_http_ssi_evaluate_string(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1626 ngx_str_t *text, ngx_uint_t flags)
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1627 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1628 u_char ch, *p, **value, *data, *part_data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1629 size_t *size, len, prefix, part_len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1630 ngx_str_t var, *val;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1631 ngx_int_t key;
2136
7a7c9e9024dd ngx_hash_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2079
diff changeset
1632 ngx_uint_t i, n, bracket, quoted;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1633 ngx_array_t lengths, values;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1634 ngx_http_variable_value_t *vv;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1635
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1636 n = ngx_http_script_variables_count(text);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1637
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1638 if (n == 0) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1639
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1640 data = text->data;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1641 p = data;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1642
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1643 if ((flags & NGX_HTTP_SSI_ADD_PREFIX) && text->data[0] != '/') {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1644
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1645 for (prefix = r->uri.len; prefix; prefix--) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1646 if (r->uri.data[prefix - 1] == '/') {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1647 break;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1648 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1649 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1650
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1651 if (prefix) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1652 len = prefix + text->len;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1653
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1654 data = ngx_pnalloc(r->pool, len);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1655 if (data == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1656 return NGX_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1657 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1658
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1659 p = ngx_copy(data, r->uri.data, prefix);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1660 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1661 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1662
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1663 quoted = 0;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1664
2024
7018254cc006 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1893
diff changeset
1665 for (i = 0; i < text->len; i++) {
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1666 ch = text->data[i];
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1667
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1668 if (!quoted) {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1669
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1670 if (ch == '\\') {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1671 quoted = 1;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1672 continue;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1673 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1674
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1675 } else {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1676 quoted = 0;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1677
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1678 if (ch != '\\' && ch != '\'' && ch != '"' && ch != '$') {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1679 *p++ = '\\';
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1680 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1681 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1682
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1683 *p++ = ch;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1684 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1685
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1686 text->len = p - data;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1687 text->data = data;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
1688
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1689 return NGX_OK;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1690 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1691
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1692 if (ngx_array_init(&lengths, r->pool, 8, sizeof(size_t *)) != NGX_OK) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1693 return NGX_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1694 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1695
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1696 if (ngx_array_init(&values, r->pool, 8, sizeof(u_char *)) != NGX_OK) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1697 return NGX_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1698 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1699
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1700 len = 0;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1701 i = 0;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1702
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1703 while (i < text->len) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1704
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1705 if (text->data[i] == '$') {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1706
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1707 var.len = 0;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1708
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1709 if (++i == text->len) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1710 goto invalid_variable;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1711 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1712
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1713 if (text->data[i] == '{') {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1714 bracket = 1;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1715
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1716 if (++i == text->len) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1717 goto invalid_variable;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1718 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1719
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1720 var.data = &text->data[i];
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1721
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1722 } else {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1723 bracket = 0;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1724 var.data = &text->data[i];
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1725 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1726
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1727 for ( /* void */ ; i < text->len; i++, var.len++) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1728 ch = text->data[i];
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1729
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1730 if (ch == '}' && bracket) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1731 i++;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1732 bracket = 0;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1733 break;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1734 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1735
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1736 if ((ch >= 'A' && ch <= 'Z')
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1737 || (ch >= 'a' && ch <= 'z')
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1738 || (ch >= '0' && ch <= '9')
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1739 || ch == '_')
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1740 {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1741 continue;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1742 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1743
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1744 break;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1745 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1746
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1747 if (bracket) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1748 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1749 "the closing bracket in \"%V\" "
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1750 "variable is missing", &var);
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1751 return NGX_HTTP_SSI_ERROR;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1752 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1753
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1754 if (var.len == 0) {
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1755 goto invalid_variable;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1756 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1757
2136
7a7c9e9024dd ngx_hash_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2079
diff changeset
1758 key = ngx_hash_strlow(var.data, var.data, var.len);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1759
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
1760 val = ngx_http_ssi_get_variable(r, &var, key);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1761
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1762 if (val == NULL) {
3500
0eb46e3c5c02 change processing variables accessed by SSI and perl module:
Igor Sysoev <igor@sysoev.ru>
parents: 3495
diff changeset
1763 vv = ngx_http_get_variable(r, &var, key);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1764 if (vv == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1765 return NGX_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1766 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1767
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1768 if (vv->not_found) {
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1769 continue;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1770 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1771
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1772 part_data = vv->data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1773 part_len = vv->len;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1774
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1775 } else {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1776 part_data = val->data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1777 part_len = val->len;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1778 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1779
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1780 } else {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1781 part_data = &text->data[i];
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1782 quoted = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1783
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1784 for (p = part_data; i < text->len; i++) {
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1785 ch = text->data[i];
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1786
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1787 if (!quoted) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1788
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1789 if (ch == '\\') {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1790 quoted = 1;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1791 continue;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1792 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1793
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1794 if (ch == '$') {
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1795 break;
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1796 }
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1797
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1798 } else {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1799 quoted = 0;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1800
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1801 if (ch != '\\' && ch != '\'' && ch != '"' && ch != '$') {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1802 *p++ = '\\';
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
1803 }
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1804 }
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1805
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1806 *p++ = ch;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1807 }
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1808
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1809 part_len = p - part_data;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1810 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1811
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1812 len += part_len;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1813
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1814 size = ngx_array_push(&lengths);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1815 if (size == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1816 return NGX_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1817 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1818
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1819 *size = part_len;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1820
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1821 value = ngx_array_push(&values);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1822 if (value == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1823 return NGX_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1824 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1825
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1826 *value = part_data;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1827 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1828
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1829 prefix = 0;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1830
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1831 size = lengths.elts;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1832 value = values.elts;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1833
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1834 if (flags & NGX_HTTP_SSI_ADD_PREFIX) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1835 for (i = 0; i < values.nelts; i++) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1836 if (size[i] != 0) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1837 if (*value[i] != '/') {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1838 for (prefix = r->uri.len; prefix; prefix--) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1839 if (r->uri.data[prefix - 1] == '/') {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1840 len += prefix;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1841 break;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1842 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1843 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1844 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1845
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1846 break;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1847 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1848 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1849 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1850
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
1851 p = ngx_pnalloc(r->pool, len + ((flags & NGX_HTTP_SSI_ADD_ZERO) ? 1 : 0));
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1852 if (p == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1853 return NGX_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1854 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1855
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1856 text->len = len;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1857 text->data = p;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1858
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1859 p = ngx_copy(p, r->uri.data, prefix);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1860
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1861 for (i = 0; i < values.nelts; i++) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1862 p = ngx_copy(p, value[i], size[i]);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1863 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1864
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1865 return NGX_OK;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1866
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1867 invalid_variable:
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1868
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1869 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1870 "invalid variable name in \"%V\"", text);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1871
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1872 return NGX_HTTP_SSI_ERROR;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1873 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1874
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1875
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1876 static ngx_int_t
4381
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1877 ngx_http_ssi_regex_match(ngx_http_request_t *r, ngx_str_t *pattern,
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1878 ngx_str_t *str)
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1879 {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1880 #if (NGX_PCRE)
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1881 int rc, *captures;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1882 u_char *p, errstr[NGX_MAX_CONF_ERRSTR];
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1883 size_t size;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1884 ngx_int_t key;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1885 ngx_str_t *vv, name, value;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1886 ngx_uint_t i, n;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1887 ngx_http_ssi_ctx_t *ctx;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1888 ngx_http_ssi_var_t *var;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1889 ngx_regex_compile_t rgc;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1890
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1891 ngx_memzero(&rgc, sizeof(ngx_regex_compile_t));
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1892
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1893 rgc.pattern = *pattern;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1894 rgc.pool = r->pool;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1895 rgc.err.len = NGX_MAX_CONF_ERRSTR;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1896 rgc.err.data = errstr;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1897
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1898 if (ngx_regex_compile(&rgc) != NGX_OK) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1899 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "%V", &rgc.err);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1900 return NGX_HTTP_SSI_ERROR;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1901 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1902
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1903 n = (rgc.captures + 1) * 3;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1904
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1905 captures = ngx_palloc(r->pool, n * sizeof(int));
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1906 if (captures == NULL) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1907 return NGX_ERROR;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1908 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1909
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1910 rc = ngx_regex_exec(rgc.regex, str, captures, n);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1911
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1912 if (rc < NGX_REGEX_NO_MATCHED) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1913 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5733
diff changeset
1914 ngx_regex_exec_n " failed: %d on \"%V\" using \"%V\"",
4381
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1915 rc, str, pattern);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1916 return NGX_HTTP_SSI_ERROR;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1917 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1918
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1919 if (rc == NGX_REGEX_NO_MATCHED) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1920 return NGX_DECLINED;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1921 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1922
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1923 ctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1924
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1925 ctx->ncaptures = rc;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1926 ctx->captures = captures;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1927 ctx->captures_data = str->data;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1928
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1929 if (rgc.named_captures > 0) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1930
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1931 if (ctx->variables == NULL) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1932 ctx->variables = ngx_list_create(r->pool, 4,
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1933 sizeof(ngx_http_ssi_var_t));
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1934 if (ctx->variables == NULL) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1935 return NGX_ERROR;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1936 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1937 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1938
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1939 size = rgc.name_size;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1940 p = rgc.names;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1941
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1942 for (i = 0; i < (ngx_uint_t) rgc.named_captures; i++, p += size) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1943
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1944 name.data = &p[2];
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1945 name.len = ngx_strlen(name.data);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1946
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1947 n = 2 * ((p[0] << 8) + p[1]);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1948
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1949 value.data = &str->data[captures[n]];
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1950 value.len = captures[n + 1] - captures[n];
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1951
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1952 key = ngx_hash_strlow(name.data, name.data, name.len);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1953
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1954 vv = ngx_http_ssi_get_variable(r, &name, key);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1955
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1956 if (vv) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1957 *vv = value;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1958 continue;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1959 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1960
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1961 var = ngx_list_push(ctx->variables);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1962 if (var == NULL) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1963 return NGX_ERROR;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1964 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1965
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1966 var->name = name;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1967 var->key = key;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1968 var->value = value;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1969 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1970 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1971
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1972 return NGX_OK;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1973
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1974 #else
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1975
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1976 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1977 "the using of the regex \"%V\" in SSI requires PCRE library",
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1978 pattern);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1979 return NGX_HTTP_SSI_ERROR;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1980
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1981 #endif
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1982 }
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1983
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1984
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
1985 static ngx_int_t
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1986 ngx_http_ssi_include(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1987 ngx_str_t **params)
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1988 {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1989 ngx_int_t rc, key;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1990 ngx_str_t *uri, *file, *wait, *set, *stub, args;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1991 ngx_buf_t *b;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1992 ngx_uint_t flags, i;
784
5a164305b960 fix building by Debian gcc-4.1.2 amd64
Igor Sysoev <igor@sysoev.ru>
parents: 777
diff changeset
1993 ngx_chain_t *cl, *tl, **ll, *out;
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1994 ngx_http_request_t *sr;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1995 ngx_http_ssi_var_t *var;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1996 ngx_http_ssi_ctx_t *mctx;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1997 ngx_http_ssi_block_t *bl;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
1998 ngx_http_post_subrequest_t *psr;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1999
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2000 uri = params[NGX_HTTP_SSI_INCLUDE_VIRTUAL];
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2001 file = params[NGX_HTTP_SSI_INCLUDE_FILE];
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2002 wait = params[NGX_HTTP_SSI_INCLUDE_WAIT];
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2003 set = params[NGX_HTTP_SSI_INCLUDE_SET];
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2004 stub = params[NGX_HTTP_SSI_INCLUDE_STUB];
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2005
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2006 if (uri && file) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2007 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
6504
293413010217 Fixed spelling.
Josh Soref <timeless@gmail.com>
parents: 6480
diff changeset
2008 "inclusion may be either virtual=\"%V\" or file=\"%V\"",
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2009 uri, file);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2010 return NGX_HTTP_SSI_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2011 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2012
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2013 if (uri == NULL && file == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2014 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2015 "no parameter in \"include\" SSI command");
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2016 return NGX_HTTP_SSI_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2017 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2018
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2019 if (set && stub) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2020 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4567
diff changeset
2021 "\"set\" and \"stub\" cannot be used together "
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2022 "in \"include\" SSI command");
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2023 return NGX_HTTP_SSI_ERROR;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2024 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2025
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2026 if (wait) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2027 if (uri == NULL) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2028 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4567
diff changeset
2029 "\"wait\" cannot be used with file=\"%V\"", file);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2030 return NGX_HTTP_SSI_ERROR;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2031 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2032
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1025
diff changeset
2033 if (wait->len == 2
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1025
diff changeset
2034 && ngx_strncasecmp(wait->data, (u_char *) "no", 2) == 0)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1025
diff changeset
2035 {
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2036 wait = NULL;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2037
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1025
diff changeset
2038 } else if (wait->len != 3
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1025
diff changeset
2039 || ngx_strncasecmp(wait->data, (u_char *) "yes", 3) != 0)
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2040 {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2041 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2042 "invalid value \"%V\" in the \"wait\" parameter",
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2043 wait);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2044 return NGX_HTTP_SSI_ERROR;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2045 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2046 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2047
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2048 if (uri == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2049 uri = file;
2426
e5ef47ecab5d fix r2378, file inclusion should be waited
Igor Sysoev <igor@sysoev.ru>
parents: 2414
diff changeset
2050 wait = (ngx_str_t *) -1;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2051 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2052
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2053 rc = ngx_http_ssi_evaluate_string(r, ctx, uri, NGX_HTTP_SSI_ADD_PREFIX);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2054
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2055 if (rc != NGX_OK) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2056 return rc;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2057 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2058
1593
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1566
diff changeset
2059 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1566
diff changeset
2060 "ssi include: \"%V\"", uri);
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1566
diff changeset
2061
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3500
diff changeset
2062 ngx_str_null(&args);
3161
d430c6ab1c99 check unsafe Destination
Igor Sysoev <igor@sysoev.ru>
parents: 3005
diff changeset
2063 flags = NGX_HTTP_LOG_UNSAFE;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2064
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2065 if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2066 return NGX_HTTP_SSI_ERROR;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2067 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2068
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2069 psr = NULL;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2070
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2071 mctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2072
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2073 if (stub) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2074 if (mctx->blocks) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2075 bl = mctx->blocks->elts;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2076 for (i = 0; i < mctx->blocks->nelts; i++) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2077 if (stub->len == bl[i].name.len
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2078 && ngx_strncmp(stub->data, bl[i].name.data, stub->len) == 0)
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2079 {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2080 goto found;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2081 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2082 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2083 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2084
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2085 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2086 "\"stub\"=\"%V\" for \"include\" not found", stub);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2087 return NGX_HTTP_SSI_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2088
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2089 found:
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2090
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2091 psr = ngx_palloc(r->pool, sizeof(ngx_http_post_subrequest_t));
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2092 if (psr == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2093 return NGX_ERROR;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2094 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2095
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2096 psr->handler = ngx_http_ssi_stub_output;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2097
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2098 if (bl[i].count++) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2099
1893
685048830623 fix segfault if empty stub block is used second time
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
2100 out = NULL;
784
5a164305b960 fix building by Debian gcc-4.1.2 amd64
Igor Sysoev <igor@sysoev.ru>
parents: 777
diff changeset
2101 ll = &out;
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2102
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2103 for (tl = bl[i].bufs; tl; tl = tl->next) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2104
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2105 if (ctx->free) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2106 cl = ctx->free;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2107 ctx->free = ctx->free->next;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2108 b = cl->buf;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2109
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2110 } else {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2111 b = ngx_alloc_buf(r->pool);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2112 if (b == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2113 return NGX_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2114 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2115
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2116 cl = ngx_alloc_chain_link(r->pool);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2117 if (cl == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2118 return NGX_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2119 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2120
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2121 cl->buf = b;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2122 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2123
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2124 ngx_memcpy(b, tl->buf, sizeof(ngx_buf_t));
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2125
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2126 b->pos = b->start;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2127
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2128 *ll = cl;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2129 cl->next = NULL;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2130 ll = &cl->next;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2131 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2132
784
5a164305b960 fix building by Debian gcc-4.1.2 amd64
Igor Sysoev <igor@sysoev.ru>
parents: 777
diff changeset
2133 psr->data = out;
5a164305b960 fix building by Debian gcc-4.1.2 amd64
Igor Sysoev <igor@sysoev.ru>
parents: 777
diff changeset
2134
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2135 } else {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2136 psr->data = bl[i].bufs;
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2137 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2138 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2139
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2140 if (wait) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2141 flags |= NGX_HTTP_SUBREQUEST_WAITED;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2142 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2143
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2144 if (set) {
2136
7a7c9e9024dd ngx_hash_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2079
diff changeset
2145 key = ngx_hash_strlow(set->data, set->data, set->len);
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2146
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2147 psr = ngx_palloc(r->pool, sizeof(ngx_http_post_subrequest_t));
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2148 if (psr == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2149 return NGX_ERROR;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2150 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2151
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2152 psr->handler = ngx_http_ssi_set_variable;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2153 psr->data = ngx_http_ssi_get_variable(r, set, key);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2154
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2155 if (psr->data == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2156
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2157 if (mctx->variables == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2158 mctx->variables = ngx_list_create(r->pool, 4,
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2159 sizeof(ngx_http_ssi_var_t));
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2160 if (mctx->variables == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2161 return NGX_ERROR;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2162 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2163 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2164
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2165 var = ngx_list_push(mctx->variables);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2166 if (var == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2167 return NGX_ERROR;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2168 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2169
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2170 var->name = *set;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2171 var->key = key;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2172 var->value = ngx_http_ssi_null_string;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2173 psr->data = &var->value;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2174 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2175
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2176 flags |= NGX_HTTP_SUBREQUEST_IN_MEMORY|NGX_HTTP_SUBREQUEST_WAITED;
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2177 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2178
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2179 if (ngx_http_subrequest(r, uri, &args, &sr, psr, flags) != NGX_OK) {
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2180 return NGX_HTTP_SSI_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2181 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2182
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2183 if (wait == NULL && set == NULL) {
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2184 return NGX_OK;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2185 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2186
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2187 if (ctx->wait == NULL) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2188 ctx->wait = sr;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2189
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2190 return NGX_AGAIN;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2191
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2192 } else {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2193 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4567
diff changeset
2194 "can only wait for one subrequest at a time");
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2195 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 643
diff changeset
2196
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2166
diff changeset
2197 return NGX_OK;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2198 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2199
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2200
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2201 static ngx_int_t
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2202 ngx_http_ssi_stub_output(ngx_http_request_t *r, void *data, ngx_int_t rc)
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2203 {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2204 ngx_chain_t *out;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2205
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2206 if (rc == NGX_ERROR || r->connection->error || r->request_output) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2207 return rc;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2208 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2209
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2210 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2211 "ssi stub output: \"%V?%V\"", &r->uri, &r->args);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2212
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2213 out = data;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2214
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2215 if (!r->header_sent) {
3453
7b68809fe8b1 use content type of the parent request in SSI stub block output
Igor Sysoev <igor@sysoev.ru>
parents: 3372
diff changeset
2216 r->headers_out.content_type_len =
7b68809fe8b1 use content type of the parent request in SSI stub block output
Igor Sysoev <igor@sysoev.ru>
parents: 3372
diff changeset
2217 r->parent->headers_out.content_type_len;
7b68809fe8b1 use content type of the parent request in SSI stub block output
Igor Sysoev <igor@sysoev.ru>
parents: 3372
diff changeset
2218 r->headers_out.content_type = r->parent->headers_out.content_type;
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2219
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2220 if (ngx_http_send_header(r) == NGX_ERROR) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2221 return NGX_ERROR;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2222 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2223 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2224
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2225 return ngx_http_output_filter(r, out);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2226 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2227
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2228
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2229 static ngx_int_t
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2230 ngx_http_ssi_set_variable(ngx_http_request_t *r, void *data, ngx_int_t rc)
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2231 {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2232 ngx_str_t *value = data;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2233
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2234 if (r->upstream) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2235 value->len = r->upstream->buffer.last - r->upstream->buffer.pos;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2236 value->data = r->upstream->buffer.pos;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2237 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2238
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2239 return rc;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2240 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2241
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2242
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2243 static ngx_int_t
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2244 ngx_http_ssi_echo(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2245 ngx_str_t **params)
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
2246 {
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2247 u_char *p;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2248 uintptr_t len;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
2249 ngx_int_t key;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2250 ngx_buf_t *b;
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2251 ngx_str_t *var, *value, *enc, text;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2252 ngx_chain_t *cl;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2253 ngx_http_variable_value_t *vv;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2254
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2255 var = params[NGX_HTTP_SSI_ECHO_VAR];
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2256
643
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2257 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2258 "ssi echo \"%V\"", var);
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2259
2136
7a7c9e9024dd ngx_hash_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2079
diff changeset
2260 key = ngx_hash_strlow(var->data, var->data, var->len);
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
2261
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
2262 value = ngx_http_ssi_get_variable(r, var, key);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2263
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2264 if (value == NULL) {
3500
0eb46e3c5c02 change processing variables accessed by SSI and perl module:
Igor Sysoev <igor@sysoev.ru>
parents: 3495
diff changeset
2265 vv = ngx_http_get_variable(r, var, key);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2266
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2267 if (vv == NULL) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2268 return NGX_HTTP_SSI_ERROR;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2269 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2270
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2271 if (!vv->not_found) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2272 text.data = vv->data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2273 text.len = vv->len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2274 value = &text;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2275 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2276 }
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2277
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2278 if (value == NULL) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2279 value = params[NGX_HTTP_SSI_ECHO_DEFAULT];
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2280
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2281 if (value == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2282 value = &ngx_http_ssi_none;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2283
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2284 } else if (value->len == 0) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2285 return NGX_OK;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2286 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2287
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2288 } else {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2289 if (value->len == 0) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2290 return NGX_OK;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2291 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2292 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2293
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2294 enc = params[NGX_HTTP_SSI_ECHO_ENCODING];
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2295
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2296 if (enc) {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2297 if (enc->len == 4 && ngx_strncmp(enc->data, "none", 4) == 0) {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2298
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2299 ctx->encoding = NGX_HTTP_SSI_NO_ENCODING;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2300
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2301 } else if (enc->len == 3 && ngx_strncmp(enc->data, "url", 3) == 0) {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2302
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2303 ctx->encoding = NGX_HTTP_SSI_URL_ENCODING;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2304
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2305 } else if (enc->len == 6 && ngx_strncmp(enc->data, "entity", 6) == 0) {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2306
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2307 ctx->encoding = NGX_HTTP_SSI_ENTITY_ENCODING;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2308
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2309 } else {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2310 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2311 "unknown encoding \"%V\" in the \"echo\" command",
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2312 enc);
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2313 }
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2314 }
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2315
3495
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2316 p = value->data;
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2317
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2318 switch (ctx->encoding) {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2319
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2320 case NGX_HTTP_SSI_URL_ENCODING:
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2321 len = 2 * ngx_escape_uri(NULL, value->data, value->len,
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2322 NGX_ESCAPE_HTML);
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2323
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2324 if (len) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
2325 p = ngx_pnalloc(r->pool, value->len + len);
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2326 if (p == NULL) {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2327 return NGX_HTTP_SSI_ERROR;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2328 }
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2329
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2330 (void) ngx_escape_uri(p, value->data, value->len, NGX_ESCAPE_HTML);
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2331 }
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2332
3495
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2333 len += value->len;
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2334 break;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2335
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2336 case NGX_HTTP_SSI_ENTITY_ENCODING:
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2337 len = ngx_escape_html(NULL, value->data, value->len);
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2338
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2339 if (len) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
2340 p = ngx_pnalloc(r->pool, value->len + len);
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2341 if (p == NULL) {
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2342 return NGX_HTTP_SSI_ERROR;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2343 }
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2344
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2345 (void) ngx_escape_html(p, value->data, value->len);
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2346 }
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2347
3495
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2348 len += value->len;
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2349 break;
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2350
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2351 default: /* NGX_HTTP_SSI_NO_ENCODING */
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2352 len = value->len;
1545
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2353 break;
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2354 }
2d8fab47dd89 SSI echo encoding
Igor Sysoev <igor@sysoev.ru>
parents: 1320
diff changeset
2355
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2356 b = ngx_calloc_buf(r->pool);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2357 if (b == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2358 return NGX_HTTP_SSI_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2359 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2360
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2361 cl = ngx_alloc_chain_link(r->pool);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 497
diff changeset
2362 if (cl == NULL) {
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2363 return NGX_HTTP_SSI_ERROR;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2364 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2365
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2366 b->memory = 1;
3495
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2367 b->pos = p;
6a5dc3803825 do not store an encoded variable value as a new cached variable value
Igor Sysoev <igor@sysoev.ru>
parents: 3454
diff changeset
2368 b->last = p + len;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2369
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2370 cl->buf = b;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2371 cl->next = NULL;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2372 *ctx->last_out = cl;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2373 ctx->last_out = &cl->next;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2374
242
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
2375 return NGX_OK;
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
2376 }
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
2377
5d4f49dc8de5 nginx-0.0.1-2004-01-28-18:22:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 241
diff changeset
2378
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2379 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2380 ngx_http_ssi_config(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2381 ngx_str_t **params)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2382 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2383 ngx_str_t *value;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2384
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2385 value = params[NGX_HTTP_SSI_CONFIG_TIMEFMT];
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2386
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2387 if (value) {
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2388 ctx->timefmt.len = value->len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
2389 ctx->timefmt.data = ngx_pnalloc(r->pool, value->len + 1);
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2390 if (ctx->timefmt.data == NULL) {
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2391 return NGX_HTTP_SSI_ERROR;
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2392 }
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2393
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2394 ngx_cpystrn(ctx->timefmt.data, value->data, value->len + 1);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2395 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2396
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
2397 value = params[NGX_HTTP_SSI_CONFIG_ERRMSG];
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
2398
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
2399 if (value) {
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
2400 ctx->errmsg = *value;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
2401 }
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
2402
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2403 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2404 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2405
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2406
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2407 static ngx_int_t
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2408 ngx_http_ssi_set(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2409 ngx_str_t **params)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2410 {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2411 ngx_int_t key, rc;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2412 ngx_str_t *name, *value, *vv;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2413 ngx_http_ssi_var_t *var;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2414 ngx_http_ssi_ctx_t *mctx;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2415
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2416 mctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2417
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2418 if (mctx->variables == NULL) {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2419 mctx->variables = ngx_list_create(r->pool, 4,
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2420 sizeof(ngx_http_ssi_var_t));
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2421 if (mctx->variables == NULL) {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2422 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2423 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2424 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2425
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2426 name = params[NGX_HTTP_SSI_SET_VAR];
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2427 value = params[NGX_HTTP_SSI_SET_VALUE];
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2428
643
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2429 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2430 "ssi set \"%V\" \"%V\"", name, value);
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2431
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2432 rc = ngx_http_ssi_evaluate_string(r, ctx, value, 0);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2433
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2434 if (rc != NGX_OK) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2435 return rc;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2436 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2437
2136
7a7c9e9024dd ngx_hash_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2079
diff changeset
2438 key = ngx_hash_strlow(name->data, name->data, name->len);
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
2439
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
2440 vv = ngx_http_ssi_get_variable(r, name, key);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2441
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2442 if (vv) {
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2443 *vv = *value;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2444 return NGX_OK;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2445 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2446
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2447 var = ngx_list_push(mctx->variables);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2448 if (var == NULL) {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2449 return NGX_ERROR;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2450 }
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2451
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2452 var->name = *name;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 609
diff changeset
2453 var->key = key;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2454 var->value = *value;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2455
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2456 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2457 "set: \"%V\"=\"%V\"", name, value);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2458
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2459 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2460 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2461
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2462
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2463 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2464 ngx_http_ssi_if(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2465 ngx_str_t **params)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2466 {
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2467 u_char *p, *last;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2468 ngx_str_t *expr, left, right;
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2469 ngx_int_t rc;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2470 ngx_uint_t negative, noregex, flags;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2471
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2472 if (ctx->command.len == 2) {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2473 if (ctx->conditional) {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2474 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2475 "the \"if\" command inside the \"if\" command");
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2476 return NGX_HTTP_SSI_ERROR;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2477 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2478 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2479
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2480 if (ctx->output_chosen) {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2481 ctx->output = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2482 return NGX_OK;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2483 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2484
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2485 expr = params[NGX_HTTP_SSI_IF_EXPR];
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2486
643
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2487 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2488 "ssi if expr=\"%V\"", expr);
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2489
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2490 left.data = expr->data;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2491 last = expr->data + expr->len;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2492
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2493 for (p = left.data; p < last; p++) {
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2494 if (*p >= 'A' && *p <= 'Z') {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2495 *p |= 0x20;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2496 continue;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2497 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2498
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2499 if ((*p >= 'a' && *p <= 'z')
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2500 || (*p >= '0' && *p <= '9')
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2501 || *p == '$' || *p == '{' || *p == '}' || *p == '_'
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2502 || *p == '"' || *p == '\'')
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2503 {
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2504 continue;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2505 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2506
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2507 break;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2508 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2509
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2510 left.len = p - left.data;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2511
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2512 while (p < last && *p == ' ') {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2513 p++;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2514 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2515
3500
0eb46e3c5c02 change processing variables accessed by SSI and perl module:
Igor Sysoev <igor@sysoev.ru>
parents: 3495
diff changeset
2516 flags = 0;
635
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
2517
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2518 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2519 "left: \"%V\"", &left);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2520
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2521 rc = ngx_http_ssi_evaluate_string(r, ctx, &left, flags);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2522
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2523 if (rc != NGX_OK) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2524 return rc;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2525 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2526
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2527 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6510
a3be359e6c7d Fixed typos.
Alessandro Ghedini <alessandro@cloudflare.com>
parents: 6504
diff changeset
2528 "evaluated left: \"%V\"", &left);
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2529
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2530 if (p == last) {
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2531 if (left.len) {
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2532 ctx->output = 1;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2533 ctx->output_chosen = 1;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2534
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2535 } else {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2536 ctx->output = 0;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2537 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2538
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2539 ctx->conditional = NGX_HTTP_SSI_COND_IF;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2540
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2541 return NGX_OK;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2542 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2543
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2544 if (p < last && *p == '=') {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2545 negative = 0;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2546 p++;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2547
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2548 } else if (p + 1 < last && *p == '!' && *(p + 1) == '=') {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2549 negative = 1;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2550 p += 2;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2552 } else {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2553 goto invalid_expression;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2554 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2555
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2556 while (p < last && *p == ' ') {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2557 p++;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2558 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2559
1190
99c56c0f514e fix segfault or parsing error in '<!--# if expr="$var = /" -->'
Igor Sysoev <igor@sysoev.ru>
parents: 1169
diff changeset
2560 if (p < last - 1 && *p == '/') {
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2561 if (*(last - 1) != '/') {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2562 goto invalid_expression;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2563 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2564
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2565 noregex = 0;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2566 flags = NGX_HTTP_SSI_ADD_ZERO;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2567 last--;
1025
f88651afad40 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 829
diff changeset
2568 p++;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2569
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2570 } else {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2571 noregex = 1;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2572 flags = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2573
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2574 if (p < last - 1 && p[0] == '\\' && p[1] == '/') {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
2575 p++;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2576 }
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2577 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2578
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2579 right.len = last - p;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2580 right.data = p;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2581
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2582 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2583 "right: \"%V\"", &right);
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2584
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2585 rc = ngx_http_ssi_evaluate_string(r, ctx, &right, flags);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2586
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2587 if (rc != NGX_OK) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 767
diff changeset
2588 return rc;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2589 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2590
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
2591 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6510
a3be359e6c7d Fixed typos.
Alessandro Ghedini <alessandro@cloudflare.com>
parents: 6504
diff changeset
2592 "evaluated right: \"%V\"", &right);
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2593
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2594 if (noregex) {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2595 if (left.len != right.len) {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2596 rc = -1;
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2597
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2598 } else {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2599 rc = ngx_strncmp(left.data, right.data, right.len);
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2600 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2601
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2602 } else {
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2603 right.data[right.len] = '\0';
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2604
4381
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2605 rc = ngx_http_ssi_regex_match(r, &right, &left);
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2606
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2607 if (rc == NGX_OK) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2608 rc = 0;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2609 } else if (rc == NGX_DECLINED) {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2610 rc = -1;
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2611 } else {
e9a0427f4139 SSI: added regex captures support in the expression of the "if" command.
Valentin Bartenev <vbart@nginx.com>
parents: 4374
diff changeset
2612 return rc;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2613 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2614 }
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2615
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2616 if ((rc == 0 && !negative) || (rc != 0 && negative)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2617 ctx->output = 1;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2618 ctx->output_chosen = 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2619
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2620 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2621 ctx->output = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2622 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2623
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2624 ctx->conditional = NGX_HTTP_SSI_COND_IF;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2625
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2626 return NGX_OK;
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2627
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2628 invalid_expression:
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2629
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2630 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2631 "invalid expression in \"%V\"", expr);
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2632
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
2633 return NGX_HTTP_SSI_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2634 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2635
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2636
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2637 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2638 ngx_http_ssi_else(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2639 ngx_str_t **params)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2640 {
643
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2641 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2642 "ssi else");
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2643
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2644 if (ctx->output_chosen) {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2645 ctx->output = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2646 } else {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2647 ctx->output = 1;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2648 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2649
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2650 ctx->conditional = NGX_HTTP_SSI_COND_ELSE;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2651
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2652 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2653 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2654
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2655
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2656 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2657 ngx_http_ssi_endif(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2658 ngx_str_t **params)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2659 {
643
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2660 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2661 "ssi endif");
947c6fd27699 nginx-0.3.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2662
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2663 ctx->output = 1;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2664 ctx->output_chosen = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2665 ctx->conditional = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2666
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2667 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2668 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2669
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2670
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2671 static ngx_int_t
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2672 ngx_http_ssi_block(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2673 ngx_str_t **params)
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2674 {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2675 ngx_http_ssi_ctx_t *mctx;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2676 ngx_http_ssi_block_t *bl;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2677
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2678 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2679 "ssi block");
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2680
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2681 mctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2682
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2683 if (mctx->blocks == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2684 mctx->blocks = ngx_array_create(r->pool, 4,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2685 sizeof(ngx_http_ssi_block_t));
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2686 if (mctx->blocks == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2687 return NGX_HTTP_SSI_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2688 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2689 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2690
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2691 bl = ngx_array_push(mctx->blocks);
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2692 if (bl == NULL) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2693 return NGX_HTTP_SSI_ERROR;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2694 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2695
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2696 bl->name = *params[NGX_HTTP_SSI_BLOCK_NAME];
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2697 bl->bufs = NULL;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2698 bl->count = 0;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2699
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2700 ctx->output = 0;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2701 ctx->block = 1;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2702
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2703 return NGX_OK;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2704 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2705
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2706
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2707 static ngx_int_t
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2708 ngx_http_ssi_endblock(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2709 ngx_str_t **params)
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2710 {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2711 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2712 "ssi endblock");
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2713
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2714 ctx->output = 1;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2715 ctx->block = 0;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2716
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2717 return NGX_OK;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2718 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2719
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2720
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
2721 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2722 ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
2041
3f75a582a11e style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
2723 ngx_http_variable_value_t *v, uintptr_t gmt)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2724 {
6653
7a6456398fc3 Simplified extraction of current time.
Ruslan Ermilov <ru@nginx.com>
parents: 6510
diff changeset
2725 time_t now;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2726 ngx_http_ssi_ctx_t *ctx;
5540
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
2727 ngx_str_t *timefmt;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2728 struct tm tm;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2729 char buf[NGX_HTTP_SSI_DATE_LEN];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2730
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2731 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1545
diff changeset
2732 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2733 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2734
6653
7a6456398fc3 Simplified extraction of current time.
Ruslan Ermilov <ru@nginx.com>
parents: 6510
diff changeset
2735 now = ngx_time();
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
2736
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2737 ctx = ngx_http_get_module_ctx(r, ngx_http_ssi_filter_module);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2738
5540
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
2739 timefmt = ctx ? &ctx->timefmt : &ngx_http_ssi_timefmt;
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
2740
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
2741 if (timefmt->len == sizeof("%s") - 1
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
2742 && timefmt->data[0] == '%' && timefmt->data[1] == 's')
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2743 {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
2744 v->data = ngx_pnalloc(r->pool, NGX_TIME_T_LEN);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2745 if (v->data == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2746 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2747 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2748
6653
7a6456398fc3 Simplified extraction of current time.
Ruslan Ermilov <ru@nginx.com>
parents: 6510
diff changeset
2749 v->len = ngx_sprintf(v->data, "%T", now) - v->data;
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
2750
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2751 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2752 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2753
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2754 if (gmt) {
6653
7a6456398fc3 Simplified extraction of current time.
Ruslan Ermilov <ru@nginx.com>
parents: 6510
diff changeset
2755 ngx_libc_gmtime(now, &tm);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2756 } else {
6653
7a6456398fc3 Simplified extraction of current time.
Ruslan Ermilov <ru@nginx.com>
parents: 6510
diff changeset
2757 ngx_libc_localtime(now, &tm);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2758 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2759
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2760 v->len = strftime(buf, NGX_HTTP_SSI_DATE_LEN,
5540
3a8e19528b30 SSI: fixed $date_local and $date_gmt without SSI (ticket #230).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5491
diff changeset
2761 (char *) timefmt->data, &tm);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2762 if (v->len == 0) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2763 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2764 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2765
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2041
diff changeset
2766 v->data = ngx_pnalloc(r->pool, v->len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2767 if (v->data == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2768 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2769 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2770
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2771 ngx_memcpy(v->data, buf, v->len);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2772
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2773 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2774 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2775
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2776
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2777 static ngx_int_t
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2778 ngx_http_ssi_preconfiguration(ngx_conf_t *cf)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2779 {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2780 ngx_int_t rc;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2781 ngx_http_variable_t *var, *v;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2782 ngx_http_ssi_command_t *cmd;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2783 ngx_http_ssi_main_conf_t *smcf;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2784
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2785 for (v = ngx_http_ssi_vars; v->name.len; v++) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2786 var = ngx_http_add_variable(cf, &v->name, v->flags);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2787 if (var == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2788 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2789 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2790
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
2791 var->get_handler = v->get_handler;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2792 var->data = v->data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2793 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2794
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2795 smcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_ssi_filter_module);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2796
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2797 for (cmd = ngx_http_ssi_commands; cmd->name.len; cmd++) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2798 rc = ngx_hash_add_key(&smcf->commands, &cmd->name, cmd,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2799 NGX_HASH_READONLY_KEY);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2800
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2801 if (rc == NGX_OK) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2802 continue;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2803 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2804
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2805 if (rc == NGX_BUSY) {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2806 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2807 "conflicting SSI command \"%V\"", &cmd->name);
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2808 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2809
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2810 return NGX_ERROR;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2811 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2812
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2813 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2814 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2815
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2816
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2817 static void *
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2818 ngx_http_ssi_create_main_conf(ngx_conf_t *cf)
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2819 {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2820 ngx_http_ssi_main_conf_t *smcf;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2821
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2822 smcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_ssi_main_conf_t));
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2823 if (smcf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2824 return NULL;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2825 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2826
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2827 smcf->commands.pool = cf->pool;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2828 smcf->commands.temp_pool = cf->temp_pool;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2829
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2830 if (ngx_hash_keys_array_init(&smcf->commands, NGX_HASH_SMALL) != NGX_OK) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2831 return NULL;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2832 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2833
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2834 return smcf;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2835 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2836
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2837
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2838 static char *
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2839 ngx_http_ssi_init_main_conf(ngx_conf_t *cf, void *conf)
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2840 {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2841 ngx_http_ssi_main_conf_t *smcf = conf;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2842
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2843 ngx_hash_init_t hash;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2844
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2845 hash.hash = &smcf->hash;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2846 hash.key = ngx_hash_key;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2847 hash.max_size = 1024;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2848 hash.bucket_size = ngx_cacheline_size;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2849 hash.name = "ssi_command_hash";
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2850 hash.pool = cf->pool;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2851 hash.temp_pool = NULL;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2852
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2853 if (ngx_hash_init(&hash, smcf->commands.keys.elts,
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2854 smcf->commands.keys.nelts)
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2855 != NGX_OK)
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2856 {
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2857 return NGX_CONF_ERROR;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2858 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2859
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2860 return NGX_CONF_OK;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2861 }
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2862
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2863
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2864 static void *
1169
ea5676ca98f4 style fix: rename functions
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2865 ngx_http_ssi_create_loc_conf(ngx_conf_t *cf)
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2866 {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2867 ngx_http_ssi_loc_conf_t *slcf;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2868
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2869 slcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_ssi_loc_conf_t));
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2870 if (slcf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2871 return NULL;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2872 }
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2873
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
2874 /*
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
2875 * set by ngx_pcalloc():
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
2876 *
2166
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
2877 * conf->types = { NULL };
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
2878 * conf->types_keys = NULL;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
2879 */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
2880
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2881 slcf->enable = NGX_CONF_UNSET;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2882 slcf->silent_errors = NGX_CONF_UNSET;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2883 slcf->ignore_recycled_buffers = NGX_CONF_UNSET;
5228
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
2884 slcf->last_modified = NGX_CONF_UNSET;
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2885
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2886 slcf->min_file_chunk = NGX_CONF_UNSET_SIZE;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2887 slcf->value_len = NGX_CONF_UNSET_SIZE;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2888
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2889 return slcf;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2890 }
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2891
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2892
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2893 static char *
1169
ea5676ca98f4 style fix: rename functions
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2894 ngx_http_ssi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2895 {
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2896 ngx_http_ssi_loc_conf_t *prev = parent;
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2897 ngx_http_ssi_loc_conf_t *conf = child;
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2898
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2899 ngx_conf_merge_value(conf->enable, prev->enable, 0);
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2900 ngx_conf_merge_value(conf->silent_errors, prev->silent_errors, 0);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2901 ngx_conf_merge_value(conf->ignore_recycled_buffers,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2902 prev->ignore_recycled_buffers, 0);
5228
cbd4bbe976d4 SSI: ssi_last_modified directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4821
diff changeset
2903 ngx_conf_merge_value(conf->last_modified, prev->last_modified, 0);
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2904
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2905 ngx_conf_merge_size_value(conf->min_file_chunk, prev->min_file_chunk, 1024);
4528
00ccad19c53d Fixed ssi and perl interaction.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
2906 ngx_conf_merge_size_value(conf->value_len, prev->value_len, 255);
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2907
3372
6b8e5c882e47 support "*" in gzip_types, ssi_types, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
2908 if (ngx_http_merge_types(cf, &conf->types_keys, &conf->types,
6b8e5c882e47 support "*" in gzip_types, ssi_types, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
2909 &prev->types_keys, &prev->types,
2166
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
2910 ngx_http_html_default_types)
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
2911 != NGX_OK)
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
2912 {
723df5089c05 use hash in gzip_types, ssi_types, and sub_filter_types
Igor Sysoev <igor@sysoev.ru>
parents: 2136
diff changeset
2913 return NGX_CONF_ERROR;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
2914 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 513
diff changeset
2915
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2916 return NGX_CONF_OK;
15
cbb38b60495c nginx-0.0.1-2002-09-18-20:32:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 14
diff changeset
2917 }
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2918
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2919
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 489
diff changeset
2920 static ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2921 ngx_http_ssi_filter_init(ngx_conf_t *cf)
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
2922 {
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2923 ngx_http_next_header_filter = ngx_http_top_header_filter;
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
2924 ngx_http_top_header_filter = ngx_http_ssi_header_filter;
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2925
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
2926 ngx_http_next_body_filter = ngx_http_top_body_filter;
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
2927 ngx_http_top_body_filter = ngx_http_ssi_body_filter;
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2928
125
885ffb8cc32a nginx-0.0.1-2003-08-06-09:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 16
diff changeset
2929 return NGX_OK;
14
f8a0d0f31a24 nginx-0.0.1-2002-09-17-21:49:32 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2930 }