Commit 63a83cf0416ab89720b15a4a649786812b630b79
fix SNI/ALPN option parsing (issue 90)
Yves Rutschlé committed on 5/20/2016, 7:52:24 AMParent: 245fd264594cfa7b938721fab37c7b13fb557c47
Files changed
sslh-main.c | changed |
sslh-main.c | ||
---|---|---|
@@ -234,12 +234,8 @@ | ||
234 | 234 | int num_probes, i, max_server_name_len, server_name_len; |
235 | 235 | const char * config_item; |
236 | 236 | char** sni_hostname_list; |
237 | 237 | |
238 | - if(!config_items || !config_setting_is_array(config_items)) { | |
239 | - fprintf(stderr, "%s: no %s specified\n", p->description, name); | |
240 | - return; | |
241 | - } | |
242 | 238 | num_probes = config_setting_length(config_items); |
243 | 239 | if (!num_probes) { |
244 | 240 | fprintf(stderr, "%s: no %s specified\n", p->description, name); |
245 | 241 | return; |
@@ -263,14 +259,24 @@ | ||
263 | 259 | |
264 | 260 | p->data = (void*)tls_data_set_list(p->data, alpn, sni_hostname_list); |
265 | 261 | } |
266 | 262 | |
267 | -static void setup_sni_alpn(struct proto *p, config_setting_t* sni_hostnames, config_setting_t* alpn_protocols) | |
263 | +static void setup_sni_alpn(struct proto *p, config_setting_t* prot) | |
268 | 264 | { |
265 | + config_setting_t *sni_hostnames, *alpn_protocols; | |
266 | + | |
269 | 267 | p->data = (void*)new_tls_data(); |
270 | - p->probe = get_probe("sni_alpn"); | |
271 | - setup_sni_alpn_list(p, sni_hostnames, "sni_hostnames", 0); | |
272 | - setup_sni_alpn_list(p, alpn_protocols, "alpn_protocols", 1); | |
268 | + sni_hostnames = config_setting_get_member(prot, "sni_hostnames"); | |
269 | + alpn_protocols = config_setting_get_member(prot, "alpn_protocols"); | |
270 | + | |
271 | + if(sni_hostnames && config_setting_is_array(sni_hostnames)) { | |
272 | + p->probe = get_probe("sni_alpn"); | |
273 | + setup_sni_alpn_list(p, sni_hostnames, "sni_hostnames", 0); | |
274 | + } | |
275 | + if(alpn_protocols && config_setting_is_array(alpn_protocols)) { | |
276 | + p->probe = get_probe("sni_alpn"); | |
277 | + setup_sni_alpn_list(p, alpn_protocols, "alpn_protocols", 1); | |
278 | + } | |
273 | 279 | } |
274 | 280 | |
275 | 281 | |
276 | 282 | /* Extract configuration for protocols to connect to. |
@@ -278,9 +284,9 @@ | ||
278 | 284 | */ |
279 | 285 | |
280 | 286 | static int config_protocols(config_t *config, struct proto **prots) |
281 | 287 | { |
282 | - config_setting_t *setting, *prot, *patterns, *sni_hostnames, *alpn_protocols; | |
288 | + config_setting_t *setting, *prot, *patterns; | |
283 | 289 | const char *hostname, *port, *name; |
284 | 290 | int i, num_prots; |
285 | 291 | struct proto *p, *prev = NULL; |
286 | 292 | |
@@ -323,14 +329,9 @@ | ||
323 | 329 | } |
324 | 330 | |
325 | 331 | /* Probe-specific options: SNI/ALPN */ |
326 | 332 | if (!strcmp(name, "tls")) { |
327 | - sni_hostnames = config_setting_get_member(prot, "sni_hostnames"); | |
328 | - alpn_protocols = config_setting_get_member(prot, "alpn_protocols"); | |
329 | - | |
330 | - if((sni_hostnames && config_setting_is_array(sni_hostnames)) || (alpn_protocols && config_setting_is_array(alpn_protocols))) { | |
331 | - setup_sni_alpn(p, sni_hostnames, alpn_protocols); | |
332 | - } | |
333 | + setup_sni_alpn(p, prot); | |
333 | 334 | } |
334 | 335 | |
335 | 336 | } |
336 | 337 | } |
Built with git-ssb-web