|
|
- From 1f96a87c4e1412ccdc6cfe81bfd6f20a1782886a Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Cyril=20Bont=C3=A9?= <cyril.bonte@free.fr>
- Date: Sat, 15 Nov 2014 22:41:27 +0100
- Subject: [PATCH 4/6] BUG/MEDIUM: checks: fix conflicts between agent checks
- and ssl healthchecks
-
- Lasse Birnbaum Jensen reported an issue when agent checks are used at the same
- time as standard healthchecks when SSL is enabled on the server side.
-
- The symptom is that agent checks try to communicate in SSL while it should
- manage raw data. This happens because the transport layer is shared between all
- kind of checks.
-
- To fix the issue, the transport layer is now stored in each check type,
- allowing to use SSL healthchecks when required, while an agent check should
- always use the raw_sock implementation.
-
- The fix must be backported to 1.5.
- (cherry picked from commit 9ce1311ebc834e20addc7a8392c0fc4e4ad687b7)
- ---
- include/types/checks.h | 3 ++-
- include/types/server.h | 1 -
- src/checks.c | 2 +-
- src/server.c | 2 +-
- src/ssl_sock.c | 2 +-
- 5 files changed, 5 insertions(+), 5 deletions(-)
-
- diff --git a/include/types/checks.h b/include/types/checks.h
- index a50043b..42b7b07 100644
- --- a/include/types/checks.h
- +++ b/include/types/checks.h
- @@ -125,6 +125,7 @@ enum {
- };
-
- struct check {
- + struct xprt_ops *xprt; /* transport layer operations for health checks */
- struct connection *conn; /* connection state for health checks */
- unsigned short port; /* the port to use for the health checks */
- struct buffer *bi, *bo; /* input and output buffers to send/recv check */
- @@ -132,7 +133,7 @@ struct check {
- struct timeval start; /* last health check start time */
- long duration; /* time in ms took to finish last health check */
- short status, code; /* check result, check code */
- - char desc[HCHK_DESC_LEN]; /* health check descritpion */
- + char desc[HCHK_DESC_LEN]; /* health check description */
- int use_ssl; /* use SSL for health checks */
- int send_proxy; /* send a PROXY protocol header with checks */
- struct tcpcheck_rule *current_step; /* current step when using tcpcheck */
- diff --git a/include/types/server.h b/include/types/server.h
- index 313f58d..c419b40 100644
- --- a/include/types/server.h
- +++ b/include/types/server.h
- @@ -194,7 +194,6 @@ struct server {
-
- struct { /* configuration used by health-check and agent-check */
- struct protocol *proto; /* server address protocol for health checks */
- - struct xprt_ops *xprt; /* transport layer operations for health checks */
- struct sockaddr_storage addr; /* the address to check, if different from <addr> */
- } check_common;
-
- diff --git a/src/checks.c b/src/checks.c
- index 5318f35..84bf0e5 100644
- --- a/src/checks.c
- +++ b/src/checks.c
- @@ -1413,7 +1413,7 @@ static int connect_chk(struct task *t)
-
- /* prepare a new connection */
- conn_init(conn);
- - conn_prepare(conn, s->check_common.proto, s->check_common.xprt);
- + conn_prepare(conn, s->check_common.proto, check->xprt);
- conn_attach(conn, check, &check_conn_cb);
- conn->target = &s->obj_type;
-
- diff --git a/src/server.c b/src/server.c
- index fdb63cc..94a31b6 100644
- --- a/src/server.c
- +++ b/src/server.c
- @@ -929,7 +929,7 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
-
- newsrv->addr = *sk;
- newsrv->proto = newsrv->check_common.proto = protocol_by_family(newsrv->addr.ss_family);
- - newsrv->xprt = newsrv->check_common.xprt = &raw_sock;
- + newsrv->xprt = newsrv->check.xprt = newsrv->agent.xprt = &raw_sock;
-
- if (!newsrv->proto) {
- Alert("parsing [%s:%d] : Unknown protocol family %d '%s'\n",
- diff --git a/src/ssl_sock.c b/src/ssl_sock.c
- index f50efe5..b73d6f9 100644
- --- a/src/ssl_sock.c
- +++ b/src/ssl_sock.c
- @@ -1812,7 +1812,7 @@ int ssl_sock_prepare_srv_ctx(struct server *srv, struct proxy *curproxy)
- if (srv->use_ssl)
- srv->xprt = &ssl_sock;
- if (srv->check.use_ssl)
- - srv->check_common.xprt = &ssl_sock;
- + srv->check.xprt = &ssl_sock;
-
- srv->ssl_ctx.ctx = SSL_CTX_new(SSLv23_client_method());
- if (!srv->ssl_ctx.ctx) {
- --
- 2.0.4
-
|