]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-program-client: program-client-remote - Add proper error and debug logging for...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Mon, 3 May 2021 23:46:22 +0000 (01:46 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 5 May 2021 18:26:46 +0000 (18:26 +0000)
src/lib-program-client/program-client-remote.c

index 24d6f7009ad1f85c7ee7a9d796ec623909fa881f..e28d8e05b30797ee51c521c1369077c3536b2774 100644 (file)
@@ -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;
        }