MINOR: listener: detect stream vs dgram conflict during parsing
Now that we have a function to parse all bind keywords, and that we know what types of sock-level and xprt-level protocols a bind_conf is using, it's easier to centralize the check for stream vs dgram conflict by putting it directly at the end of the args parser. This way it also works for peers, provides better precision in the report, and will also allow to validate transport layers. The check was even extended to detect inconsistencies between xprt layer (which were not covered before). It can even detect that there are two incompatible "bind" lines in a single peers section.
This commit is contained in:
parent
91b780a455
commit
64306ccd97
@ -3762,23 +3762,6 @@ out_uri_auth_compat:
|
||||
list_for_each_entry(bind_conf, &curproxy->conf.bind, by_fe) {
|
||||
int mode = (1 << (curproxy->mode == PR_MODE_HTTP));
|
||||
const struct mux_proto_list *mux_ent;
|
||||
const struct listener *l;
|
||||
int types = 0;
|
||||
|
||||
/* check that the mux is compatible with all listeners'
|
||||
* protocol types (dgram or stream).
|
||||
*/
|
||||
list_for_each_entry(l, &bind_conf->listeners, by_bind)
|
||||
types |= 1 << l->rx.proto->proto_type;
|
||||
|
||||
if (atleast2(types)) {
|
||||
ha_alert("%s '%s' : cannot mix datagram and stream protocols "
|
||||
"for 'bind %s' at [%s:%d].\n",
|
||||
proxy_type_str(curproxy), curproxy->id,
|
||||
bind_conf->arg, bind_conf->file, bind_conf->line);
|
||||
cfgerr++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!bind_conf->mux_proto)
|
||||
continue;
|
||||
|
@ -1631,6 +1631,15 @@ int bind_parse_args_list(struct bind_conf *bind_conf, char **args, int cur_arg,
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ((bind_conf->options & (BC_O_USE_SOCK_DGRAM|BC_O_USE_SOCK_STREAM)) == (BC_O_USE_SOCK_DGRAM|BC_O_USE_SOCK_STREAM) ||
|
||||
(bind_conf->options & (BC_O_USE_XPRT_DGRAM|BC_O_USE_XPRT_STREAM)) == (BC_O_USE_XPRT_DGRAM|BC_O_USE_XPRT_STREAM)) {
|
||||
ha_alert("parsing [%s:%d] : '%s %s' in section '%s' : cannot mix datagram and stream protocols.\n",
|
||||
file, linenum, args[0], args[1], section);
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
return err_code;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user