BUG/MINOR: extcheck: add missing checks on extchk_setenv()
authorWilly Tarreau <w@1wt.eu>
Sat, 24 Oct 2020 11:07:39 +0000 (13:07 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 3 Nov 2020 15:13:28 +0000 (16:13 +0100)
Issue #910 reports that we fail to check a few extchk_setenv() in the
child process. These are mostly harmless, but instead of counting on
the external check script to fail the dirty way, better fail cleanly
when detecting the failure.

This could probably be backported to all stable branches.

(cherry picked from commit b3250a268b66ec686142f01ef04bef9e3db58532)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit f1c1481296da08a3ac7d4dcbd8ec7e035b89fbf8)
[cf: changes applied in src/checks.c because src/extcheck.c does not exist]
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/checks.c

index 300f714..78a92d0 100644 (file)
@@ -2078,20 +2078,21 @@ static int connect_proc_chk(struct task *t)
                environ = check->envp;
 
                /* 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)));
+               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]);
+               EXTCHK_SETENV(check, EXTCHK_HAPROXY_SERVER_ADDR, check->argv[3], fail);
 
                *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_PORT, check->argv[4]);
+               EXTCHK_SETENV(check, EXTCHK_HAPROXY_SERVER_PORT, check->argv[4], fail);
 
                haproxy_unblock_signals();
                execvp(px->check_command, check->argv);
                ha_alert("Failed to exec process for external health check: %s. Aborting.\n",
                         strerror(errno));
+       fail:
                exit(-1);
        }