diff --git a/doc/configuration.txt b/doc/configuration.txt index 9fb099937..aa6baabb4 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -5338,13 +5338,14 @@ external-check command The arguments passed to the to the command are: - proxy_address proxy_port server_address server_port + - The proxy_address and proxy_port are derived from the first listener - that is either IPv4, IPv6 or a UNIX socket. It is an error for no such - listeners to exist. In the case of a UNIX socket listener the - proxy_address will be the path of the socket and the proxy_port will - be the string "NOT_USED". + The and are derived from the first listener + that is either IPv4, IPv6 or a UNIX socket. In the case of a UNIX socket + listener the proxy_address will be the path of the socket and the + will be the string "NOT_USED". In a backend section, it's not + possible to determine a listener, and both and + will have the string value "NOT_USED". If the command executed and exits with a zero status then the check is considered to have passed, otherwise the check is considered to have diff --git a/src/checks.c b/src/checks.c index 5dc95b2a2..bb8b719eb 100644 --- a/src/checks.c +++ b/src/checks.c @@ -1589,11 +1589,6 @@ static int prepare_external_check(struct check *check) break; } - if (!listener) { - err_fmt = "Starting [%s:%s] check: no listener.\n"; - goto err; - } - check->curpid = NULL; check->envp = calloc(2, sizeof(check->argv)); @@ -1612,19 +1607,25 @@ static int prepare_external_check(struct check *check) check->argv[0] = px->check_command; - if (listener->addr.ss_family == AF_INET || + if (!listener) { + check->argv[1] = strdup("NOT_USED"); + check->argv[2] = strdup("NOT_USED"); + } + else if (listener->addr.ss_family == AF_INET || listener->addr.ss_family == AF_INET6) { addr_to_str(&listener->addr, host, sizeof(host)); check->argv[1] = strdup(host); port_to_str(&listener->addr, serv, sizeof(serv)); check->argv[2] = strdup(serv); - } else if (listener->addr.ss_family == AF_UNIX) { + } + else if (listener->addr.ss_family == AF_UNIX) { const struct sockaddr_un *un; un = (struct sockaddr_un *)&listener->addr; check->argv[1] = strdup(un->sun_path); check->argv[2] = strdup("NOT_USED"); - } else { + } + else { goto err; }