Skip to content

Commit 8e63be1

Browse files
committed
WL#15524 Patch #5 Command authorization in MGM server
Part of WL#15524 Secure NDB Management Protocol using TLS Run an authorization check prior to every MGM command on the server side. The authorization check takes three inputs: a current user auth level associated with the session, a per-command auth level, and a per-server auth level. It returns an integer result code. This is implemented for the whole API by providing a specialization of Parser<T>::run() for MgmApiSession as T. The specialized method adds a call to the authorization check before running whatever function is registered to handle the current command. Per-command auth flags are stored as a ParserRow user_value. The per-session auth level is stored in MgmApiSession, and the per-server auth flags are in MgmtSrvr. Some unused macros are removed; the grammar does not make any use of aliases, so the new parser routine does not support them. Change-Id: Id8f35693ee67f559a5e30ec6005d62473f4e8492
1 parent f37c3ae commit 8e63be1

File tree

3 files changed

+230
-91
lines changed

3 files changed

+230
-91
lines changed

storage/ndb/src/mgmsrv/MgmAuth.hpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
Copyright (c) 2023, Oracle and/or its affiliates.
3+
4+
This program is free software; you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License, version 2.0,
6+
as published by the Free Software Foundation.
7+
8+
This program is also distributed with certain software (including
9+
but not limited to OpenSSL) that is licensed under separate terms,
10+
as designated in a particular file or component or in included license
11+
documentation. The authors of MySQL hereby grant you an additional
12+
permission to link the program and your derivative works with the
13+
separately licensed software that they have included with MySQL.
14+
15+
This program is distributed in the hope that it will be useful,
16+
but WITHOUT ANY WARRANTY; without even the implied warranty of
17+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+
GNU General Public License, version 2.0, for more details.
19+
20+
You should have received a copy of the GNU General Public License
21+
along with this program; if not, write to the Free Software
22+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23+
*/
24+
25+
#ifndef MGM_AUTH_HPP
26+
#define MGM_AUTH_HPP
27+
28+
class MgmAuth {
29+
public:
30+
31+
typedef unsigned short level;
32+
33+
enum {
34+
serverRequiresTls = 0x001, // Server requires TLS past bootstrap stage
35+
clientHasTls = 0x010, // Client session is using TLS
36+
clientHasCert = 0x020, // Client session is authenticated via cert
37+
cmdIsBootstrap = 0x100, // Command is used to bootstrap a client
38+
};
39+
40+
enum result {
41+
Ok,
42+
ServerRequiresTls,
43+
END_ERRORS
44+
};
45+
46+
static int checkAuth(int cmdAuthLevel, int serverOpt, int sessionAuthLevel);
47+
48+
static const char * message(int code) {
49+
if(code >= 0 && code < result::END_ERRORS) return _message[code];
50+
return "(MgmAuth unexpected error code)";
51+
}
52+
53+
private:
54+
static constexpr const char * _message[result::END_ERRORS] =
55+
{
56+
"(no error)",
57+
"Requires TLS",
58+
};
59+
};
60+
61+
#endif

0 commit comments

Comments
 (0)