Mercurial > hg > nginx-quic
comparison src/stream/ngx_stream_ssl_module.c @ 6611:85e7bcb37d6b
Stream: SSL-related variables.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Wed, 29 Jun 2016 12:52:52 +0300 |
parents | 2f41d383c9c7 |
children | 3908156a51fa |
comparison
equal
deleted
inserted
replaced
6610:d5b5866c06c4 | 6611:85e7bcb37d6b |
---|---|
8 #include <ngx_config.h> | 8 #include <ngx_config.h> |
9 #include <ngx_core.h> | 9 #include <ngx_core.h> |
10 #include <ngx_stream.h> | 10 #include <ngx_stream.h> |
11 | 11 |
12 | 12 |
13 typedef ngx_int_t (*ngx_ssl_variable_handler_pt)(ngx_connection_t *c, | |
14 ngx_pool_t *pool, ngx_str_t *s); | |
15 | |
16 | |
13 #define NGX_DEFAULT_CIPHERS "HIGH:!aNULL:!MD5" | 17 #define NGX_DEFAULT_CIPHERS "HIGH:!aNULL:!MD5" |
14 #define NGX_DEFAULT_ECDH_CURVE "auto" | 18 #define NGX_DEFAULT_ECDH_CURVE "auto" |
15 | 19 |
16 | 20 |
21 static ngx_int_t ngx_stream_ssl_static_variable(ngx_stream_session_t *s, | |
22 ngx_stream_variable_value_t *v, uintptr_t data); | |
23 static ngx_int_t ngx_stream_ssl_variable(ngx_stream_session_t *s, | |
24 ngx_stream_variable_value_t *v, uintptr_t data); | |
25 | |
26 static ngx_int_t ngx_stream_ssl_add_variables(ngx_conf_t *cf); | |
17 static void *ngx_stream_ssl_create_conf(ngx_conf_t *cf); | 27 static void *ngx_stream_ssl_create_conf(ngx_conf_t *cf); |
18 static char *ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, | 28 static char *ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, |
19 void *child); | 29 void *child); |
20 | 30 |
21 static char *ngx_stream_ssl_password_file(ngx_conf_t *cf, ngx_command_t *cmd, | 31 static char *ngx_stream_ssl_password_file(ngx_conf_t *cf, ngx_command_t *cmd, |
130 ngx_null_command | 140 ngx_null_command |
131 }; | 141 }; |
132 | 142 |
133 | 143 |
134 static ngx_stream_module_t ngx_stream_ssl_module_ctx = { | 144 static ngx_stream_module_t ngx_stream_ssl_module_ctx = { |
135 NULL, /* preconfiguration */ | 145 ngx_stream_ssl_add_variables, /* preconfiguration */ |
136 NULL, /* postconfiguration */ | 146 NULL, /* postconfiguration */ |
137 | 147 |
138 NULL, /* create main configuration */ | 148 NULL, /* create main configuration */ |
139 NULL, /* init main configuration */ | 149 NULL, /* init main configuration */ |
140 | 150 |
157 NULL, /* exit master */ | 167 NULL, /* exit master */ |
158 NGX_MODULE_V1_PADDING | 168 NGX_MODULE_V1_PADDING |
159 }; | 169 }; |
160 | 170 |
161 | 171 |
172 static ngx_stream_variable_t ngx_stream_ssl_vars[] = { | |
173 | |
174 { ngx_string("ssl_protocol"), NULL, ngx_stream_ssl_static_variable, | |
175 (uintptr_t) ngx_ssl_get_protocol, NGX_STREAM_VAR_CHANGEABLE, 0 }, | |
176 | |
177 { ngx_string("ssl_cipher"), NULL, ngx_stream_ssl_static_variable, | |
178 (uintptr_t) ngx_ssl_get_cipher_name, NGX_STREAM_VAR_CHANGEABLE, 0 }, | |
179 | |
180 { ngx_string("ssl_session_id"), NULL, ngx_stream_ssl_variable, | |
181 (uintptr_t) ngx_ssl_get_session_id, NGX_STREAM_VAR_CHANGEABLE, 0 }, | |
182 | |
183 { ngx_string("ssl_session_reused"), NULL, ngx_stream_ssl_variable, | |
184 (uintptr_t) ngx_ssl_get_session_reused, NGX_STREAM_VAR_CHANGEABLE, 0 }, | |
185 | |
186 { ngx_string("ssl_server_name"), NULL, ngx_stream_ssl_variable, | |
187 (uintptr_t) ngx_ssl_get_server_name, NGX_STREAM_VAR_CHANGEABLE, 0 }, | |
188 | |
189 { ngx_null_string, NULL, NULL, 0, 0, 0 } | |
190 }; | |
191 | |
192 | |
162 static ngx_str_t ngx_stream_ssl_sess_id_ctx = ngx_string("STREAM"); | 193 static ngx_str_t ngx_stream_ssl_sess_id_ctx = ngx_string("STREAM"); |
194 | |
195 | |
196 static ngx_int_t | |
197 ngx_stream_ssl_static_variable(ngx_stream_session_t *s, | |
198 ngx_stream_variable_value_t *v, uintptr_t data) | |
199 { | |
200 ngx_ssl_variable_handler_pt handler = (ngx_ssl_variable_handler_pt) data; | |
201 | |
202 size_t len; | |
203 ngx_str_t str; | |
204 | |
205 if (s->connection->ssl) { | |
206 | |
207 (void) handler(s->connection, NULL, &str); | |
208 | |
209 v->data = str.data; | |
210 | |
211 for (len = 0; v->data[len]; len++) { /* void */ } | |
212 | |
213 v->len = len; | |
214 v->valid = 1; | |
215 v->no_cacheable = 0; | |
216 v->not_found = 0; | |
217 | |
218 return NGX_OK; | |
219 } | |
220 | |
221 v->not_found = 1; | |
222 | |
223 return NGX_OK; | |
224 } | |
225 | |
226 | |
227 static ngx_int_t | |
228 ngx_stream_ssl_variable(ngx_stream_session_t *s, | |
229 ngx_stream_variable_value_t *v, uintptr_t data) | |
230 { | |
231 ngx_ssl_variable_handler_pt handler = (ngx_ssl_variable_handler_pt) data; | |
232 | |
233 ngx_str_t str; | |
234 | |
235 if (s->connection->ssl) { | |
236 | |
237 if (handler(s->connection, s->connection->pool, &str) != NGX_OK) { | |
238 return NGX_ERROR; | |
239 } | |
240 | |
241 v->len = str.len; | |
242 v->data = str.data; | |
243 | |
244 if (v->len) { | |
245 v->valid = 1; | |
246 v->no_cacheable = 0; | |
247 v->not_found = 0; | |
248 | |
249 return NGX_OK; | |
250 } | |
251 } | |
252 | |
253 v->not_found = 1; | |
254 | |
255 return NGX_OK; | |
256 } | |
257 | |
258 | |
259 static ngx_int_t | |
260 ngx_stream_ssl_add_variables(ngx_conf_t *cf) | |
261 { | |
262 ngx_stream_variable_t *var, *v; | |
263 | |
264 for (v = ngx_stream_ssl_vars; v->name.len; v++) { | |
265 var = ngx_stream_add_variable(cf, &v->name, v->flags); | |
266 if (var == NULL) { | |
267 return NGX_ERROR; | |
268 } | |
269 | |
270 var->get_handler = v->get_handler; | |
271 var->data = v->data; | |
272 } | |
273 | |
274 return NGX_OK; | |
275 } | |
163 | 276 |
164 | 277 |
165 static void * | 278 static void * |
166 ngx_stream_ssl_create_conf(ngx_conf_t *cf) | 279 ngx_stream_ssl_create_conf(ngx_conf_t *cf) |
167 { | 280 { |