git ssb

0+

cel / sslh



Commit 63a83cf0416ab89720b15a4a649786812b630b79

fix SNI/ALPN option parsing (issue 90)

Yves Rutschlé committed on 5/20/2016, 7:52:24 AM
Parent: 245fd264594cfa7b938721fab37c7b13fb557c47

Files changed

sslh-main.cchanged
sslh-main.cView
@@ -234,12 +234,8 @@
234234 int num_probes, i, max_server_name_len, server_name_len;
235235 const char * config_item;
236236 char** sni_hostname_list;
237237
238- if(!config_items || !config_setting_is_array(config_items)) {
239- fprintf(stderr, "%s: no %s specified\n", p->description, name);
240- return;
241- }
242238 num_probes = config_setting_length(config_items);
243239 if (!num_probes) {
244240 fprintf(stderr, "%s: no %s specified\n", p->description, name);
245241 return;
@@ -263,14 +259,24 @@
263259
264260 p->data = (void*)tls_data_set_list(p->data, alpn, sni_hostname_list);
265261 }
266262
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)
268264 {
265+ config_setting_t *sni_hostnames, *alpn_protocols;
266+
269267 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+ }
273279 }
274280 #endif
275281
276282 /* Extract configuration for protocols to connect to.
@@ -278,9 +284,9 @@
278284 */
279285 #ifdef LIBCONFIG
280286 static int config_protocols(config_t *config, struct proto **prots)
281287 {
282- config_setting_t *setting, *prot, *patterns, *sni_hostnames, *alpn_protocols;
288+ config_setting_t *setting, *prot, *patterns;
283289 const char *hostname, *port, *name;
284290 int i, num_prots;
285291 struct proto *p, *prev = NULL;
286292
@@ -323,14 +329,9 @@
323329 }
324330
325331 /* Probe-specific options: SNI/ALPN */
326332 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);
333334 }
334335
335336 }
336337 }

Built with git-ssb-web