From 9809b78ed9259c56b4a1932e6d2967960a7fcc20 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 11 Dec 2013 21:40:11 +0100 Subject: [PATCH] BUG/MEDIUM: checks: agent doesn't get the response if server does not closes The agent refrains from reading the server's response until the server closes, but if the server waits for the client to close, the response is never read. Let's try to fetch a whole line before deciding to wait more. --- src/checks.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/checks.c b/src/checks.c index 3b4e917ac..4af3db726 100644 --- a/src/checks.c +++ b/src/checks.c @@ -1138,11 +1138,22 @@ static void event_srv_chk_r(struct connection *conn) const char *desc = "Unknown feedback string"; const char *down_cmd = NULL; int disabled; + char *p; - if (!done) - goto wait_more_data; + /* get a complete line first */ + p = check->bi->data; + while (*p && *p != '\n' && *p != '\r') + p++; - cut_crlf(check->bi->data); + if (!*p) { + if (!done) + goto wait_more_data; + + /* at least inform the admin that the agent is mis-behaving */ + set_server_check_status(check, check->status, "Ignoring incomplete line from agent"); + break; + } + *p = 0; /* * The agent may have been disabled after a check was