summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.cc
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2001-12-13 03:36:36 +0200
committerunknown <monty@hundin.mysql.fi>2001-12-13 03:36:36 +0200
commit1ad683a4ff84d6dc6e3d1649d656623a8f88069a (patch)
treea6e815e1cd4e8eae71ab4ba58d4bb2176a45d561 /sql/item_strfunc.cc
parenteaee0ac0caae0b0c6193ca3b003b4167daf28c3e (diff)
downloadmariadb-git-1ad683a4ff84d6dc6e3d1649d656623a8f88069a.tar.gz
Fixes for des_crypt functions.
sql/Makefile.am: Added missing header file sql/des_key_file.cc: Fixed compiler errors sql/item_strfunc.cc: Fixed compiler errors sql/lex.h: Portablity fix sql/mysql_priv.h: Fixed wrong type sql/sql_yacc.yy: Portablity fix
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r--sql/item_strfunc.cc38
1 files changed, 21 insertions, 17 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 004acd2d5ec..792c76ebc0d 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -221,8 +221,9 @@ String *Item_func_des_encrypt::val_str(String *str)
des_cblock ivec={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
struct st_des_keyblock keyblock;
struct st_des_keyschedule keyschedule;
- struct st_des_keyschedule *keyschedule_ptr=&keyschedule;
- uint key_number=15;
+ struct st_des_keyschedule *keyschedule_ptr;
+ const char *append_str="********";
+ uint key_number, res_length, tail;
String *res= args[0]->val_str(str);
if ((null_value=args[0]->null_value))
@@ -231,23 +232,24 @@ String *Item_func_des_encrypt::val_str(String *str)
return &empty_string;
if (arg_count == 1)
- keyschedule_ptr=des_keyschedule[key_number=default_des_key];
- else if (args[1]->result_type == INT_RESULT)
+ keyschedule_ptr= &des_keyschedule[key_number=des_default_key];
+ else if (args[1]->result_type() == INT_RESULT)
{
key_number= (uint) args[1]->val_int();
if (key_number > 9)
goto error;
- keyschedule_ptr= des_keyschedule[key_number];
+ keyschedule_ptr= &des_keyschedule[key_number];
}
else
{
- const char *append_str="********";
uint tail,res_length;
String *keystr=args[1]->val_str(&tmp_value);
if (!keystr)
goto error;
+ key_number=15; // User key string
/* We make good 24-byte (168 bit) key from given plaintext key with MD5 */
+ keyschedule_ptr= &keyschedule;
EVP_BytesToKey(EVP_des_ede3_cbc(),EVP_md5(),NULL,
(uchar*) keystr->ptr(), (int) keystr->length(),
1, (uchar*) &keyblock,ivec);
@@ -268,13 +270,13 @@ String *Item_func_des_encrypt::val_str(String *str)
tail= (7-(res->length()+7) % 8); // 0..7 marking extra length
res_length=res->length()+tail+1;
if (tail && res->append(append_str, tail) || tmp_value.alloc(res_length))
- goto err;
+ goto error;
tmp_value.length(res_length);
- tmp_value.[0]=(char) (128 | tail << 4 | key_number);
+ tmp_value[0]=(char) (128 | tail << 4 | key_number);
// Real encryption
des_ede3_cbc_encrypt((const uchar*) (res->ptr()),
- (uchar*) (tmp_value->ptr()+1),
+ (uchar*) (tmp_value.ptr()+1),
res->length(),
keyschedule_ptr->ks1,
keyschedule_ptr->ks2,
@@ -296,28 +298,30 @@ String *Item_func_des_decrypt::val_str(String *str)
des_cblock ivec={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
struct st_des_keyblock keyblock;
struct st_des_keyschedule keyschedule;
- struct st_des_keyschedule *keyschedule_ptr=&keyschedule;
+ struct st_des_keyschedule *keyschedule_ptr;
String *res= args[0]->val_str(str);
if ((null_value=args[0]->null_value))
return 0;
- if (res->length(0) < 9 || (res->length()) % 8 != 1 || !(res->[0] & 128))
+ if (res->length() < 9 || (res->length() % 8) != 1 || !((*res)[0] & 128))
return res; // Skip decryption if not encrypted
if (arg_count == 1) // If automatic uncompression
{
- uint key_number=res->[0] & 15;
+ uint key_number=(uint) (*res)[0] & 15;
// Check if automatic key and that we have privilege to uncompress using it
if (!(current_thd->master_access & PROCESS_ACL) || key_number > 9)
goto error;
- keyschedule_ptr=des_keyschedule[key_number-1];
+ keyschedule_ptr= &des_keyschedule[key_number];
}
else
{
// We make good 24-byte (168 bit) key from given plaintext key with MD5
String *keystr=args[1]->val_str(&tmp_value);
- if (!key_str)
+ if (!keystr)
goto error;
+
+ keyschedule_ptr= &keyschedule;
EVP_BytesToKey(EVP_des_ede3_cbc(),EVP_md5(),NULL,
(uchar*) keystr->ptr(),(int) keystr->length(),
1,(uchar*) &keyblock,ivec);
@@ -327,11 +331,11 @@ String *Item_func_des_decrypt::val_str(String *str)
des_set_key_unchecked(&keyblock.key3,keyschedule_ptr->ks3);
}
if (tmp_value.alloc(res->length()-1))
- goto err;
+ goto error;
/* Restore old length of key */
- tmp_value.length(res->length()-1-(((uchar) res->[0] >> 4) & 7));
+ tmp_value.length(res->length()-1-(((uchar) (*res)[0] >> 4) & 7));
des_ede3_cbc_encrypt((const uchar*) res->ptr()+1,
- (uchar*) (tmp_value->ptr()),
+ (uchar*) (tmp_value.ptr()),
res->length()-1,
keyschedule_ptr->ks1,
keyschedule_ptr->ks2,