MySQL  8.0.17
Source Code Documentation
test_plugin.cc File Reference

Test driver for the mysql-test/t/plugin_auth.test. More...

#include <mysql/client_plugin.h>
#include <mysql/components/my_service.h>
#include <mysql/components/services/log_builtins.h>
#include <mysql/plugin_auth.h>
#include <mysqld_error.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
#include "my_compiler.h"

Macros

#define LOG_COMPONENT_TAG   "test_plugin_server"
 
#define ORDINARY_QUESTION   "\2"
 first byte of the question string is the question "type". More...
 
#define LAST_QUESTION   "\3"
 
#define LAST_PASSWORD   "\4"
 
#define PASSWORD_QUESTION   "\5"
 

Functions

static int test_plugin_init (MYSQL_PLUGIN plugin_info)
 
static int auth_test_plugin (MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
 dialog test plugin mimicking the ordinary auth mechanism. More...
 
static int generate_auth_string_hash (char *outbuf, unsigned int *buflen, const char *inbuf, unsigned int inbuflen)
 
static int validate_auth_string_hash (char *const inbuf, unsigned int buflen)
 
static int set_salt (const char *password, unsigned int password_len, unsigned char *salt, unsigned char *salt_len)
 
static int auth_cleartext_plugin (MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
 dialog test plugin mimicking the ordinary auth mechanism. More...
 
 mysql_declare_plugin (test_plugin)
 
static int test_plugin_client (MYSQL_PLUGIN_VIO *vio, MYSQL *mysql)
 The main function of the test plugin. More...
 
 mysql_declare_client_plugin (AUTHENTICATION) "auth_test_plugin"
 

Variables

static const mysql_service_registry_treg_srv = nullptr
 
Initialize parameters required for error logging More...
 
const mysql_service_log_builtins_tlog_bi = nullptr
 accessor built-ins More...
 
const mysql_service_log_builtins_string_tlog_bs = nullptr
 string built-ins More...
 
static MYSQL_PLUGIN plugin_info_ptr
 
Handle assigned when loading the plugin. More...
 
static struct st_mysql_auth auth_test_handler
 
static struct st_mysql_auth auth_cleartext_handler
 
Georgi Kodinov
 
Georgi Dialog Client Authentication Plugin
 
Georgi Dialog Client Authentication GPL
 
Georgi Dialog Client Authentication NULL
 
Georgi Dialog Client Authentication test_plugin_client
 
Georgi Dialog Client Authentication NULL mysql_end_client_plugin
 

Detailed Description

Test driver for the mysql-test/t/plugin_auth.test.

This is a set of test plugins used to test the external authentication implementation. See the above test file for more details. This test plugin is based on the dialog plugin example.

Macro Definition Documentation

◆ LAST_PASSWORD

#define LAST_PASSWORD   "\4"

◆ LAST_QUESTION

#define LAST_QUESTION   "\3"

◆ LOG_COMPONENT_TAG

#define LOG_COMPONENT_TAG   "test_plugin_server"

◆ ORDINARY_QUESTION

#define ORDINARY_QUESTION   "\2"

first byte of the question string is the question "type".

It can be a "ordinary" or a "password" question. The last bit set marks a last question in the authentication exchange.

◆ PASSWORD_QUESTION

#define PASSWORD_QUESTION   "\5"

Function Documentation

◆ auth_cleartext_plugin()

static int auth_cleartext_plugin ( MYSQL_PLUGIN_VIO vio,
MYSQL_SERVER_AUTH_INFO info 
)
static

dialog test plugin mimicking the ordinary auth mechanism.

Used to test the clear text plugin API

◆ auth_test_plugin()

static int auth_test_plugin ( MYSQL_PLUGIN_VIO vio,
MYSQL_SERVER_AUTH_INFO info 
)
static

dialog test plugin mimicking the ordinary auth mechanism.

Used to test the auth plugin API

◆ generate_auth_string_hash()

static int generate_auth_string_hash ( char *  outbuf,
unsigned int *  buflen,
const char *  inbuf,
unsigned int  inbuflen 
)
static

◆ mysql_declare_client_plugin()

mysql_declare_client_plugin ( AUTHENTICATION  )

◆ mysql_declare_plugin()

mysql_declare_plugin ( test_plugin  )

◆ set_salt()

static int set_salt ( const char *  password,
unsigned int  password_len,
unsigned char *  salt,
unsigned char *  salt_len 
)
static

◆ test_plugin_client()

static int test_plugin_client ( MYSQL_PLUGIN_VIO vio,
MYSQL mysql 
)
static

The main function of the test plugin.

Reads the prompt, check if the handshake is done and if the prompt is a password request and returns the password. Otherwise return error.

Note
  1. this plugin shows how a client authentication plugin may read a MySQL protocol OK packet internally - which is important where a number of packets is not known in advance.
  2. the first byte of the prompt is special. it is not shown to the user, but signals whether it is the last question (prompt[0] & 1 == 1) or not last (prompt[0] & 1 == 0), and whether the input is a password (not echoed).
  3. the prompt is expected to be sent zero-terminated

◆ test_plugin_init()

static int test_plugin_init ( MYSQL_PLUGIN  plugin_info)
static

◆ validate_auth_string_hash()

static int validate_auth_string_hash ( char *const  inbuf,
unsigned int  buflen 
)
static

Variable Documentation

◆ auth_cleartext_handler

struct st_mysql_auth auth_cleartext_handler
static
Initial value:
= {
"mysql_clear_password",
Georgi Dialog Client Authentication NULL
Definition: test_plugin.cc:303
static int auth_cleartext_plugin(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
dialog test plugin mimicking the ordinary auth mechanism.
Definition: test_plugin.cc:161
#define MYSQL_AUTHENTICATION_INTERFACE_VERSION
Definition: plugin_auth.h:36
static int set_salt(const char *password, unsigned int password_len, unsigned char *salt, unsigned char *salt_len)
Definition: test_plugin.cc:139
static int validate_auth_string_hash(char *const inbuf, unsigned int buflen)
Definition: test_plugin.cc:133
static int generate_auth_string_hash(char *outbuf, unsigned int *buflen, const char *inbuf, unsigned int inbuflen)
Definition: test_plugin.cc:121
#define AUTH_FLAG_PRIVILEGED_USER_FOR_PASSWORD_CHANGE
Definition: plugin_auth.h:48

◆ auth_test_handler

struct st_mysql_auth auth_test_handler
static
Initial value:
= {
"auth_test_plugin",
static int auth_test_plugin(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
dialog test plugin mimicking the ordinary auth mechanism.
Definition: test_plugin.cc:80
Georgi Dialog Client Authentication NULL
Definition: test_plugin.cc:303
#define MYSQL_AUTHENTICATION_INTERFACE_VERSION
Definition: plugin_auth.h:36
static int set_salt(const char *password, unsigned int password_len, unsigned char *salt, unsigned char *salt_len)
Definition: test_plugin.cc:139
static int validate_auth_string_hash(char *const inbuf, unsigned int buflen)
Definition: test_plugin.cc:133
static int generate_auth_string_hash(char *outbuf, unsigned int *buflen, const char *inbuf, unsigned int inbuflen)
Definition: test_plugin.cc:121
#define AUTH_FLAG_PRIVILEGED_USER_FOR_PASSWORD_CHANGE
Definition: plugin_auth.h:48

◆ GPL

Georgi Dialog Client Authentication GPL

◆ Kodinov

Georgi Kodinov

◆ log_bi

const mysql_service_log_builtins_t* log_bi = nullptr

accessor built-ins

◆ log_bs

const mysql_service_log_builtins_string_t* log_bs = nullptr

string built-ins

◆ mysql_end_client_plugin

Georgi Dialog Client Authentication NULL mysql_end_client_plugin

◆ NULL

Georgi Dialog Client Authentication NULL

◆ Plugin

Georgi Dialog Client Authentication Plugin

◆ plugin_info_ptr

MYSQL_PLUGIN plugin_info_ptr
static


Handle assigned when loading the plugin.

Used with the error reporting functions.

◆ reg_srv

const mysql_service_registry_t* reg_srv = nullptr
static


Initialize parameters required for error logging

◆ test_plugin_client

Georgi Dialog Client Authentication test_plugin_client