From: Stephan Bosch Date: Mon, 3 May 2021 23:46:22 +0000 (+0200) Subject: lib-program-client: program-client-remote - Add proper error and debug logging for... X-Git-Tag: 2.3.16~230 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ffc146325b686dd3ff83bd770643f5b8e218b2c;p=thirdparty%2Fdovecot%2Fcore.git lib-program-client: program-client-remote - Add proper error and debug logging for result code parsing. --- diff --git a/src/lib-program-client/program-client-remote.c b/src/lib-program-client/program-client-remote.c index 24d6f7009a..e28d8e05b3 100644 --- a/src/lib-program-client/program-client-remote.c +++ b/src/lib-program-client/program-client-remote.c @@ -53,19 +53,41 @@ program_client_istream_parse_result(struct program_client_istream *scstream, if (stream->buffer == NULL || pos < 2 || stream->buffer[pos - 1] != '\n') { + if (pos == 0) { + e_error(scstream->client->event, + "No result code received from remote"); + } else if (pos < 2) { + e_error(scstream->client->event, + "Received too short result code from remote"); + } else { + e_error(scstream->client->event, + "Missing LF in result code"); + } scstream->client->exit_code = PROGRAM_CLIENT_EXIT_INTERNAL_FAILURE; return; } - switch (stream->buffer[pos - 2]) { + unsigned char rcode = stream->buffer[pos - 2]; + switch (rcode) { case '+': + e_debug(scstream->client->event, + "Received '+' result code from remote"); scstream->client->exit_code = PROGRAM_CLIENT_EXIT_SUCCESS; break; case '-': + e_debug(scstream->client->event, + "Received '-' result code from remote"); scstream->client->exit_code = PROGRAM_CLIENT_EXIT_FAILURE; break; default: + if (rcode >= 0x20 && rcode < 0x7f) { + e_error(scstream->client->event, + "Unexpected result code '%c'", rcode); + } else { + e_error(scstream->client->event, + "Unexpected result code 0x%02x", rcode); + } scstream->client->exit_code = PROGRAM_CLIENT_EXIT_INTERNAL_FAILURE; }