Merge pull request #702 from yossigo/report-connect-errors

SSL: Properly report SSL_connect() errors.
This commit is contained in:
Mark Nunberg 2019-08-27 07:10:25 -04:00 committed by GitHub
commit 2020f6f329
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

14
sslio.c
View File

@ -5,6 +5,9 @@
#ifdef HIREDIS_SSL #ifdef HIREDIS_SSL
#include <pthread.h> #include <pthread.h>
#include <errno.h> #include <errno.h>
#include <string.h>
#include <openssl/err.h>
void __redisSetError(redisContext *c, int type, const char *str); void __redisSetError(redisContext *c, int type, const char *str);
@ -147,6 +150,7 @@ int redisSslCreate(redisContext *c, const char *capath, const char *certpath,
SSL_set_connect_state(s->ssl); SSL_set_connect_state(s->ssl);
c->flags |= REDIS_SSL; c->flags |= REDIS_SSL;
ERR_clear_error();
int rv = SSL_connect(c->ssl->ssl); int rv = SSL_connect(c->ssl->ssl);
if (rv == 1) { if (rv == 1) {
return REDIS_OK; return REDIS_OK;
@ -159,7 +163,15 @@ int redisSslCreate(redisContext *c, const char *capath, const char *certpath,
} }
if (c->err == 0) { if (c->err == 0) {
__redisSetError(c, REDIS_ERR_IO, "SSL_connect() failed"); char err[512];
if (rv == SSL_ERROR_SYSCALL)
snprintf(err,sizeof(err)-1,"SSL_connect failed: %s",strerror(errno));
else {
unsigned long e = ERR_peek_last_error();
snprintf(err,sizeof(err)-1,"SSL_connect failed: %s",
ERR_reason_error_string(e));
}
__redisSetError(c, REDIS_ERR_IO, err);
} }
return REDIS_ERR; return REDIS_ERR;
} }