1
2
3 char *
ndk_conf_set_regex_slot(ngx_conf_t * cf,ngx_command_t * cmd,void * conf)4 ndk_conf_set_regex_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
5 {
6 char *p = conf;
7
8 ngx_str_t *value;
9 ngx_conf_post_t *post;
10 ngx_regex_elt_t *re;
11 ngx_regex_compile_t rc;
12 u_char errstr[NGX_MAX_CONF_ERRSTR];
13
14 re = (ngx_regex_elt_t *) (p + cmd->offset);
15
16 if (re->name) {
17 return "is duplicate";
18 }
19
20 value = cf->args->elts;
21 value++;
22
23 ndk_zerov (rc);
24
25 rc.pool = cf->pool;
26 rc.err.len = NGX_MAX_CONF_ERRSTR;
27 rc.err.data = errstr;
28 rc.pattern = *value;
29
30 if (ngx_regex_compile(&rc) != NGX_OK) {
31 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
32 return NGX_CONF_ERROR;
33 }
34
35 re->regex = rc.regex;
36 re->name = value->data;
37
38 if (cmd->post) {
39 post = cmd->post;
40 return post->post_handler (cf, post, re);
41 }
42
43 return NGX_CONF_OK;
44 }
45
46
47 char *
ndk_conf_set_regex_caseless_slot(ngx_conf_t * cf,ngx_command_t * cmd,void * conf)48 ndk_conf_set_regex_caseless_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
49 {
50 char *p = conf;
51
52 ngx_str_t *value;
53 ngx_conf_post_t *post;
54 ngx_regex_elt_t *re;
55 ngx_regex_compile_t rc;
56 u_char errstr[NGX_MAX_CONF_ERRSTR];
57
58 re = (ngx_regex_elt_t *) (p + cmd->offset);
59
60 if (re->name) {
61 return "is duplicate";
62 }
63
64 value = cf->args->elts;
65 value++;
66
67 ndk_zerov (rc);
68
69 rc.pool = cf->pool;
70 rc.err.len = NGX_MAX_CONF_ERRSTR;
71 rc.err.data = errstr;
72 rc.pattern = *value;
73 rc.options = NGX_REGEX_CASELESS;
74
75 if (ngx_regex_compile(&rc) != NGX_OK) {
76 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
77 return NGX_CONF_ERROR;
78 }
79
80 re->regex = rc.regex;
81 re->name = value->data;
82
83 if (cmd->post) {
84 post = cmd->post;
85 return post->post_handler (cf, post, re);
86 }
87
88 return NGX_CONF_OK;
89 }
90
91
92
93 char *
ndk_conf_set_regex_array_slot(ngx_conf_t * cf,ngx_command_t * cmd,void * conf)94 ndk_conf_set_regex_array_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
95 {
96 char *p = conf;
97
98 ngx_str_t *value;
99 ngx_conf_post_t *post;
100 ngx_array_t **a;
101 ngx_regex_elt_t *re;
102 ngx_regex_compile_t rc;
103 ngx_uint_t i, n = 0;
104 u_char errstr[NGX_MAX_CONF_ERRSTR];
105
106 a = (ngx_array_t **) (p + cmd->offset);
107
108 if (*a != NGX_CONF_UNSET_PTR) {
109
110 n = cf->args->nelts > 4 ? cf->args->nelts : 4;
111
112 *a = ngx_array_create (cf->pool, n, sizeof (ngx_regex_elt_t));
113 if (*a == NULL) {
114 return NGX_CONF_ERROR;
115 }
116 }
117
118 ndk_zerov (rc);
119
120 rc.pool = cf->pool;
121 rc.err.len = NGX_MAX_CONF_ERRSTR;
122 rc.err.data = errstr;
123
124 value = cf->args->elts;
125 value++;
126
127 for (i=0; i<n; i++, value++) {
128
129 re = ngx_array_push (*a);
130 if (re == NULL)
131 return NGX_CONF_ERROR;
132
133 rc.pattern = *value;
134
135 if (ngx_regex_compile(&rc) != NGX_OK) {
136 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
137 return NGX_CONF_ERROR;
138 }
139
140 re->regex = rc.regex;
141 re->name = value->data;
142 }
143
144
145 if (cmd->post) {
146 post = cmd->post;
147 return post->post_handler (cf, post, a);
148 }
149
150 return NGX_CONF_OK;
151 }
152
153
154
155 char *
ndk_conf_set_regex_array_caseless_slot(ngx_conf_t * cf,ngx_command_t * cmd,void * conf)156 ndk_conf_set_regex_array_caseless_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
157 {
158 char *p = conf;
159
160 ngx_str_t *value;
161 ngx_conf_post_t *post;
162 ngx_array_t **a;
163 ngx_regex_elt_t *re;
164 ngx_regex_compile_t rc;
165 ngx_uint_t i, n = 0;
166 u_char errstr[NGX_MAX_CONF_ERRSTR];
167
168 a = (ngx_array_t **) (p + cmd->offset);
169
170 if (*a != NGX_CONF_UNSET_PTR) {
171
172 n = cf->args->nelts > 4 ? cf->args->nelts : 4;
173
174 *a = ngx_array_create (cf->pool, n, sizeof (ngx_regex_elt_t));
175 if (*a == NULL) {
176 return NGX_CONF_ERROR;
177 }
178 }
179
180 ndk_zerov (rc);
181
182 rc.pool = cf->pool;
183 rc.err.len = NGX_MAX_CONF_ERRSTR;
184 rc.err.data = errstr;
185
186 value = cf->args->elts;
187 value++;
188
189 for (i=0; i<n; i++, value++) {
190
191 re = ngx_array_push (*a);
192 if (re == NULL)
193 return NGX_CONF_ERROR;
194
195 rc.pattern = *value;
196 rc.options = NGX_REGEX_CASELESS;
197
198 if (ngx_regex_compile(&rc) != NGX_OK) {
199 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
200 return NGX_CONF_ERROR;
201 }
202
203 re->regex = rc.regex;
204 re->name = value->data;
205 }
206
207
208 if (cmd->post) {
209 post = cmd->post;
210 return post->post_handler (cf, post, a);
211 }
212
213 return NGX_CONF_OK;
214 }
215
216