BUG/MEDIUM: log: fix config parse error logging on stdout/stderr or any raw fd

The regression was introduced by commit previous commit 94aab06:
MEDIUM: log: support tcp or stream addresses on log lines.

This previous patch tries to retrieve the used protocol parsing
the address using the str2sa_range function but forgets that
the raw file descriptor adresses don't specify a protocol
and str2sa_range probes an error.

This patch re-work the str2sa_range function to stop
probing error if an authorized RAW_FD address is parsed
whereas the caller request also a protocol.

It also modify the code of parse_logsrv to switch on stream
logservers only if a protocol was detected.
This commit is contained in:
Emeric Brun 2021-04-07 14:26:44 +02:00 committed by Christopher Faulet
parent 94aab06e24
commit 26754901e9
2 changed files with 4 additions and 3 deletions

View File

@ -1051,7 +1051,7 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, const char *file
set_host_port(&logsrv->addr, SYSLOG_PORT); set_host_port(&logsrv->addr, SYSLOG_PORT);
} }
if (proto->ctrl_type == SOCK_STREAM) { if (proto && proto->ctrl_type == SOCK_STREAM) {
static unsigned long ring_ids; static unsigned long ring_ids;
/* Implicit sink buffer will be /* Implicit sink buffer will be

View File

@ -1218,7 +1218,8 @@ struct sockaddr_storage *str2sa_range(const char *str, int *port, int *low, int
if (proto || (opts & PA_O_CONNECT)) { if (proto || (opts & PA_O_CONNECT)) {
/* Note: if the caller asks for a proto, we must find one, /* Note: if the caller asks for a proto, we must find one,
* except if we return with an fqdn that will resolve later, * except if we inherit from a raw FD (family == AF_CUST_EXISTING_FD)
* orif we return with an fqdn that will resolve later,
* in which case the address is not known yet (this is only * in which case the address is not known yet (this is only
* for servers actually). * for servers actually).
*/ */
@ -1226,7 +1227,7 @@ struct sockaddr_storage *str2sa_range(const char *str, int *port, int *low, int
sock_type == SOCK_DGRAM, sock_type == SOCK_DGRAM,
ctrl_type == SOCK_DGRAM); ctrl_type == SOCK_DGRAM);
if (!new_proto && (!fqdn || !*fqdn)) { if (!new_proto && (!fqdn || !*fqdn) && (ss.ss_family != AF_CUST_EXISTING_FD)) {
memprintf(err, "unsupported protocol family %d for address '%s'", ss.ss_family, str); memprintf(err, "unsupported protocol family %d for address '%s'", ss.ss_family, str);
goto out; goto out;
} }