annotate src/http/ngx_http_script.c @ 6075:7fcfe113827d stable-1.6

Fixed possible buffer overrun in "too long header line" logging. Additionally, ellipsis now always added to make it clear that the header logged is incomplete. Reported by Daniil Bondarev.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 08 Oct 2014 17:16:04 +0400
parents 4bfa982dbf0e
children 2cd019520210
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: 99
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: 99
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: 4206
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: 99
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: 99
diff changeset
6
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
13 static ngx_int_t ngx_http_script_init_arrays(ngx_http_script_compile_t *sc);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
14 static ngx_int_t ngx_http_script_done(ngx_http_script_compile_t *sc);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
15 static ngx_int_t ngx_http_script_add_copy_code(ngx_http_script_compile_t *sc,
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
16 ngx_str_t *value, ngx_uint_t last);
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
17 static ngx_int_t ngx_http_script_add_var_code(ngx_http_script_compile_t *sc,
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
18 ngx_str_t *name);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
19 static ngx_int_t ngx_http_script_add_args_code(ngx_http_script_compile_t *sc);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
20 #if (NGX_PCRE)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
21 static ngx_int_t ngx_http_script_add_capture_code(ngx_http_script_compile_t *sc,
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
22 ngx_uint_t n);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
23 #endif
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
24 static ngx_int_t
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
25 ngx_http_script_add_full_name_code(ngx_http_script_compile_t *sc);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
26 static size_t ngx_http_script_full_name_len_code(ngx_http_script_engine_t *e);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
27 static void ngx_http_script_full_name_code(ngx_http_script_engine_t *e);
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
28
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
29
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
30 #define ngx_http_script_exit (u_char *) &ngx_http_script_exit_code
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
31
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
32 static uintptr_t ngx_http_script_exit_code = (uintptr_t) NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
33
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
34
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
35 void
2609
ad99a49cd313 rename ngx_http_scrip_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2608
diff changeset
36 ngx_http_script_flush_complex_value(ngx_http_request_t *r,
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
37 ngx_http_complex_value_t *val)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
38 {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
39 ngx_uint_t *index;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
40
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
41 index = val->flushes;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
42
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
43 if (index) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
44 while (*index != (ngx_uint_t) -1) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
45
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
46 if (r->variables[*index].no_cacheable) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
47 r->variables[*index].valid = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
48 r->variables[*index].not_found = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
49 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
50
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
51 index++;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
52 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
53 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
54 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
55
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
56
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
57 ngx_int_t
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
58 ngx_http_complex_value(ngx_http_request_t *r, ngx_http_complex_value_t *val,
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
59 ngx_str_t *value)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
60 {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
61 size_t len;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
62 ngx_http_script_code_pt code;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
63 ngx_http_script_len_code_pt lcode;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
64 ngx_http_script_engine_t e;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
65
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
66 if (val->lengths == NULL) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
67 *value = val->value;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
68 return NGX_OK;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
69 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
70
2609
ad99a49cd313 rename ngx_http_scrip_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2608
diff changeset
71 ngx_http_script_flush_complex_value(r, val);
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
72
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
73 ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
74
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
75 e.ip = val->lengths;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
76 e.request = r;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
77 e.flushed = 1;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
78
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
79 len = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
80
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
81 while (*(uintptr_t *) e.ip) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
82 lcode = *(ngx_http_script_len_code_pt *) e.ip;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
83 len += lcode(&e);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
84 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
85
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
86 value->len = len;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
87 value->data = ngx_pnalloc(r->pool, len);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
88 if (value->data == NULL) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
89 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
90 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
91
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
92 e.ip = val->values;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
93 e.pos = value->data;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
94 e.buf = *value;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
95
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
96 while (*(uintptr_t *) e.ip) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
97 code = *(ngx_http_script_code_pt *) e.ip;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
98 code((ngx_http_script_engine_t *) &e);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
99 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
100
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
101 *value = e.buf;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
102
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
103 return NGX_OK;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
104 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
105
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
106
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
107 ngx_int_t
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
108 ngx_http_compile_complex_value(ngx_http_compile_complex_value_t *ccv)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
109 {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
110 ngx_str_t *v;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
111 ngx_uint_t i, n, nv, nc;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
112 ngx_array_t flushes, lengths, values, *pf, *pl, *pv;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
113 ngx_http_script_compile_t sc;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
114
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
115 v = ccv->value;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
116
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
117 nv = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
118 nc = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
119
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
120 for (i = 0; i < v->len; i++) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
121 if (v->data[i] == '$') {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
122 if (v->data[i + 1] >= '1' && v->data[i + 1] <= '9') {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
123 nc++;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
124
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
125 } else {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
126 nv++;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
127 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
128 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
129 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
130
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4617
diff changeset
131 if ((v->len == 0 || v->data[0] != '$')
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4617
diff changeset
132 && (ccv->conf_prefix || ccv->root_prefix))
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4617
diff changeset
133 {
5330
314c3d7cc3a5 Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5317
diff changeset
134 if (ngx_conf_full_name(ccv->cf->cycle, v, ccv->conf_prefix) != NGX_OK) {
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
135 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
136 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
137
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
138 ccv->conf_prefix = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
139 ccv->root_prefix = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
140 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
141
2608
2f4a3a4dfd34 fix plain text values using relative path in ngx_http_complex_value(),
Igor Sysoev <igor@sysoev.ru>
parents: 2587
diff changeset
142 ccv->complex_value->value = *v;
2f4a3a4dfd34 fix plain text values using relative path in ngx_http_complex_value(),
Igor Sysoev <igor@sysoev.ru>
parents: 2587
diff changeset
143 ccv->complex_value->flushes = NULL;
2f4a3a4dfd34 fix plain text values using relative path in ngx_http_complex_value(),
Igor Sysoev <igor@sysoev.ru>
parents: 2587
diff changeset
144 ccv->complex_value->lengths = NULL;
2f4a3a4dfd34 fix plain text values using relative path in ngx_http_complex_value(),
Igor Sysoev <igor@sysoev.ru>
parents: 2587
diff changeset
145 ccv->complex_value->values = NULL;
2f4a3a4dfd34 fix plain text values using relative path in ngx_http_complex_value(),
Igor Sysoev <igor@sysoev.ru>
parents: 2587
diff changeset
146
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
147 if (nv == 0 && nc == 0) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
148 return NGX_OK;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
149 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
150
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
151 n = nv + 1;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
152
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
153 if (ngx_array_init(&flushes, ccv->cf->pool, n, sizeof(ngx_uint_t))
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
154 != NGX_OK)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
155 {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
156 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
157 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
158
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
159 n = nv * (2 * sizeof(ngx_http_script_copy_code_t)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
160 + sizeof(ngx_http_script_var_code_t))
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
161 + sizeof(uintptr_t);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
162
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
163 if (ngx_array_init(&lengths, ccv->cf->pool, n, 1) != NGX_OK) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
164 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
165 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
166
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
167 n = (nv * (2 * sizeof(ngx_http_script_copy_code_t)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
168 + sizeof(ngx_http_script_var_code_t))
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
169 + sizeof(uintptr_t)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
170 + v->len
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
171 + sizeof(uintptr_t) - 1)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
172 & ~(sizeof(uintptr_t) - 1);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
173
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
174 if (ngx_array_init(&values, ccv->cf->pool, n, 1) != NGX_OK) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
175 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
176 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
177
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
178 pf = &flushes;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
179 pl = &lengths;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
180 pv = &values;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
181
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
182 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
183
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
184 sc.cf = ccv->cf;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
185 sc.source = v;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
186 sc.flushes = &pf;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
187 sc.lengths = &pl;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
188 sc.values = &pv;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
189 sc.complete_lengths = 1;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
190 sc.complete_values = 1;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
191 sc.zero = ccv->zero;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
192 sc.conf_prefix = ccv->conf_prefix;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
193 sc.root_prefix = ccv->root_prefix;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
194
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
195 if (ngx_http_script_compile(&sc) != NGX_OK) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
196 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
197 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
198
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
199 if (flushes.nelts) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
200 ccv->complex_value->flushes = flushes.elts;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
201 ccv->complex_value->flushes[flushes.nelts] = (ngx_uint_t) -1;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
202 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
203
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
204 ccv->complex_value->lengths = lengths.elts;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
205 ccv->complex_value->values = values.elts;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
206
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
207 return NGX_OK;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
208 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
209
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
210
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
211 char *
3761
0a84dc5f5613 fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3756
diff changeset
212 ngx_http_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
213 {
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
214 char *p = conf;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
215
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
216 ngx_str_t *value;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
217 ngx_http_complex_value_t **cv;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
218 ngx_http_compile_complex_value_t ccv;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
219
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
220 cv = (ngx_http_complex_value_t **) (p + cmd->offset);
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
221
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
222 if (*cv != NULL) {
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
223 return "duplicate";
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
224 }
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
225
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
226 *cv = ngx_palloc(cf->pool, sizeof(ngx_http_complex_value_t));
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
227 if (*cv == NULL) {
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
228 return NGX_CONF_ERROR;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
229 }
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
230
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
231 value = cf->args->elts;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
232
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
233 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
234
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
235 ccv.cf = cf;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
236 ccv.value = &value[1];
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
237 ccv.complex_value = *cv;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
238
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
239 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
240 return NGX_CONF_ERROR;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
241 }
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
242
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
243 return NGX_CONF_OK;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
244 }
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
245
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3691
diff changeset
246
3691
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
247 ngx_int_t
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
248 ngx_http_test_predicates(ngx_http_request_t *r, ngx_array_t *predicates)
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
249 {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
250 ngx_str_t val;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
251 ngx_uint_t i;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
252 ngx_http_complex_value_t *cv;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
253
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
254 if (predicates == NULL) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
255 return NGX_OK;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
256 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
257
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
258 cv = predicates->elts;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
259
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
260 for (i = 0; i < predicates->nelts; i++) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
261 if (ngx_http_complex_value(r, &cv[i], &val) != NGX_OK) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
262 return NGX_ERROR;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
263 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
264
3893
5581586480e9 values starting with '0' were incorrectly assumed to be false
Igor Sysoev <igor@sysoev.ru>
parents: 3887
diff changeset
265 if (val.len && (val.len != 1 || val.data[0] != '0')) {
3691
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
266 return NGX_DECLINED;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
267 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
268 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
269
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
270 return NGX_OK;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
271 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
272
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
273
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
274 char *
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
275 ngx_http_set_predicate_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
276 {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
277 char *p = conf;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
278
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
279 ngx_str_t *value;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
280 ngx_uint_t i;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
281 ngx_array_t **a;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
282 ngx_http_complex_value_t *cv;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
283 ngx_http_compile_complex_value_t ccv;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
284
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
285 a = (ngx_array_t **) (p + cmd->offset);
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
286
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
287 if (*a == NGX_CONF_UNSET_PTR) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
288 *a = ngx_array_create(cf->pool, 1, sizeof(ngx_http_complex_value_t));
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
289 if (*a == NULL) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
290 return NGX_CONF_ERROR;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
291 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
292 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
293
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
294 value = cf->args->elts;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
295
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
296 for (i = 1; i < cf->args->nelts; i++) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
297 cv = ngx_array_push(*a);
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
298 if (cv == NULL) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
299 return NGX_CONF_ERROR;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
300 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
301
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
302 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
303
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
304 ccv.cf = cf;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
305 ccv.value = &value[i];
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
306 ccv.complex_value = cv;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
307
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
308 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
309 return NGX_CONF_ERROR;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
310 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
311 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
312
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
313 return NGX_CONF_OK;
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
314 }
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
315
55f95e91daed ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3633
diff changeset
316
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
317 ngx_uint_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
318 ngx_http_script_variables_count(ngx_str_t *value)
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
320 ngx_uint_t i, n;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
321
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
322 for (n = 0, i = 0; i < value->len; i++) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
323 if (value->data[i] == '$') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
324 n++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
325 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
326 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
327
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
328 return n;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
329 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
330
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
331
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
332 ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
333 ngx_http_script_compile(ngx_http_script_compile_t *sc)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
334 {
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
335 u_char ch;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
336 ngx_str_t name;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
337 ngx_uint_t i, bracket;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
338
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
339 if (ngx_http_script_init_arrays(sc) != NGX_OK) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
340 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
341 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
342
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
343 for (i = 0; i < sc->source->len; /* void */ ) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
344
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
345 name.len = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
346
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
347 if (sc->source->data[i] == '$') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
348
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
349 if (++i == sc->source->len) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
350 goto invalid_variable;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
351 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
352
2547
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
353 #if (NGX_PCRE)
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
354 {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
355 ngx_uint_t n;
2547
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
356
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
357 if (sc->source->data[i] >= '1' && sc->source->data[i] <= '9') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
358
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
359 n = sc->source->data[i] - '0';
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
360
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
361 if (sc->captures_mask & (1 << n)) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
362 sc->dup_capture = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
363 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
364
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
365 sc->captures_mask |= 1 << n;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
366
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
367 if (ngx_http_script_add_capture_code(sc, n) != NGX_OK) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
368 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
369 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
370
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
371 i++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
372
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
373 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
374 }
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
375 }
2547
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
376 #endif
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
377
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
378 if (sc->source->data[i] == '{') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
379 bracket = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
380
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
381 if (++i == sc->source->len) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
382 goto invalid_variable;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
383 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
384
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
385 name.data = &sc->source->data[i];
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
386
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
387 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
388 bracket = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
389 name.data = &sc->source->data[i];
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
390 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
391
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
392 for ( /* void */ ; i < sc->source->len; i++, name.len++) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
393 ch = sc->source->data[i];
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
394
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
395 if (ch == '}' && bracket) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
396 i++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
397 bracket = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
398 break;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
399 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
400
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
401 if ((ch >= 'A' && ch <= 'Z')
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
402 || (ch >= 'a' && ch <= 'z')
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
403 || (ch >= '0' && ch <= '9')
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
404 || ch == '_')
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
405 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
406 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
407 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
408
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
409 break;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
410 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
411
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
412 if (bracket) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
413 ngx_conf_log_error(NGX_LOG_EMERG, sc->cf, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
414 "the closing bracket in \"%V\" "
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
415 "variable is missing", &name);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
416 return NGX_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
417 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
418
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
419 if (name.len == 0) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
420 goto invalid_variable;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
421 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
422
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
423 sc->variables++;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
424
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
425 if (ngx_http_script_add_var_code(sc, &name) != NGX_OK) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
426 return NGX_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
427 }
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
428
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
429 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
430 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
431
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
432 if (sc->source->data[i] == '?' && sc->compile_args) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
433 sc->args = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
434 sc->compile_args = 0;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
435
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
436 if (ngx_http_script_add_args_code(sc) != NGX_OK) {
1891
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
437 return NGX_ERROR;
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
438 }
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
439
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
440 i++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
441
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
442 continue;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
443 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
444
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
445 name.data = &sc->source->data[i];
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
446
2498
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
447 while (i < sc->source->len) {
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
448
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
449 if (sc->source->data[i] == '$') {
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
450 break;
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
451 }
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
452
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
453 if (sc->source->data[i] == '?') {
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
454
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
455 sc->args = 1;
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
456
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
457 if (sc->compile_args) {
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
458 break;
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
459 }
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
460 }
d3357bf23a5e fix /?new=arg?old=arg redirect case
Igor Sysoev <igor@sysoev.ru>
parents: 2397
diff changeset
461
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
462 i++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
463 name.len++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
464 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
465
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
466 sc->size += name.len;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
467
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
468 if (ngx_http_script_add_copy_code(sc, &name, (i == sc->source->len))
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
469 != NGX_OK)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
470 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
471 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
472 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
473 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
474
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
475 return ngx_http_script_done(sc);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
476
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
477 invalid_variable:
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
478
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
479 ngx_conf_log_error(NGX_LOG_EMERG, sc->cf, 0, "invalid variable name");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
480
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
481 return NGX_ERROR;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
482 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
483
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
484
623
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
485 u_char *
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
486 ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
487 void *code_lengths, size_t len, void *code_values)
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
488 {
1152
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
489 ngx_uint_t i;
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
490 ngx_http_script_code_pt code;
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
491 ngx_http_script_len_code_pt lcode;
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
492 ngx_http_script_engine_t e;
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
493 ngx_http_core_main_conf_t *cmcf;
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
494
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
495 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
496
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
497 for (i = 0; i < cmcf->variables.nelts; i++) {
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1561
diff changeset
498 if (r->variables[i].no_cacheable) {
1152
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
499 r->variables[i].valid = 0;
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
500 r->variables[i].not_found = 0;
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
501 }
a9715f8f17a5 flush nocachable variables before ngx_http_script_run()
Igor Sysoev <igor@sysoev.ru>
parents: 845
diff changeset
502 }
623
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
503
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
504 ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
505
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
506 e.ip = code_lengths;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
507 e.request = r;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
508 e.flushed = 1;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
509
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
510 while (*(uintptr_t *) e.ip) {
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
511 lcode = *(ngx_http_script_len_code_pt *) e.ip;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
512 len += lcode(&e);
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
513 }
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
514
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
515
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
516 value->len = len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1891
diff changeset
517 value->data = ngx_pnalloc(r->pool, len);
623
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
518 if (value->data == NULL) {
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
519 return NULL;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
520 }
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
521
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
522 e.ip = code_values;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
523 e.pos = value->data;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
524
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
525 while (*(uintptr_t *) e.ip) {
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
526 code = *(ngx_http_script_code_pt *) e.ip;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
527 code((ngx_http_script_engine_t *) &e);
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
528 }
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
529
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
530 return e.pos;
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
531 }
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
532
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 601
diff changeset
533
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
534 void
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1561
diff changeset
535 ngx_http_script_flush_no_cacheable_variables(ngx_http_request_t *r,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
536 ngx_array_t *indices)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
537 {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
538 ngx_uint_t n, *index;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
539
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
540 if (indices) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
541 index = indices->elts;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
542 for (n = 0; n < indices->nelts; n++) {
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1561
diff changeset
543 if (r->variables[index[n]].no_cacheable) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
544 r->variables[index[n]].valid = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
545 r->variables[index[n]].not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
546 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
547 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
548 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
549 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
550
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
551
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
552 static ngx_int_t
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
553 ngx_http_script_init_arrays(ngx_http_script_compile_t *sc)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
554 {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
555 ngx_uint_t n;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
556
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
557 if (sc->flushes && *sc->flushes == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
558 n = sc->variables ? sc->variables : 1;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
559 *sc->flushes = ngx_array_create(sc->cf->pool, n, sizeof(ngx_uint_t));
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
560 if (*sc->flushes == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
561 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
562 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
563 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
564
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
565 if (*sc->lengths == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
566 n = sc->variables * (2 * sizeof(ngx_http_script_copy_code_t)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
567 + sizeof(ngx_http_script_var_code_t))
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
568 + sizeof(uintptr_t);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
569
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
570 *sc->lengths = ngx_array_create(sc->cf->pool, n, 1);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
571 if (*sc->lengths == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
572 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
573 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
574 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
575
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
576 if (*sc->values == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
577 n = (sc->variables * (2 * sizeof(ngx_http_script_copy_code_t)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
578 + sizeof(ngx_http_script_var_code_t))
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
579 + sizeof(uintptr_t)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
580 + sc->source->len
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
581 + sizeof(uintptr_t) - 1)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
582 & ~(sizeof(uintptr_t) - 1);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
583
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
584 *sc->values = ngx_array_create(sc->cf->pool, n, 1);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
585 if (*sc->values == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
586 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
587 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
588 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
589
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
590 sc->variables = 0;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
591
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
592 return NGX_OK;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
593 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
594
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
595
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
596 static ngx_int_t
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
597 ngx_http_script_done(ngx_http_script_compile_t *sc)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
598 {
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
599 ngx_str_t zero;
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
600 uintptr_t *code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
601
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
602 if (sc->zero) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
603
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
604 zero.len = 1;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
605 zero.data = (u_char *) "\0";
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
606
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
607 if (ngx_http_script_add_copy_code(sc, &zero, 0) != NGX_OK) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
608 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
609 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
610 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
611
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
612 if (sc->conf_prefix || sc->root_prefix) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
613 if (ngx_http_script_add_full_name_code(sc) != NGX_OK) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
614 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
615 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
616 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
617
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
618 if (sc->complete_lengths) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
619 code = ngx_http_script_add_code(*sc->lengths, sizeof(uintptr_t), NULL);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
620 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
621 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
622 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
623
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
624 *code = (uintptr_t) NULL;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
625 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
626
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
627 if (sc->complete_values) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
628 code = ngx_http_script_add_code(*sc->values, sizeof(uintptr_t),
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
629 &sc->main);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
630 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
631 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
632 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
633
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
634 *code = (uintptr_t) NULL;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
635 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
636
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
637 return NGX_OK;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
638 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
639
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
640
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
641 void *
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
642 ngx_http_script_start_code(ngx_pool_t *pool, ngx_array_t **codes, size_t size)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
643 {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
644 if (*codes == NULL) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
645 *codes = ngx_array_create(pool, 256, 1);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
646 if (*codes == NULL) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
647 return NULL;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
648 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
649 }
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
650
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
651 return ngx_array_push_n(*codes, size);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
652 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
653
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
654
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
655 void *
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
656 ngx_http_script_add_code(ngx_array_t *codes, size_t size, void *code)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
657 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
658 u_char *elts, **p;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
659 void *new;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
660
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
661 elts = codes->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
662
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
663 new = ngx_array_push_n(codes, size);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
664 if (new == NULL) {
2911
32b444fa2ca4 fix return value on failure
Igor Sysoev <igor@sysoev.ru>
parents: 2758
diff changeset
665 return NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
666 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
667
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
668 if (code) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
669 if (elts != codes->elts) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
670 p = code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
671 *p += (u_char *) codes->elts - elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
672 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
673 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
674
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
675 return new;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
676 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
677
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
678
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
679 static ngx_int_t
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
680 ngx_http_script_add_copy_code(ngx_http_script_compile_t *sc, ngx_str_t *value,
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
681 ngx_uint_t last)
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
682 {
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
683 u_char *p;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
684 size_t size, len, zero;
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
685 ngx_http_script_copy_code_t *code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
686
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
687 zero = (sc->zero && last);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
688 len = value->len + zero;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
689
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
690 code = ngx_http_script_add_code(*sc->lengths,
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
691 sizeof(ngx_http_script_copy_code_t), NULL);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
692 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
693 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
694 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
695
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
696 code->code = (ngx_http_script_code_pt) ngx_http_script_copy_len_code;
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
697 code->len = len;
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
698
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
699 size = (sizeof(ngx_http_script_copy_code_t) + len + sizeof(uintptr_t) - 1)
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
700 & ~(sizeof(uintptr_t) - 1);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
701
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
702 code = ngx_http_script_add_code(*sc->values, size, &sc->main);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
703 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
704 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
705 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
706
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
707 code->code = ngx_http_script_copy_code;
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
708 code->len = len;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
709
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
710 p = ngx_cpymem((u_char *) code + sizeof(ngx_http_script_copy_code_t),
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
711 value->data, value->len);
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
712
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
713 if (zero) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
714 *p = '\0';
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
715 sc->zero = 0;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
716 }
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
717
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
718 return NGX_OK;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
719 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
720
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
721
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
722 size_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
723 ngx_http_script_copy_len_code(ngx_http_script_engine_t *e)
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
724 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
725 ngx_http_script_copy_code_t *code;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
726
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
727 code = (ngx_http_script_copy_code_t *) e->ip;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
728
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
729 e->ip += sizeof(ngx_http_script_copy_code_t);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
730
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
731 return code->len;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
732 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
733
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
734
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
735 void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
736 ngx_http_script_copy_code(ngx_http_script_engine_t *e)
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
737 {
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
738 u_char *p;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
739 ngx_http_script_copy_code_t *code;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
740
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
741 code = (ngx_http_script_copy_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
742
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
743 p = e->pos;
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
744
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
745 if (!e->skip) {
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
746 e->pos = ngx_copy(p, e->ip + sizeof(ngx_http_script_copy_code_t),
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
747 code->len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
748 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
749
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
750 e->ip += sizeof(ngx_http_script_copy_code_t)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
751 + ((code->len + sizeof(uintptr_t) - 1) & ~(sizeof(uintptr_t) - 1));
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
752
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
753 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
754 "http script copy: \"%*s\"", e->pos - p, p);
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
755 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
756
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
757
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
758 static ngx_int_t
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
759 ngx_http_script_add_var_code(ngx_http_script_compile_t *sc, ngx_str_t *name)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
760 {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
761 ngx_int_t index, *p;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
762 ngx_http_script_var_code_t *code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
763
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
764 index = ngx_http_get_variable_index(sc->cf, name);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
765
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
766 if (index == NGX_ERROR) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
767 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
768 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
769
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
770 if (sc->flushes) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
771 p = ngx_array_push(*sc->flushes);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
772 if (p == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
773 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
774 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
775
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
776 *p = index;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
777 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
778
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
779 code = ngx_http_script_add_code(*sc->lengths,
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
780 sizeof(ngx_http_script_var_code_t), NULL);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
781 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
782 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
783 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
784
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
785 code->code = (ngx_http_script_code_pt) ngx_http_script_copy_var_len_code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
786 code->index = (uintptr_t) index;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
787
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
788 code = ngx_http_script_add_code(*sc->values,
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
789 sizeof(ngx_http_script_var_code_t),
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
790 &sc->main);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
791 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
792 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
793 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
794
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
795 code->code = ngx_http_script_copy_var_code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
796 code->index = (uintptr_t) index;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
797
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
798 return NGX_OK;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
799 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
800
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
801
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
802 size_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
803 ngx_http_script_copy_var_len_code(ngx_http_script_engine_t *e)
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
804 {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
805 ngx_http_variable_value_t *value;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
806 ngx_http_script_var_code_t *code;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
807
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
808 code = (ngx_http_script_var_code_t *) e->ip;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
809
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
810 e->ip += sizeof(ngx_http_script_var_code_t);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
811
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
812 if (e->flushed) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
813 value = ngx_http_get_indexed_variable(e->request, code->index);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
814
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
815 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
816 value = ngx_http_get_flushed_variable(e->request, code->index);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
817 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
818
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
819 if (value && !value->not_found) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
820 return value->len;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
821 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
822
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
823 return 0;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
824 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
825
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
826
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
827 void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
828 ngx_http_script_copy_var_code(ngx_http_script_engine_t *e)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
829 {
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
830 u_char *p;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
831 ngx_http_variable_value_t *value;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
832 ngx_http_script_var_code_t *code;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
833
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
834 code = (ngx_http_script_var_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
835
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
836 e->ip += sizeof(ngx_http_script_var_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
837
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
838 if (!e->skip) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
839
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
840 if (e->flushed) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
841 value = ngx_http_get_indexed_variable(e->request, code->index);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
842
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
843 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
844 value = ngx_http_get_flushed_variable(e->request, code->index);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
845 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
846
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
847 if (value && !value->not_found) {
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
848 p = e->pos;
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
849 e->pos = ngx_copy(p, value->data, value->len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
850
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
851 ngx_log_debug2(NGX_LOG_DEBUG_HTTP,
845
eb5cf273e5d2 debug log should not be under rewrite_log control
Igor Sysoev <igor@sysoev.ru>
parents: 730
diff changeset
852 e->request->connection->log, 0,
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
853 "http script var: \"%*s\"", e->pos - p, p);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
854 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
855 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
856 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
857
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
858
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
859 static ngx_int_t
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
860 ngx_http_script_add_args_code(ngx_http_script_compile_t *sc)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
861 {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
862 uintptr_t *code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
863
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
864 code = ngx_http_script_add_code(*sc->lengths, sizeof(uintptr_t), NULL);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
865 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
866 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
867 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
868
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
869 *code = (uintptr_t) ngx_http_script_mark_args_code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
870
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
871 code = ngx_http_script_add_code(*sc->values, sizeof(uintptr_t), &sc->main);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
872 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
873 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
874 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
875
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
876 *code = (uintptr_t) ngx_http_script_start_args_code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
877
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
878 return NGX_OK;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
879 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
880
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
881
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
882 size_t
1891
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
883 ngx_http_script_mark_args_code(ngx_http_script_engine_t *e)
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
884 {
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
885 e->is_args = 1;
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
886 e->ip += sizeof(uintptr_t);
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
887
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
888 return 1;
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
889 }
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
890
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
891
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
892 void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
893 ngx_http_script_start_args_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
894 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
895 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
896 "http script args");
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
897
2225
207827f7bf71 escape a query string characters taken from URI while rewrite
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
898 e->is_args = 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
899 e->args = e->pos;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
900 e->ip += sizeof(uintptr_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
901 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
902
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
903
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
904 #if (NGX_PCRE)
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
905
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
906 void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
907 ngx_http_script_regex_start_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
908 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
909 size_t len;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
910 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
911 ngx_uint_t n;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
912 ngx_http_request_t *r;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
913 ngx_http_script_engine_t le;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
914 ngx_http_script_len_code_pt lcode;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
915 ngx_http_script_regex_code_t *code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
916
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
917 code = (ngx_http_script_regex_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
918
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
919 r = e->request;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
920
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
921 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
922 "http script regex: \"%V\"", &code->name);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
923
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
924 if (code->uri) {
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
925 e->line = r->uri;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
926 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
927 e->sp--;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
928 e->line.len = e->sp->len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
929 e->line.data = e->sp->data;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
930 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
931
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3178
diff changeset
932 rc = ngx_http_regex_exec(r, code->regex, &e->line);
2547
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
933
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3178
diff changeset
934 if (rc == NGX_DECLINED) {
2397
da6f70bb41f0 fix r2394
Igor Sysoev <igor@sysoev.ru>
parents: 2393
diff changeset
935 if (e->log || (r->connection->log->log_level & NGX_LOG_DEBUG_HTTP)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
936 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
937 "\"%V\" does not match \"%V\"",
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
938 &code->name, &e->line);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
939 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
940
2547
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
941 r->ncaptures = 0;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
942
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
943 if (code->test) {
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
944 if (code->negative_test) {
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
945 e->sp->len = 1;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
946 e->sp->data = (u_char *) "1";
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
947
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
948 } else {
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
949 e->sp->len = 0;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
950 e->sp->data = (u_char *) "";
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
951 }
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
952
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
953 e->sp++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
954
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
955 e->ip += sizeof(ngx_http_script_regex_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
956 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
957 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
958
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
959 e->ip += code->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
960 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
961 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
962
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3178
diff changeset
963 if (rc == NGX_ERROR) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
964 e->ip = ngx_http_script_exit;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
965 e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
966 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
967 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
968
2397
da6f70bb41f0 fix r2394
Igor Sysoev <igor@sysoev.ru>
parents: 2393
diff changeset
969 if (e->log || (r->connection->log->log_level & NGX_LOG_DEBUG_HTTP)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
970 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
971 "\"%V\" matches \"%V\"", &code->name, &e->line);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
972 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
973
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
974 if (code->test) {
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
975 if (code->negative_test) {
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
976 e->sp->len = 0;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
977 e->sp->data = (u_char *) "";
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
978
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
979 } else {
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
980 e->sp->len = 1;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
981 e->sp->data = (u_char *) "1";
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
982 }
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
983
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
984 e->sp++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
985
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
986 e->ip += sizeof(ngx_http_script_regex_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
987 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
988 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
989
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
990 if (code->status) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
991 e->status = code->status;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
992
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
993 if (!code->redirect) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
994 e->ip = ngx_http_script_exit;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
995 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
996 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
997 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
998
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
999 if (code->uri) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1000 r->internal = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1001 r->valid_unparsed_uri = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1002
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1003 if (code->break_cycle) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1004 r->valid_location = 0;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1005 r->uri_changed = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1006
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1007 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1008 r->uri_changed = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1009 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1010 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1011
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1012 if (code->lengths == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1013 e->buf.len = code->size;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1014
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1015 if (code->uri) {
3344
1aed55182ea2 fix captures in "rewrite", the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
1016 if (r->ncaptures && (r->quoted_uri || r->plus_in_uri)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1017 e->buf.len += 2 * ngx_escape_uri(NULL, r->uri.data, r->uri.len,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1018 NGX_ESCAPE_ARGS);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1019 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1020 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1021
3344
1aed55182ea2 fix captures in "rewrite", the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
1022 for (n = 2; n < r->ncaptures; n += 2) {
1aed55182ea2 fix captures in "rewrite", the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
1023 e->buf.len += r->captures[n + 1] - r->captures[n];
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1024 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1025
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1026 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1027 ngx_memzero(&le, sizeof(ngx_http_script_engine_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1028
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1029 le.ip = code->lengths->elts;
679
df95dcff753a nginx-0.3.61-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 673
diff changeset
1030 le.line = e->line;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1031 le.request = r;
679
df95dcff753a nginx-0.3.61-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 673
diff changeset
1032 le.quote = code->redirect;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1033
1891
782af1038115 length calculation did not take into account escaped symbols in arguments
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
1034 len = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1035
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1036 while (*(uintptr_t *) le.ip) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1037 lcode = *(ngx_http_script_len_code_pt *) le.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1038 len += lcode(&le);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1039 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1040
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1041 e->buf.len = len;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1042 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1043
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1044 if (code->add_args && r->args.len) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1045 e->buf.len += r->args.len + 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1046 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1047
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1891
diff changeset
1048 e->buf.data = ngx_pnalloc(r->pool, e->buf.len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1049 if (e->buf.data == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1050 e->ip = ngx_http_script_exit;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1051 e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1052 return;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1053 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1054
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1055 e->quote = code->redirect;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1056
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1057 e->pos = e->buf.data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1058
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1059 e->ip += sizeof(ngx_http_script_regex_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1060 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1061
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1062
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1063 void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1064 ngx_http_script_regex_end_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1065 {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1066 u_char *dst, *src;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1067 ngx_http_request_t *r;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1068 ngx_http_script_regex_end_code_t *code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1069
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1070 code = (ngx_http_script_regex_end_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1071
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1072 r = e->request;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1073
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1074 e->quote = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1075
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1076 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1077 "http script regex end");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1078
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1079 if (code->redirect) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1080
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1081 dst = e->buf.data;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1082 src = e->buf.data;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1083
1593
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1084 ngx_unescape_uri(&dst, &src, e->pos - e->buf.data,
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1085 NGX_UNESCAPE_REDIRECT);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1086
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1087 if (src < e->pos) {
3887
e7798b5e990a use memmove() in appropriate places
Igor Sysoev <igor@sysoev.ru>
parents: 3761
diff changeset
1088 dst = ngx_movemem(dst, src, e->pos - src);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1089 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1090
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1091 e->pos = dst;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1092
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1093 if (code->add_args && r->args.len) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1094 *e->pos++ = (u_char) (code->args ? '&' : '?');
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1095 e->pos = ngx_copy(e->pos, r->args.data, r->args.len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1096 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1097
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1098 e->buf.len = e->pos - e->buf.data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1099
2397
da6f70bb41f0 fix r2394
Igor Sysoev <igor@sysoev.ru>
parents: 2393
diff changeset
1100 if (e->log || (r->connection->log->log_level & NGX_LOG_DEBUG_HTTP)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1101 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1102 "rewritten redirect: \"%V\"", &e->buf);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1103 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1104
4206
1a94a56a4e5d Clear old Location header (if any) while adding a new one.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3904
diff changeset
1105 ngx_http_clear_location(r);
1a94a56a4e5d Clear old Location header (if any) while adding a new one.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3904
diff changeset
1106
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1107 r->headers_out.location = ngx_list_push(&r->headers_out.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1108 if (r->headers_out.location == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1109 e->ip = ngx_http_script_exit;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1110 e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1111 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1112 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1113
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1114 r->headers_out.location->hash = 1;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3344
diff changeset
1115 ngx_str_set(&r->headers_out.location->key, "Location");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1116 r->headers_out.location->value = e->buf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1117
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1118 e->ip += sizeof(ngx_http_script_regex_end_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1119 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1120 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1121
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1122 if (e->args) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1123 e->buf.len = e->args - e->buf.data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1124
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1125 if (code->add_args && r->args.len) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1126 *e->pos++ = '&';
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1127 e->pos = ngx_copy(e->pos, r->args.data, r->args.len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1128 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1129
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1130 r->args.len = e->pos - e->args;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1131 r->args.data = e->args;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1132
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1133 e->args = NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1134
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1135 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1136 e->buf.len = e->pos - e->buf.data;
673
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1137
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1138 if (!code->add_args) {
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1139 r->args.len = 0;
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1140 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1141 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1142
2397
da6f70bb41f0 fix r2394
Igor Sysoev <igor@sysoev.ru>
parents: 2393
diff changeset
1143 if (e->log || (r->connection->log->log_level & NGX_LOG_DEBUG_HTTP)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1144 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1145 "rewritten data: \"%V\", args: \"%V\"",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1146 &e->buf, &r->args);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1147 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1148
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1149 if (code->uri) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1150 r->uri = e->buf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1151
535
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1152 if (r->uri.len == 0) {
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1153 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1154 "the rewritten URI has a zero length");
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1155 e->ip = ngx_http_script_exit;
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1156 e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1157 return;
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1158 }
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1159
2979
b941147f2b2e ngx_http_set_exten() is always successful since 0.3.46
Igor Sysoev <igor@sysoev.ru>
parents: 2911
diff changeset
1160 ngx_http_set_exten(r);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1161 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1162
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1163 e->ip += sizeof(ngx_http_script_regex_end_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1164 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1165
2547
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1166
2577
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1167 static ngx_int_t
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1168 ngx_http_script_add_capture_code(ngx_http_script_compile_t *sc, ngx_uint_t n)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1169 {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1170 ngx_http_script_copy_capture_code_t *code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1171
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1172 code = ngx_http_script_add_code(*sc->lengths,
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1173 sizeof(ngx_http_script_copy_capture_code_t),
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1174 NULL);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1175 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1176 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1177 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1178
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1179 code->code = (ngx_http_script_code_pt)
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1180 ngx_http_script_copy_capture_len_code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1181 code->n = 2 * n;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1182
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1183
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1184 code = ngx_http_script_add_code(*sc->values,
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1185 sizeof(ngx_http_script_copy_capture_code_t),
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1186 &sc->main);
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1187 if (code == NULL) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1188 return NGX_ERROR;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1189 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1190
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1191 code->code = ngx_http_script_copy_capture_code;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1192 code->n = 2 * n;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1193
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1194 if (sc->ncaptures < n) {
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1195 sc->ncaptures = n;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1196 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1197
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1198 return NGX_OK;
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1199 }
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1200
2dcbcfc1a8d1 split ngx_http_script_compile()
Igor Sysoev <igor@sysoev.ru>
parents: 2547
diff changeset
1201
2547
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1202 size_t
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1203 ngx_http_script_copy_capture_len_code(ngx_http_script_engine_t *e)
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1204 {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1205 int *cap;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1206 u_char *p;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1207 ngx_uint_t n;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1208 ngx_http_request_t *r;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1209 ngx_http_script_copy_capture_code_t *code;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1210
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1211 r = e->request;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1212
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1213 code = (ngx_http_script_copy_capture_code_t *) e->ip;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1214
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1215 e->ip += sizeof(ngx_http_script_copy_capture_code_t);
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1216
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1217 n = code->n;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1218
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1219 if (n < r->ncaptures) {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1220
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1221 cap = r->captures;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1222
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1223 if ((e->is_args || e->quote)
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1224 && (e->request->quoted_uri || e->request->plus_in_uri))
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1225 {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1226 p = r->captures_data;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1227
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1228 return cap[n + 1] - cap[n]
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1229 + 2 * ngx_escape_uri(NULL, &p[cap[n]], cap[n + 1] - cap[n],
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1230 NGX_ESCAPE_ARGS);
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1231 } else {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1232 return cap[n + 1] - cap[n];
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1233 }
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1234 }
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1235
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1236 return 0;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1237 }
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1238
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1239
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1240 void
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1241 ngx_http_script_copy_capture_code(ngx_http_script_engine_t *e)
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1242 {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1243 int *cap;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1244 u_char *p, *pos;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1245 ngx_uint_t n;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1246 ngx_http_request_t *r;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1247 ngx_http_script_copy_capture_code_t *code;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1248
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1249 r = e->request;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1250
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1251 code = (ngx_http_script_copy_capture_code_t *) e->ip;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1252
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1253 e->ip += sizeof(ngx_http_script_copy_capture_code_t);
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1254
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1255 n = code->n;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1256
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1257 pos = e->pos;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1258
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1259 if (n < r->ncaptures) {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1260
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1261 cap = r->captures;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1262 p = r->captures_data;
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1263
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1264 if ((e->is_args || e->quote)
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1265 && (e->request->quoted_uri || e->request->plus_in_uri))
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1266 {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1267 e->pos = (u_char *) ngx_escape_uri(pos, &p[cap[n]],
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1268 cap[n + 1] - cap[n],
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1269 NGX_ESCAPE_ARGS);
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1270 } else {
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1271 e->pos = ngx_copy(pos, &p[cap[n]], cap[n + 1] - cap[n]);
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1272 }
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1273 }
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1274
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1275 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1276 "http script capture: \"%*s\"", e->pos - pos, pos);
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1277 }
912ce4113f21 now regex captures are per-request entities
Igor Sysoev <igor@sysoev.ru>
parents: 2498
diff changeset
1278
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
1279 #endif
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
1280
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1281
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1282 static ngx_int_t
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1283 ngx_http_script_add_full_name_code(ngx_http_script_compile_t *sc)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1284 {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1285 ngx_http_script_full_name_code_t *code;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1286
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1287 code = ngx_http_script_add_code(*sc->lengths,
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1288 sizeof(ngx_http_script_full_name_code_t),
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1289 NULL);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1290 if (code == NULL) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1291 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1292 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1293
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1294 code->code = (ngx_http_script_code_pt) ngx_http_script_full_name_len_code;
2758
77264e0157ad -p and --prefix=
Igor Sysoev <igor@sysoev.ru>
parents: 2756
diff changeset
1295 code->conf_prefix = sc->conf_prefix;
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1296
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1297 code = ngx_http_script_add_code(*sc->values,
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1298 sizeof(ngx_http_script_full_name_code_t),
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1299 &sc->main);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1300 if (code == NULL) {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1301 return NGX_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1302 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1303
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1304 code->code = ngx_http_script_full_name_code;
2758
77264e0157ad -p and --prefix=
Igor Sysoev <igor@sysoev.ru>
parents: 2756
diff changeset
1305 code->conf_prefix = sc->conf_prefix;
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1306
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1307 return NGX_OK;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1308 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1309
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1310
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1311 static size_t
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1312 ngx_http_script_full_name_len_code(ngx_http_script_engine_t *e)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1313 {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1314 ngx_http_script_full_name_code_t *code;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1315
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1316 code = (ngx_http_script_full_name_code_t *) e->ip;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1317
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1318 e->ip += sizeof(ngx_http_script_full_name_code_t);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1319
2758
77264e0157ad -p and --prefix=
Igor Sysoev <igor@sysoev.ru>
parents: 2756
diff changeset
1320 return code->conf_prefix ? ngx_cycle->conf_prefix.len:
77264e0157ad -p and --prefix=
Igor Sysoev <igor@sysoev.ru>
parents: 2756
diff changeset
1321 ngx_cycle->prefix.len;
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1322 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1323
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1324
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1325 static void
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1326 ngx_http_script_full_name_code(ngx_http_script_engine_t *e)
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1327 {
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1328 ngx_http_script_full_name_code_t *code;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1329
5331
e04083b79335 Style improved after 12dd27b74117.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5330
diff changeset
1330 ngx_str_t value, *prefix;
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1331
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1332 code = (ngx_http_script_full_name_code_t *) e->ip;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1333
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1334 value.data = e->buf.data;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1335 value.len = e->pos - e->buf.data;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1336
5331
e04083b79335 Style improved after 12dd27b74117.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5330
diff changeset
1337 prefix = code->conf_prefix ? (ngx_str_t *) &ngx_cycle->conf_prefix:
e04083b79335 Style improved after 12dd27b74117.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5330
diff changeset
1338 (ngx_str_t *) &ngx_cycle->prefix;
e04083b79335 Style improved after 12dd27b74117.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5330
diff changeset
1339
e04083b79335 Style improved after 12dd27b74117.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5330
diff changeset
1340 if (ngx_get_full_name(e->request->pool, prefix, &value) != NGX_OK) {
2587
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1341 e->ip = ngx_http_script_exit;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1342 e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1343 return;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1344 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1345
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1346 e->buf = value;
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1347
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1348 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1349 "http script fullname: \"%V\"", &value);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1350
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1351 e->ip += sizeof(ngx_http_script_full_name_code_t);
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1352 }
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1353
8afc4df77ee8 ngx_http_script_flush_complex_value()
Igor Sysoev <igor@sysoev.ru>
parents: 2577
diff changeset
1354
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1355 void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1356 ngx_http_script_return_code(ngx_http_script_engine_t *e)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1357 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1358 ngx_http_script_return_code_t *code;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1359
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1360 code = (ngx_http_script_return_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1361
3633
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1362 if (code->status < NGX_HTTP_BAD_REQUEST
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1363 || code->text.value.len
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1364 || code->text.lengths)
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1365 {
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1366 e->status = ngx_http_send_response(e->request, code->status, NULL,
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1367 &code->text);
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1368 } else {
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1369 e->status = code->status;
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1370 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1371
3633
187783310b65 return code text
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1372 e->ip = ngx_http_script_exit;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1373 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1374
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1375
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1376 void
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1377 ngx_http_script_break_code(ngx_http_script_engine_t *e)
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1378 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1379 e->request->uri_changed = 0;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1380
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1381 e->ip = ngx_http_script_exit;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1382 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1383
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1384
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
1385 void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1386 ngx_http_script_if_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1387 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1388 ngx_http_script_if_code_t *code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1389
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1390 code = (ngx_http_script_if_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1391
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1392 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1393 "http script if");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1394
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1395 e->sp--;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1396
5426
Maxim Dounin <mdounin@mdounin.ru>
parents: 5331
diff changeset
1397 if (e->sp->len && (e->sp->len != 1 || e->sp->data[0] != '0')) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1398 if (code->loc_conf) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1399 e->request->loc_conf = code->loc_conf;
535
563ad09abf50 nginx-0.1.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1400 ngx_http_update_location_config(e->request);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1401 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1402
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1403 e->ip += sizeof(ngx_http_script_if_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1404 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1405 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1406
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1407 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1408 "http script if: false");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1409
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1410 e->ip += code->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1411 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1412
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1413
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1414 void
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1415 ngx_http_script_equal_code(ngx_http_script_engine_t *e)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1416 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1417 ngx_http_variable_value_t *val, *res;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1418
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1419 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1420 "http script equal");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1421
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1422 e->sp--;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1423 val = e->sp;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1424 res = e->sp - 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1425
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1426 e->ip += sizeof(uintptr_t);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1427
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1428 if (val->len == res->len
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1429 && ngx_strncmp(val->data, res->data, res->len) == 0)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1430 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1431 *res = ngx_http_variable_true_value;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1432 return;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1433 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1434
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1435 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1436 "http script equal: no");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1437
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1438 *res = ngx_http_variable_null_value;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1439 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1440
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1441
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1442 void
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1443 ngx_http_script_not_equal_code(ngx_http_script_engine_t *e)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1444 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1445 ngx_http_variable_value_t *val, *res;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1446
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1447 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1448 "http script not equal");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1449
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1450 e->sp--;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1451 val = e->sp;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1452 res = e->sp - 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1453
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1454 e->ip += sizeof(uintptr_t);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1455
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1456 if (val->len == res->len
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1457 && ngx_strncmp(val->data, res->data, res->len) == 0)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1458 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1459 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1460 "http script not equal: no");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1461
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1462 *res = ngx_http_variable_null_value;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1463 return;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1464 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1465
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1466 *res = ngx_http_variable_true_value;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1467 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1468
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1469
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1470 void
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1471 ngx_http_script_file_code(ngx_http_script_engine_t *e)
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1472 {
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1473 ngx_str_t path;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1474 ngx_http_request_t *r;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1475 ngx_open_file_info_t of;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1476 ngx_http_core_loc_conf_t *clcf;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1477 ngx_http_variable_value_t *value;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1478 ngx_http_script_file_code_t *code;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1479
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1480 value = e->sp - 1;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1481
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1482 code = (ngx_http_script_file_code_t *) e->ip;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1483 e->ip += sizeof(ngx_http_script_file_code_t);
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1484
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1485 path.len = value->len - 1;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1486 path.data = value->data;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1487
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1488 r = e->request;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1489
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1490 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1491 "http script file op %p \"%V\"", code->op, &path);
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1492
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1493 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1494
2068
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
1495 ngx_memzero(&of, sizeof(ngx_open_file_info_t));
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
1496
3178
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3160
diff changeset
1497 of.read_ahead = clcf->read_ahead;
2129
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2068
diff changeset
1498 of.directio = clcf->directio;
1767
c42431762903 open_file_cache_retest > open_file_cache_valid
Igor Sysoev <igor@sysoev.ru>
parents: 1593
diff changeset
1499 of.valid = clcf->open_file_cache_valid;
1772
25c93614e6b9 open_file_cache_min_uses
Igor Sysoev <igor@sysoev.ru>
parents: 1767
diff changeset
1500 of.min_uses = clcf->open_file_cache_min_uses;
2756
09cab3f8d92e *) of.test_only to not open file if only stat() is enough
Igor Sysoev <igor@sysoev.ru>
parents: 2609
diff changeset
1501 of.test_only = 1;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1502 of.errors = clcf->open_file_cache_errors;
1457
223e92651ca5 open_file_cache_events
Igor Sysoev <igor@sysoev.ru>
parents: 1454
diff changeset
1503 of.events = clcf->open_file_cache_events;
4494
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
1504
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
1505 if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) {
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
1506 e->ip = ngx_http_script_exit;
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
1507 e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
1508 return;
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
1509 }
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1510
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1511 if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
1799
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
1512 != NGX_OK)
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1513 {
3160
a7637c2c1157 low ENAMETOOLONG logging level
Igor Sysoev <igor@sysoev.ru>
parents: 2979
diff changeset
1514 if (of.err != NGX_ENOENT
a7637c2c1157 low ENAMETOOLONG logging level
Igor Sysoev <igor@sysoev.ru>
parents: 2979
diff changeset
1515 && of.err != NGX_ENOTDIR
a7637c2c1157 low ENAMETOOLONG logging level
Igor Sysoev <igor@sysoev.ru>
parents: 2979
diff changeset
1516 && of.err != NGX_ENAMETOOLONG)
a7637c2c1157 low ENAMETOOLONG logging level
Igor Sysoev <igor@sysoev.ru>
parents: 2979
diff changeset
1517 {
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1518 ngx_log_error(NGX_LOG_CRIT, r->connection->log, of.err,
2756
09cab3f8d92e *) of.test_only to not open file if only stat() is enough
Igor Sysoev <igor@sysoev.ru>
parents: 2609
diff changeset
1519 "%s \"%s\" failed", of.failed, value->data);
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1520 }
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1521
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1522 switch (code->op) {
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
1523
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1524 case ngx_http_script_file_plain:
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1525 case ngx_http_script_file_dir:
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1526 case ngx_http_script_file_exists:
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1527 case ngx_http_script_file_exec:
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1528 goto false_value;
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
1529
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1530 case ngx_http_script_file_not_plain:
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1531 case ngx_http_script_file_not_dir:
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
1532 case ngx_http_script_file_not_exists:
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1533 case ngx_http_script_file_not_exec:
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1534 goto true_value;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1535 }
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1536
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1537 goto false_value;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1538 }
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1539
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1540 switch (code->op) {
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1541 case ngx_http_script_file_plain:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1542 if (of.is_file) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1543 goto true_value;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1544 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1545 goto false_value;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1546
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1547 case ngx_http_script_file_not_plain:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1548 if (of.is_file) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1549 goto false_value;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1550 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1551 goto true_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1552
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1553 case ngx_http_script_file_dir:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1554 if (of.is_dir) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1555 goto true_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1556 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1557 goto false_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1558
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1559 case ngx_http_script_file_not_dir:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1560 if (of.is_dir) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1561 goto false_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1562 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1563 goto true_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1564
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1565 case ngx_http_script_file_exists:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1566 if (of.is_file || of.is_dir || of.is_link) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1567 goto true_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1568 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1569 goto false_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1570
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1571 case ngx_http_script_file_not_exists:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1572 if (of.is_file || of.is_dir || of.is_link) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1573 goto false_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1574 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1575 goto true_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1576
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1577 case ngx_http_script_file_exec:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1578 if (of.is_exec) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1579 goto true_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1580 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1581 goto false_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1582
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1583 case ngx_http_script_file_not_exec:
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1584 if (of.is_exec) {
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1585 goto false_value;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
1586 }
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1587 goto true_value;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1588 }
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1589
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1590 false_value:
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1591
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
1592 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1593 "http script file op false");
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1594
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1595 *value = ngx_http_variable_null_value;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1596 return;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1597
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
1598 true_value:
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1599
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1600 *value = ngx_http_variable_true_value;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1601 return;
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1602 }
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1603
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1604
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
1605 void
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1606 ngx_http_script_complex_value_code(ngx_http_script_engine_t *e)
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1607 {
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1608 size_t len;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1609 ngx_http_script_engine_t le;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1610 ngx_http_script_len_code_pt lcode;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1611 ngx_http_script_complex_value_code_t *code;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1612
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1613 code = (ngx_http_script_complex_value_code_t *) e->ip;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1614
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1615 e->ip += sizeof(ngx_http_script_complex_value_code_t);
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1616
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1617 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1618 "http script complex value");
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1619
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1620 ngx_memzero(&le, sizeof(ngx_http_script_engine_t));
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1621
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1622 le.ip = code->lengths->elts;
655
4c8cd5ae5cc1 nginx-0.3.49-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
1623 le.line = e->line;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1624 le.request = e->request;
655
4c8cd5ae5cc1 nginx-0.3.49-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
1625 le.quote = e->quote;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1626
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1627 for (len = 0; *(uintptr_t *) le.ip; len += lcode(&le)) {
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1628 lcode = *(ngx_http_script_len_code_pt *) le.ip;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1629 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1630
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1631 e->buf.len = len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1891
diff changeset
1632 e->buf.data = ngx_pnalloc(e->request->pool, len);
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1633 if (e->buf.data == NULL) {
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1634 e->ip = ngx_http_script_exit;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1635 e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1636 return;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1637 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1638
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1639 e->pos = e->buf.data;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1640
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1641 e->sp->len = e->buf.len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1642 e->sp->data = e->buf.data;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1643 e->sp++;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1644 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1645
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1646
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1647 void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1648 ngx_http_script_value_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1649 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1650 ngx_http_script_value_code_t *code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1651
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1652 code = (ngx_http_script_value_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1653
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1654 e->ip += sizeof(ngx_http_script_value_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1655
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1656 e->sp->len = code->text_len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1657 e->sp->data = (u_char *) code->text_data;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1658
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1659 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
1561
57f3c940ae30 %v fix lost in r1407
Igor Sysoev <igor@sysoev.ru>
parents: 1457
diff changeset
1660 "http script value: \"%v\"", e->sp);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1661
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1662 e->sp++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1663 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1664
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1665
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1666 void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1667 ngx_http_script_set_var_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1668 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1669 ngx_http_request_t *r;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1670 ngx_http_script_var_code_t *code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1671
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1672 code = (ngx_http_script_var_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1673
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1674 e->ip += sizeof(ngx_http_script_var_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1675
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1676 r = e->request;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1677
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1678 e->sp--;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1679
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1680 r->variables[code->index].len = e->sp->len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1681 r->variables[code->index].valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1561
diff changeset
1682 r->variables[code->index].no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1683 r->variables[code->index].not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1684 r->variables[code->index].data = e->sp->data;
2393
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1685
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1686 #if (NGX_DEBUG)
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1687 {
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1688 ngx_http_variable_t *v;
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1689 ngx_http_core_main_conf_t *cmcf;
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1690
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1691 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1692
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1693 v = cmcf->variables.elts;
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1694
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1695 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1696 "http script set $%V", &v[code->index].name);
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1697 }
fbff569bf456 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2225
diff changeset
1698 #endif
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1699 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1700
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1701
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1702 void
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1703 ngx_http_script_var_set_handler_code(ngx_http_script_engine_t *e)
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1704 {
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1705 ngx_http_script_var_handler_code_t *code;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1706
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1707 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1708 "http script set var handler");
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1709
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1710 code = (ngx_http_script_var_handler_code_t *) e->ip;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1711
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1712 e->ip += sizeof(ngx_http_script_var_handler_code_t);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1713
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1714 e->sp--;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1715
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1716 code->handler(e->request, e->sp, code->data);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1717 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1718
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1719
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 631
diff changeset
1720 void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1721 ngx_http_script_var_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1722 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1723 ngx_http_variable_value_t *value;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1724 ngx_http_script_var_code_t *code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1725
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1726 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1727 "http script var");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1728
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1729 code = (ngx_http_script_var_code_t *) e->ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1730
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1731 e->ip += sizeof(ngx_http_script_var_code_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1732
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1733 value = ngx_http_get_flushed_variable(e->request, code->index);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1734
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1735 if (value && !value->not_found) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1736 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
1406
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1152
diff changeset
1737 "http script var: \"%v\"", value);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1738
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
1739 *e->sp = *value;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1740 e->sp++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1741
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1742 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1743 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1744
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1745 *e->sp = ngx_http_variable_null_value;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1746 e->sp++;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1747 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1748
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1749
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1750 void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1751 ngx_http_script_nop_code(ngx_http_script_engine_t *e)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1752 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1753 e->ip += sizeof(uintptr_t);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1754 }