summaryrefslogtreecommitdiff
path: root/sql-common/my_user.c
diff options
context:
space:
mode:
authorunknown <anozdrin@mysql.com>2006-01-11 02:07:40 +0300
committerunknown <anozdrin@mysql.com>2006-01-11 02:07:40 +0300
commitd4d29edb836c697d744bb75496b58b76554fcb68 (patch)
tree2d2fbf7237a87334eb708a2f4af55c8b443046df /sql-common/my_user.c
parentffc206d9be17b67f1daed509e5939c63519960f0 (diff)
downloadmariadb-git-d4d29edb836c697d744bb75496b58b76554fcb68.tar.gz
Fix for BUG#15110: mysqldump --triggers: does not include DEFINER clause
There are two main idea of this fix: - introduce a common function for server and client to split user value (<user name>@<host name>) into user name and host name parts; - dump DEFINER clause in correct format in mysqldump. BitKeeper/etc/ignore: added client/my_user.c libmysqld/my_user.c sql/my_user.c client/Makefile.am: Use my_user.c in linking of mysqldump executable. client/mysqldump.c: Fix for BUG#15110(mysqldump --triggers: does not include DEFINER clause) include/Makefile.am: Add my_user.c include/mysql_com.h: Introduce a constant for max user length. libmysqld/Makefile.am: Add my_user.c mysql-test/r/mysqldump.result: Update result file. sql-common/Makefile.am: Add my_user.c sql/Makefile.am: Add my_user.c sql/sp.cc: Use constant for max user length. sql/sp_head.cc: Use common function to parse user value. sql/sql_acl.cc: Use constant for max user length. sql/sql_parse.cc: Use constant for max user length. sql/sql_show.cc: Use constant for max user length. sql/sql_trigger.cc: Use constant for max user length. include/my_user.h: A header file for parse_user(). sql-common/my_user.c: A new file for parse_user() implementation.
Diffstat (limited to 'sql-common/my_user.c')
-rw-r--r--sql-common/my_user.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/sql-common/my_user.c b/sql-common/my_user.c
new file mode 100644
index 00000000000..c39f08e520f
--- /dev/null
+++ b/sql-common/my_user.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 2005 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <my_user.h>
+#include <m_string.h>
+
+
+/*
+ Parse user value to user name and host name parts.
+
+ SYNOPSIS
+ user_id_str [IN] User value string (the source).
+ user_id_len [IN] Length of the user value.
+ user_name_str [OUT] Buffer to store user name part.
+ Must be not less than USERNAME_LENGTH + 1.
+ user_name_len [OUT] A place to store length of the user name part.
+ host_name_str [OUT] Buffer to store host name part.
+ Must be not less than HOSTNAME_LENGTH + 1.
+ host_name_len [OUT] A place to store length of the host name part.
+*/
+
+void parse_user(const char *user_id_str, uint user_id_len,
+ char *user_name_str, uint *user_name_len,
+ char *host_name_str, uint *host_name_len)
+{
+ char *p= strrchr(user_id_str, '@');
+
+ if (!p)
+ {
+ *user_name_len= 0;
+ *host_name_len= 0;
+ }
+ else
+ {
+ *user_name_len= p - user_id_str;
+ *host_name_len= user_id_len - *user_name_len - 1;
+
+ memcpy(user_name_str, user_id_str, *user_name_len);
+ memcpy(host_name_str, p + 1, *host_name_len);
+ }
+
+ user_name_str[*user_name_len]= 0;
+ host_name_str[*host_name_len]= 0;
+}