PDF (US Ltr) - 420.5Kb
PDF (A4) - 419.3Kb
使用 mysql_declare_client_plugin()
和 mysql_end_client_plugin
宏声明客户端插件描述符(参见 第 4.4.2.3 节,“客户端插件描述符”)。对于 auth_simple
插件,描述符如下所示
mysql_declare_client_plugin(AUTHENTICATION)
"auth_simple", /* plugin name */
"Author Name", /* author */
"Any-password authentication plugin", /* description */
{1,0,0}, /* version = 1.0.0 */
"GPL", /* license type */
NULL, /* for internal use */
NULL, /* no init function */
NULL, /* no deinit function */
NULL, /* no option-handling function */
auth_simple_client /* main function */
mysql_end_client_plugin;
从插件名称到选项处理函数的描述符成员对于所有客户端插件类型都是通用的。(有关说明,请参阅 第 4.4.2.3 节,“客户端插件描述符”。)在通用成员之后,描述符还有一个特定于身份验证插件的成员。这是 “main” 函数,它处理与服务器的通信。该函数接受两个参数,分别表示 I/O 结构和连接处理程序。对于我们的简单任意密码插件,main 函数除了将用户提供的密码写入服务器之外什么也不做
static int auth_simple_client (MYSQL_PLUGIN_VIO *vio, MYSQL *mysql)
{
int res;
/* send password as null-terminated string as cleartext */
res= vio->write_packet(vio, (const unsigned char *) mysql->passwd,
strlen(mysql->passwd) + 1);
return res ? CR_ERROR : CR_OK;
}
main 函数应返回下表所示的错误代码之一。
CR_OK_HANDSHAKE_COMPLETE
表示客户端已成功完成其部分并已读取最后一个数据包。如果身份验证协议中的往返次数事先未知,并且插件必须读取另一个数据包以确定身份验证是否完成,则客户端插件可能会返回 CR_OK_HANDSHAKE_COMPLETE
。