4.4.9.2编写客户端认证插件

类声明客户端插件描述符mysql_declare_client_plugin ()而且mysql_end_client_plugin宏(见第4.4.2.3节“客户端插件描述符”).为auth_simple插件,描述符看起来像这样:

mysql_declare_client_plugin(身份验证)"auth_simple", /*插件名*/ "作者名",/*作者*/ "任意密码鉴权插件",/*描述*/{1,0,0},/*版本= 1.0.0 */ "GPL", /* license类型*/ NULL, /*内部使用*/ NULL, /*无初始化函数*/ NULL, /*无撤销函数*/ NULL, /*无选项处理函数*/ auth_simple_client /*主函数*/ mysql_end_client_plugin;

从插件名称到选项处理函数的描述符成员对于所有客户端插件类型都是通用的。(有关描述,请参见第4.4.2.3节“客户端插件描述符”)。在公共成员之后,描述符还有一个特定于身份验证插件的额外成员。这是主要函数,该函数处理与服务器的通信。该函数接受两个参数,分别表示一个I/O结构和一个连接处理程序。对于我们简单的any-password插件,main函数什么都不做,只是将用户提供的密码写入服务器:

静态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);返回res ?Cr_error: cr_ok;}

main函数应该返回下表中所示的错误代码之一。

错误代码 意义
CR_OK 成功
CR_OK_HANDSHAKE_COMPLETE 成功,客户完成
CR_ERROR 错误

CR_OK_HANDSHAKE_COMPLETE表示客户端已经成功完成了它的工作,并且已经读取了最后一个包。客户端插件可能会返回CR_OK_HANDSHAKE_COMPLETE如果事先不知道认证协议中的往返次数,插件必须读取另一个包来确定认证是否完成。


下载本手册
PDF(美国Ltr)- 408.0 kb
PDF (A4)- 406.7 kb
HTML下载(TGZ)- 93.1 kb
HTML下载(Zip)- 101.2 kb