From 06c5da7b1728609f3d05610cfaf09a74c2dea4bc Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Tue, 9 Jun 2015 02:56:55 +0300 Subject: [PATCH] Minor fix to SSL authentication. --- server/core/dcb.c | 19 +++++++------------ server/modules/protocol/mysql_client.c | 13 +++++++++++++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index cc8d77259..cfee65371 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1055,7 +1055,7 @@ int dcb_read_SSL( LOGIF(LD, (skygw_log_write( LOGFILE_DEBUG, - "%lu [dcb_read] Read %d bytes from dcb %p in state %s " + "%lu [dcb_read_SSL] Read %d bytes from dcb %p in state %s " "fd %d.", pthread_self(), n, @@ -2800,7 +2800,7 @@ int dcb_create_SSL(DCB* dcb) if((dcb->ssl = SSL_new(dcb->service->ctx)) == NULL) { - skygw_log_write(LE,"Error: Failed to initialize SSL connection."); + skygw_log_write(LE,"Error: Failed to initialize SSL for connection."); return -1; } @@ -2828,16 +2828,10 @@ int dcb_accept_SSL(DCB* dcb) int rval = 0,ssl_rval,errnum = 0,fd,b = 0; char errbuf[140]; fd = dcb->fd; - ioctl(fd,FIONREAD,&b); -#ifdef SS_DEBUG - skygw_log_write(LD,"[dcb_accept_SSL] fd %d bytes: %d",fd,b); -#endif - while(b > 0 && rval != -1) + + do { ssl_rval = SSL_accept(dcb->ssl); -#ifdef SS_DEBUG - skygw_log_write(LD,"[dcb_accept_SSL] SSL_accept returned %d.",ssl_rval); -#endif switch(ssl_rval) { case 0: @@ -2889,9 +2883,10 @@ int dcb_accept_SSL(DCB* dcb) ioctl(fd,FIONREAD,&b); #ifdef SS_DEBUG skygw_log_write_flush(LD,"[dcb_accept_SSL] fd %d: %d bytes",fd,b); - skygw_log_write_flush(LD,"[dcb_accept_SSL] SSL error: %d",errnum); + skygw_log_write(LD,"[dcb_accept_SSL] SSL_accept returned %d, SSL error: %d",ssl_rval,errnum); #endif - } + }while(b > 0 && rval != -1); + return rval; } diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index fcbb1958e..da5f04732 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -668,7 +668,18 @@ int gw_read_client_event( return 0; break; case 1: + { + int b = 0; + ioctl(dcb->fd,FIONREAD,&b); + if(b == 0) + { + skygw_log_write(LD, + "[gw_read_client_event] No data in socket after SSL auth"); + return 0; + } break; + } + case -1: return 1; break; @@ -1897,7 +1908,9 @@ int do_ssl_accept(MySQLProtocol* protocol) if(dcb->ssl == NULL) { if(dcb_create_SSL(dcb) != 0) + { return -1; + } } rval = dcb_accept_SSL(dcb);