mysql_declare_client_plugin()
使用和
mysql_end_client_plugin
宏
声明客户端插件描述符
(参见第 4.4.2.3 节,“客户端插件描述符”)。对于
auth_simple
插件,描述符如下所示:
Press CTRL+C to copymysql_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 节,“客户端插件描述符”。)在公共成员之后,描述符还有一个特定于身份验证插件的附加成员。这是 “主要”功能,它处理与服务器的通信。该函数有两个参数,代表一个 I/O 结构和一个连接处理程序。对于我们简单的任意密码插件,main 函数除了将用户提供的密码写入服务器外什么都不做:
Press CTRL+C to copystatic 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; }
主函数应返回下表中显示的错误代码之一。
CR_OK_HANDSHAKE_COMPLETE
表示客户端已成功完成其部分并已读取最后一个数据包。CR_OK_HANDSHAKE_COMPLETE
如果事先不知道身份验证协议中的往返次数,则
客户端插件可能会返回
,并且插件必须读取另一个数据包以确定身份验证是否完成。