Skip to content

Commit

Permalink
lib-ssl-iostream: openssl: Make verbose logging robust against i_debu…
Browse files Browse the repository at this point in the history
…g() writing to stream itself.

In dsync, i_debug() is overridden to write to the SSL stream itself through a
multiplexed data stream. So, during the i_debug() call all kinds of things can
happen to the persisted error string in the stream, which caused problems.
  • Loading branch information
stephanbosch authored and sirainen committed Jan 30, 2018
1 parent a68aaff commit df12456
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/lib-ssl-iostream/iostream-openssl.c
Expand Up @@ -12,14 +12,21 @@ static void openssl_iostream_free(struct ssl_iostream *ssl_io);

void openssl_iostream_set_error(struct ssl_iostream *ssl_io, const char *str)
{
char *new_str;

/* i_debug() may sometimes be overriden, making it write to this very
same SSL stream, in which case the provided str may be invalidated
before it is even used. Therefore, we duplicate it immediately. */
new_str = i_strdup(str);

if (ssl_io->verbose) {
/* This error should normally be logged by lib-ssl-iostream's
caller. But if verbose=TRUE, log it here as well to make
sure that the error is always logged. */
i_debug("%sSSL error: %s", ssl_io->log_prefix, str);
i_debug("%sSSL error: %s", ssl_io->log_prefix, new_str);
}
i_free(ssl_io->last_error);
ssl_io->last_error = i_strdup(str);
ssl_io->last_error = new_str;
}

static void openssl_info_callback(const SSL *ssl, int where, int ret)
Expand Down

0 comments on commit df12456

Please sign in to comment.