Skip to content

Commit a36e6a7

Browse files
committed
WL#15130 Socket-level TLS patch mysql#5: Make m_socket private in Session
In class SocketServer::Session, make m_socket private, so the compiler catches all use of m_socket in the two derived Session classes in mgmd and cpcd. Adapt these two classes to use NdbSocket. Change-Id: I1cc0925981320669ce433c9bd72105078ce1e39a
1 parent 3751d0c commit a36e6a7

File tree

6 files changed

+45
-38
lines changed

6 files changed

+45
-38
lines changed

storage/ndb/include/util/SocketServer.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ class SocketServer {
5252
friend void* sessionThread_C(void*);
5353
Session(ndb_socket_t sock) :
5454
m_stop(false),
55-
m_socket(sock),
5655
m_refCount(0),
56+
m_socket(sock),
5757
m_thread_stopped(false)
5858
{
5959
DBUG_ENTER("SocketServer::Session");
@@ -62,9 +62,9 @@ class SocketServer {
6262
DBUG_VOID_RETURN;
6363
}
6464
bool m_stop; // Has the session been ordered to stop?
65-
ndb_socket_t m_socket;
6665
unsigned m_refCount;
6766
private:
67+
ndb_socket_t m_socket;
6868
bool m_thread_stopped; // Has the session thread stopped?
6969
};
7070

storage/ndb/src/cw/cpcd/APIService.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,9 @@ const ParserRow<CPCDAPISession> commands[] = {
128128
CPCD_END()};
129129
CPCDAPISession::CPCDAPISession(ndb_socket_t sock, CPCD &cpcd)
130130
: SocketServer::Session(sock), m_cpcd(cpcd), m_protocol_version(1) {
131-
m_input = new SocketInputStream(sock, 7 * 24 * 60 * 60000);
132-
m_output = new SocketOutputStream(sock);
131+
m_secure_socket.init_from_new(sock);
132+
m_input = new SecureSocketInputStream(m_secure_socket, 7 * 24 * 60 * 60000);
133+
m_output = new SecureSocketOutputStream(m_secure_socket);
133134
m_parser = new Parser<CPCDAPISession>(commands, *m_input);
134135
}
135136

@@ -170,8 +171,8 @@ void CPCDAPISession::runSession() {
170171
break;
171172
}
172173
}
173-
ndb_socket_close(m_socket);
174-
ndb_socket_invalidate(&m_socket);
174+
m_secure_socket.close();
175+
m_secure_socket.invalidate();
175176
}
176177

