mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 15:17:01 +02:00
MINOR: extcheck: fill in the server's UNIX socket address when known
While it's often a pain to try to figure a UNIX socket address, the server ones are reliable and may be emitted in the check provided they are retrieved in time. We cannot rely on addr_to_str() because it only reports "unix" since it may be used to log client addresses or listener addresses (which are renamed). The address length was extended to 256 chars to deal with long paths as previously it was limited to INET6_ADDRSTRLEN+1. This addresses github issue #101. There's no point backporting this, external checks are almost never used.
This commit is contained in:
parent
c7edc9880a
commit
cef08c20c7
@ -56,7 +56,7 @@ struct extcheck_env {
|
||||
* such environment variables are not updatable. */
|
||||
#define EXTCHK_SIZE_ULONG 20 /* max string length for an unsigned long value */
|
||||
#define EXTCHK_SIZE_UINT 11 /* max string length for an unsigned int value */
|
||||
#define EXTCHK_SIZE_ADDR INET6_ADDRSTRLEN+1 /* max string length for an address */
|
||||
#define EXTCHK_SIZE_ADDR 256 /* max string length for an IPv4/IPv6/UNIX address */
|
||||
|
||||
/* external checks environment variables */
|
||||
enum {
|
||||
@ -415,12 +415,18 @@ static int connect_proc_chk(struct task *t)
|
||||
/* Update some environment variables and command args: curconn, server addr and server port */
|
||||
EXTCHK_SETENV(check, EXTCHK_HAPROXY_SERVER_CURCONN, ultoa_r(s->cur_sess, buf, sizeof(buf)), fail);
|
||||
|
||||
addr_to_str(&s->addr, check->argv[3], EXTCHK_SIZE_ADDR);
|
||||
EXTCHK_SETENV(check, EXTCHK_HAPROXY_SERVER_ADDR, check->argv[3], fail);
|
||||
if (s->addr.ss_family == AF_UNIX) {
|
||||
const struct sockaddr_un *un = (struct sockaddr_un *)&s->addr;
|
||||
strlcpy2(check->argv[3], un->sun_path, EXTCHK_SIZE_ADDR);
|
||||
memcpy(check->argv[4], "NOT_USED", 9);
|
||||
} else {
|
||||
addr_to_str(&s->addr, check->argv[3], EXTCHK_SIZE_ADDR);
|
||||
*check->argv[4] = 0; // just in case the address family changed
|
||||
if (s->addr.ss_family == AF_INET || s->addr.ss_family == AF_INET6)
|
||||
snprintf(check->argv[4], EXTCHK_SIZE_UINT, "%u", s->svc_port);
|
||||
}
|
||||
|
||||
*check->argv[4] = 0;
|
||||
if (s->addr.ss_family == AF_INET || s->addr.ss_family == AF_INET6)
|
||||
snprintf(check->argv[4], EXTCHK_SIZE_UINT, "%u", s->svc_port);
|
||||
EXTCHK_SETENV(check, EXTCHK_HAPROXY_SERVER_ADDR, check->argv[3], fail);
|
||||
EXTCHK_SETENV(check, EXTCHK_HAPROXY_SERVER_PORT, check->argv[4], fail);
|
||||
|
||||
haproxy_unblock_signals();
|
||||
|
Loading…
Reference in New Issue
Block a user