summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mysql/client_plugin.h20
-rw-r--r--libmysql/libmysql.def1
-rw-r--r--plugin/auth/dialog.c3
-rw-r--r--plugin/auth/test_plugin.c3
-rw-r--r--sql-common/client.c6
-rw-r--r--sql-common/client_plugin.c22
6 files changed, 54 insertions, 1 deletions
diff --git a/include/mysql/client_plugin.h b/include/mysql/client_plugin.h
index 9631b090b14..ddd3b64ca56 100644
--- a/include/mysql/client_plugin.h
+++ b/include/mysql/client_plugin.h
@@ -50,8 +50,11 @@
const char *author; \
const char *desc; \
unsigned int version[3]; \
+ const char *license; \
+ void *mysql_api; \
int (*init)(char *, size_t, int, va_list); \
- int (*deinit)();
+ int (*deinit)(); \
+ int (*options)(const char *option, const void *);
struct st_mysql_client_plugin
{
@@ -142,5 +145,20 @@ struct st_mysql_client_plugin *
mysql_client_register_plugin(struct st_mysql *mysql,
struct st_mysql_client_plugin *plugin);
+/**
+ set plugin options
+
+ Can be used to set extra options and affect behavior for a plugin.
+ This function may be called multiple times to set several options
+
+ @param plugin an st_mysql_client_plugin structure
+ @param option a string which specifies the option to set
+ @param value value for the option.
+
+ @retval 0 on success, 1 in case of failure
+**/
+int STDCALL mysql_plugin_options(struct st_mysql_client_plugin *plugin,
+ const char *option,
+ const void *value);
#endif
diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def
index ce85d2a4086..fc15fcf0884 100644
--- a/libmysql/libmysql.def
+++ b/libmysql/libmysql.def
@@ -104,3 +104,4 @@ EXPORTS
mysql_server_end
mysql_set_character_set
mysql_get_character_set_info
+ mysql_plugin_options
diff --git a/plugin/auth/dialog.c b/plugin/auth/dialog.c
index 61cc11e23e2..b7c65b3d601 100644
--- a/plugin/auth/dialog.c
+++ b/plugin/auth/dialog.c
@@ -319,8 +319,11 @@ mysql_declare_client_plugin(AUTHENTICATION)
"Sergei Golubchik",
"Dialog Client Authentication Plugin",
{0,1,0},
+ "GPL",
+ NULL,
init_dialog,
NULL,
+ NULL,
perform_dialog
mysql_end_client_plugin;
diff --git a/plugin/auth/test_plugin.c b/plugin/auth/test_plugin.c
index 1fa1ad4bf61..caea7795833 100644
--- a/plugin/auth/test_plugin.c
+++ b/plugin/auth/test_plugin.c
@@ -196,6 +196,9 @@ mysql_declare_client_plugin(AUTHENTICATION)
"Georgi Kodinov",
"Dialog Client Authentication Plugin",
{0,1,0},
+ "GPL",
+ NULL,
+ NULL,
NULL,
NULL,
test_plugin_client
diff --git a/sql-common/client.c b/sql-common/client.c
index 3897e44fdaf..0a30ef150e1 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -2283,6 +2283,9 @@ static auth_plugin_t native_password_client_plugin=
"R.J.Silk, Sergei Golubchik",
"Native MySQL authentication",
{1, 0, 0},
+ "GPL",
+ NULL,
+ NULL,
NULL,
NULL,
native_password_auth_client
@@ -2296,6 +2299,9 @@ static auth_plugin_t old_password_client_plugin=
"R.J.Silk, Sergei Golubchik",
"Old MySQL-3.23 authentication",
{1, 0, 0},
+ "GPL",
+ NULL,
+ NULL,
NULL,
NULL,
old_password_auth_client
diff --git a/sql-common/client_plugin.c b/sql-common/client_plugin.c
index 9526f5fdc4b..858eb492d7a 100644
--- a/sql-common/client_plugin.c
+++ b/sql-common/client_plugin.c
@@ -322,6 +322,9 @@ mysql_load_plugin_v(MYSQL *mysql, const char *name, int type,
char dlpath[FN_REFLEN+1];
void *sym, *dlhandle;
struct st_mysql_client_plugin *plugin;
+#ifdef WIN32
+ char win_errormsg[2048];
+#endif
DBUG_ENTER ("mysql_load_plugin_v");
DBUG_PRINT ("entry", ("name=%s type=%d int argc=%d", name, type, argc));
@@ -359,8 +362,15 @@ mysql_load_plugin_v(MYSQL *mysql, const char *name, int type,
if ((dlhandle= dlopen(dlpath, RTLD_NOW)))
goto have_plugin;
#endif
+
DBUG_PRINT ("info", ("failed to dlopen"));
+#ifdef WIN32
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
+ 0, GetLastError(), 0, win_errormsg, 2048, NULL);
+ errormsg= win_errormsg;
+#else
errmsg= dlerror();
+#endif
goto err;
}
@@ -451,3 +461,15 @@ mysql_client_find_plugin(MYSQL *mysql, const char *name, int type)
DBUG_RETURN (p);
}
+
+/* see <mysql/client_plugin.h> for a full description */
+int STDCALL mysql_plugin_options(struct st_mysql_client_plugin *plugin,
+ const char *option,
+ const void *value)
+{
+ DBUG_ENTER("mysql_plugin_options");
+ /* does the plugin support options call? */
+ if (!plugin || !plugin->options)
+ DBUG_RETURN(1);
+ DBUG_RETURN(plugin->options(option, value));
+}