MXS-1220: Implement JSON diagnostics entry point in autheticators

All autheticators now implement the JSON version of the diagnostics
function.
This commit is contained in:
Markus Mäkelä
2017-04-18 06:39:32 +03:00
committed by Markus Mäkelä
parent 5e679aa167
commit 4804c975ad
3 changed files with 21 additions and 22 deletions

View File

@ -115,10 +115,9 @@ int users_default_loadusers(SERV_LISTENER *port);
/** /**
* @brief Default authenticator diagnostic function * @brief Default authenticator diagnostic function
* *
* @param dcb DCB where data is printed
* @param port Port whose data is to be printed * @param port Port whose data is to be printed
*/ */
void users_default_diagnostic(DCB *dcb, SERV_LISTENER *port); json_t* users_default_diagnostic(SERV_LISTENER *port);
/** /**
* Print details of the users storage mechanism * Print details of the users storage mechanism

View File

@ -109,32 +109,28 @@ void usersPrint(const USERS *users)
hashtable_stats(users->data); hashtable_stats(users->data);
} }
void users_default_diagnostic(DCB *dcb, SERV_LISTENER *port) json_t* users_default_diagnostic(SERV_LISTENER *port)
{ {
json_t* rval = json_array();
if (port->users && port->users->data) if (port->users && port->users->data)
{ {
HASHITERATOR *iter = hashtable_iterator(port->users->data); HASHITERATOR *iter = hashtable_iterator(port->users->data);
if (iter) if (iter)
{ {
dcb_printf(dcb, "User names: "); char* user;
const char *sep = "";
void *user;
while ((user = hashtable_next(iter)) != NULL) while ((user = (char*)hashtable_next(iter)))
{ {
dcb_printf(dcb, "%s%s", sep, (char *)user); json_array_append(rval, json_string(user));
sep = ", ";
} }
dcb_printf(dcb, "\n");
hashtable_iterator_free(iter); hashtable_iterator_free(iter);
} }
} }
else
{ return rval;
dcb_printf(dcb, "Users table is empty\n");
}
} }
int users_default_loadusers(SERV_LISTENER *port) int users_default_loadusers(SERV_LISTENER *port)

View File

@ -58,7 +58,7 @@ static int mysql_auth_set_client_data(
MySQLProtocol *protocol, MySQLProtocol *protocol,
GWBUF *buffer); GWBUF *buffer);
void mysql_auth_diagnostic(DCB *dcb, SERV_LISTENER *port); json_t* mysql_auth_diagnostic(SERV_LISTENER *port);
int mysql_auth_reauthenticate(DCB *dcb, const char *user, int mysql_auth_reauthenticate(DCB *dcb, const char *user,
uint8_t *token, size_t token_len, uint8_t *token, size_t token_len,
@ -682,24 +682,28 @@ int mysql_auth_reauthenticate(DCB *dcb, const char *user,
int diag_cb(void *data, int columns, char **row, char **field_names) int diag_cb(void *data, int columns, char **row, char **field_names)
{ {
DCB *dcb = (DCB*)data; json_t* obj = json_object();
dcb_printf(dcb, "%s@%s ", row[0], row[1]); json_object_set_new(obj, "user", json_string(row[0]));
json_object_set_new(obj, "host", json_string(row[1]));
json_t* arr = (json_t*)data;
json_array_append(arr, obj);
return 0; return 0;
} }
void mysql_auth_diagnostic(DCB *dcb, SERV_LISTENER *port) json_t* mysql_auth_diagnostic(SERV_LISTENER *port)
{ {
dcb_printf(dcb, "User names: "); json_t* rval = json_array();
MYSQL_AUTH *instance = (MYSQL_AUTH*)port->auth_instance; MYSQL_AUTH *instance = (MYSQL_AUTH*)port->auth_instance;
char *err; char *err;
if (sqlite3_exec(instance->handle, "SELECT user, host FROM " MYSQLAUTH_USERS_TABLE_NAME, if (sqlite3_exec(instance->handle, "SELECT user, host FROM " MYSQLAUTH_USERS_TABLE_NAME,
diag_cb, dcb, &err) != SQLITE_OK) diag_cb, rval, &err) != SQLITE_OK)
{ {
dcb_printf(dcb, "Failed to print users: %s\n", err);
MXS_ERROR("Failed to print users: %s", err); MXS_ERROR("Failed to print users: %s", err);
sqlite3_free(err); sqlite3_free(err);
} }
dcb_printf(dcb, "\n");
return rval;
} }