summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2014-12-03 11:37:26 +0100
committerSergei Golubchik <serg@mariadb.org>2014-12-03 11:37:26 +0100
commitec4137c62b00a2bad91dd108f5782b206fe86a8b (patch)
treeb284d929d1a498df14aafffd0c31831f2b4e9fd5 /sql/item_strfunc.cc
parent1caee393076dc642a7d8e1283377b59ef8f52dbd (diff)
parentbafe529af76a915f43dbf6a3fb8dc610a4ea121b (diff)
downloadmariadb-git-ec4137c62b00a2bad91dd108f5782b206fe86a8b.tar.gz
Merge branch '10.1' into bb-10.1-merge
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r--sql/item_strfunc.cc85
1 files changed, 48 insertions, 37 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index ec5740cf3e2..875d9470dac 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2171,57 +2171,68 @@ void Item_func_trim::print(String *str, enum_query_type query_type)
/* Item_func_password */
-String *Item_func_password::val_str_ascii(String *str)
+bool Item_func_password::fix_fields(THD *thd, Item **ref)
{
- DBUG_ASSERT(fixed == 1);
- String *res= args[0]->val_str(str);
- check_password_policy(res);
- if (args[0]->null_value || res->length() == 0)
- return make_empty_result();
- my_make_scrambled_password(tmp_value, res->ptr(), res->length());
- str->set(tmp_value, SCRAMBLED_PASSWORD_CHAR_LENGTH, &my_charset_latin1);
- return str;
-}
-
-char *Item_func_password::alloc(THD *thd, const char *password, size_t pass_len)
-{
- char *buff= (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
- if (buff)
- {
- String *password_str= new (thd->mem_root)String(password, thd->variables.
- character_set_client);
- check_password_policy(password_str);
- my_make_scrambled_password(buff, password, pass_len);
- }
- return buff;
+ if (deflt)
+ alg= (thd->variables.old_passwords ? OLD : NEW);
+ return Item_str_ascii_func::fix_fields(thd, ref);
}
-
-/* Item_func_old_password */
-
-String *Item_func_old_password::val_str_ascii(String *str)
+String *Item_func_password::val_str_ascii(String *str)
{
DBUG_ASSERT(fixed == 1);
- String *res= args[0]->val_str(str);
- if ((null_value=args[0]->null_value))
- return 0;
- if (res->length() == 0)
- return make_empty_result();
- my_make_scrambled_password_323(tmp_value, res->ptr(), res->length());
- str->set(tmp_value, SCRAMBLED_PASSWORD_CHAR_LENGTH_323, &my_charset_latin1);
+ String *res= args[0]->val_str(str);
+ switch (alg){
+ case NEW:
+ check_password_policy(res);
+ if (args[0]->null_value || res->length() == 0)
+ return make_empty_result();
+ my_make_scrambled_password(tmp_value, res->ptr(), res->length());
+ str->set(tmp_value, SCRAMBLED_PASSWORD_CHAR_LENGTH, &my_charset_latin1);
+ break;
+ case OLD:
+ if ((null_value=args[0]->null_value))
+ return 0;
+ if (res->length() == 0)
+ return make_empty_result();
+ my_make_scrambled_password_323(tmp_value, res->ptr(), res->length());
+ str->set(tmp_value, SCRAMBLED_PASSWORD_CHAR_LENGTH_323, &my_charset_latin1);
+ break;
+ default:
+ DBUG_ASSERT(0);
+ }
return str;
}
-char *Item_func_old_password::alloc(THD *thd, const char *password,
- size_t pass_len)
+char *Item_func_password::alloc(THD *thd, const char *password,
+ size_t pass_len, enum PW_Alg al)
{
- char *buff= (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
- if (buff)
+ char *buff= (char *) thd->alloc((al==NEW)?
+ SCRAMBLED_PASSWORD_CHAR_LENGTH + 1:
+ SCRAMBLED_PASSWORD_CHAR_LENGTH_323 + 1);
+ if (!buff)
+ return NULL;
+
+ switch (al) {
+ case NEW:
+ {
+ String *password_str= new (thd->mem_root)String(password, thd->variables.
+ character_set_client);
+ check_password_policy(password_str);
+ my_make_scrambled_password(buff, password, pass_len);
+ break;
+ }
+ case OLD:
my_make_scrambled_password_323(buff, password, pass_len);
+ break;
+ default:
+ DBUG_ASSERT(0);
+ }
return buff;
}
+
#define bin_to_ascii(c) ((c)>=38?((c)-38+'a'):(c)>=12?((c)-12+'A'):(c)+'.')
String *Item_func_encrypt::val_str(String *str)