177178
void CPCDAPISession::stopSession() {

storage/ndb/src/cw/cpcd/APIService.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@
2828
#include <InputStream.hpp>
2929
#include <Parser.hpp>
3030
#include <SocketServer.hpp>
31+
#include "util/NdbSocket.h"
3132

3233
class CPCD;
3334

3435
class CPCDAPISession : public SocketServer::Session {
3536
typedef Parser<CPCDAPISession> Parser_t;
3637

3738
class CPCD &m_cpcd;
39+
NdbSocket m_secure_socket;
3840
InputStream *m_input;
3941
OutputStream *m_output;
4042
Parser_t *m_parser;

storage/ndb/src/mgmsrv/Services.cpp

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424

2525
#include <ndb_global.h>
2626

27-
#include <uucode.h>
28-
#include <socket_io.h>
2927
#include <util/version.h>
3028
#include <mgmapi.h>
3129
#include <EventLogger.hpp>
@@ -350,13 +348,17 @@ extern int g_errorInsert;
350348

351349
#define SLEEP_ERROR_INSERTED(x) if(ERROR_INSERTED(x)){NdbSleep_SecSleep(10);}
352350

353-
MgmApiSession::MgmApiSession(class MgmtSrvr & mgm, ndb_socket_t sock, Uint64 session_id)
354-
: SocketServer::Session(sock), m_mgmsrv(mgm),
355-
m_session_id(session_id), m_name("unknown:0")
351+
MgmApiSession::MgmApiSession(class MgmtSrvr & mgm, ndb_socket_t sock,
352+
Uint64 session_id)
353+
: SocketServer::Session(sock),
354+
m_mgmsrv(mgm),
355+
m_session_id(session_id),
356+
m_name("unknown:0")
356357
{
357358
DBUG_ENTER("MgmApiSession::MgmApiSession");
358-
m_input = new SocketInputStream(sock, SOCKET_TIMEOUT);
359-
m_output = new BufferedSockOutputStream(sock, SOCKET_TIMEOUT);
359+
m_secure_socket.init_from_new(sock);
360+
m_input = new SecureSocketInputStream(m_secure_socket, SOCKET_TIMEOUT);
361+
m_output = new BufferedSecureOutputStream(m_secure_socket, SOCKET_TIMEOUT);
360362
m_parser = new Parser_t(commands, *m_input);
361363
m_stopSelf= 0;
362364
m_ctx= NULL;
@@ -392,10 +394,10 @@ MgmApiSession::~MgmApiSession()
392394
delete m_output;
393395
if (m_parser)
394396
delete m_parser;
395-
if(ndb_socket_valid(m_socket))
397+
if(m_secure_socket.is_valid())
396398
{
397-
ndb_socket_close(m_socket);
398-
ndb_socket_invalidate(&m_socket);
399+
m_secure_socket.close();
400+
m_secure_socket.invalidate();
399401
}
400402
if(m_stopSelf < 0)
401403
g_RestartServer= true;
@@ -487,10 +489,10 @@ MgmApiSession::runSession()
487489

488490
NdbMutex_Lock(m_mutex);
489491
m_ctx= NULL;
490-
if(ndb_socket_valid(m_socket))
492+
if(m_secure_socket.is_valid())
491493
{
492-
ndb_socket_close(m_socket);
493-
ndb_socket_invalidate(&m_socket);
494+
m_secure_socket.close();
495+
m_secure_socket.invalidate();
494496
}
495497
NdbMutex_Unlock(m_mutex);
496498

@@ -555,7 +557,7 @@ MgmApiSession::get_nodeid(Parser_t::Context &,
555557

556558
struct sockaddr_in6 client_addr;
557559
{
558-
int r = ndb_getpeername(m_socket, &client_addr);
560+
int r = ndb_getpeername(m_secure_socket.ndb_socket(), &client_addr);
559561
if (r != 0 )
560562
{
561563
m_output->println("result: getpeername() failed, err= %d",
@@ -1792,7 +1794,7 @@ MgmApiSession::listen_event(Parser<MgmApiSession>::Context & ctx,
17921794

17931795
Ndb_mgmd_event_service::Event_listener le;
17941796
le.m_parsable = parsable;
1795-
le.m_socket = m_socket;
1797+
le.m_socket = m_secure_socket.ndb_socket();
17961798

17971799
Vector<BaseString> list;
17981800
param.trim();
@@ -1858,7 +1860,7 @@ MgmApiSession::listen_event(Parser<MgmApiSession>::Context & ctx,
18581860
{
18591861
m_mgmsrv.m_event_listner.add_listener(le);
18601862
m_stop = true;
1861-
ndb_socket_invalidate(&m_socket);
1863+
m_secure_socket.invalidate();
18621864
}
18631865
}
18641866

@@ -1892,16 +1894,17 @@ MgmApiSession::transporter_connect(Parser_t::Context &ctx,
18921894
{
18931895
bool close_with_reset = true;
18941896
BaseString errormsg;
1895-
if (!m_mgmsrv.transporter_connect(m_socket, errormsg, close_with_reset))
1897+
if (!m_mgmsrv.transporter_connect(m_secure_socket.ndb_socket(),
1898+
errormsg, close_with_reset))
18961899
{
18971900
// Connection not allowed or failed
18981901
g_eventLogger->warning("Failed to convert connection "
18991902
"from '%s' to transporter: %s",
19001903
name(),
19011904
errormsg.c_str());
19021905
// Close the socket to indicate failure to client
1903-
ndb_socket_close_with_reset(m_socket, close_with_reset);
1904-
ndb_socket_invalidate(&m_socket); // Already closed
1906+
m_secure_socket.close_with_reset(close_with_reset);
1907+
m_secure_socket.invalidate(); // Already closed
19051908
}
19061909
else
19071910
{
@@ -1911,7 +1914,7 @@ MgmApiSession::transporter_connect(Parser_t::Context &ctx,
19111914
but don't close the socket, it's been taken over
19121915
by the transporter
19131916
*/
1914-
ndb_socket_invalidate(&m_socket); // so nobody closes it
1917+
m_secure_socket.invalidate(); // so nobody closes it
19151918
}
19161919

19171920
m_stop= true; // Stop the session
@@ -2217,10 +2220,9 @@ void MgmApiSession::setConfig(Parser_t::Context &ctx,
22172220
int r = 0;
22182221
size_t start = 0;
22192222
do {
2220-
if((r= read_socket(m_socket,
2221-
SOCKET_TIMEOUT,
2222-
&buf64[start],
2223-
(int)(len64-start))) < 1)
2223+
if((r= m_secure_socket.read(SOCKET_TIMEOUT,
2224+
&buf64[start],
2225+
(int)(len64-start))) < 1)
22242226
{
22252227
delete[] buf64;
22262228
result.assfmt("read_socket failed, errno: %d", errno);

storage/ndb/src/mgmsrv/Services.hpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@
2525
#ifndef MGMAPI_SERVICE_HPP
2626
#define MGMAPI_SERVICE_HPP
2727

28-
#include <SocketServer.hpp>
29-
#include <NdbSleep.h>
30-
#include <Parser.hpp>
31-
#include <OutputStream.hpp>
32-
#include <InputStream.hpp>
28+
#include "util/SocketServer.hpp"
29+
#include "NdbSleep.h"
30+
#include "Parser.hpp"
31+
#include "util/OutputStream.hpp"
32+
#include "util/InputStream.hpp"
33+
#include "util/NdbSocket.h"
3334

3435
#include "MgmtSrvr.hpp"
3536

@@ -40,6 +41,7 @@ class MgmApiSession : public SocketServer::Session
4041
private:
4142
typedef Parser<MgmApiSession> Parser_t;
4243

44+
NdbSocket m_secure_socket;
4345
class MgmtSrvr & m_mgmsrv;
4446
InputStream *m_input;
4547
OutputStream *m_output;

storage/ndb/test/include/SocketInputStream2.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
#include "portlib/ndb_socket.h"
2929
#include <BaseString.hpp>
3030
#include <UtilBuffer.hpp>
31-
#include "util/SecureSocket.h"
31+
#include "util/NdbSocket.h"
3232

3333
class SocketInputStream2 {
34-
SecureSocket m_socket;
34+
NdbSocket m_socket;
3535
unsigned m_read_timeout;
3636
UtilBuffer m_buffer;
3737
size_t m_buffer_read_pos;
@@ -44,7 +44,7 @@ class SocketInputStream2 {
4444
public:
4545
SocketInputStream2(ndb_socket_t socket,
4646
unsigned read_timeout = 60) :
47-
m_socket(socket, SecureSocket::From::Existing),
47+
m_socket(socket, NdbSocket::From::Existing),
4848
m_read_timeout(read_timeout),
4949
m_buffer_read_pos(0) {}
5050

0 commit comments

Comments
 (0)