diff options
author | monty@hundin.mysql.fi <> | 2001-12-13 15:53:18 +0200 |
---|---|---|
committer | monty@hundin.mysql.fi <> | 2001-12-13 15:53:18 +0200 |
commit | 1d3e058c4bd555a830d492c138bdca6521834253 (patch) | |
tree | dc20d248b63f5dc477b5701978425924a376f6ff /sql/des_key_file.cc | |
parent | f66a9d87028f9fc6da564cbc43b2596cc21f438b (diff) | |
download | mariadb-git-1d3e058c4bd555a830d492c138bdca6521834253.tar.gz |
Added FLUSH DES_KEY_FILE.
New HEX() function.
Final (?) cleanup of des_encrypt() / des_decrypt().
Added missing files to Makefiles.
Diffstat (limited to 'sql/des_key_file.cc')
-rw-r--r-- | sql/des_key_file.cc | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/sql/des_key_file.cc b/sql/des_key_file.cc index c6ac9ab6059..d9c924b5a3c 100644 --- a/sql/des_key_file.cc +++ b/sql/des_key_file.cc @@ -19,25 +19,37 @@ #ifdef HAVE_OPENSSL +struct st_des_keyschedule des_keyschedule[10]; +uint des_default_key; +pthread_mutex_t LOCK_des_key_file; +static int initialized; + /* Function which loads DES keys from plaintext file into memory on MySQL - server startup and on command FLUSH DES_KEYS. Blame tonu@spam.ee on bugs ;) -*/ + server startup and on command FLUSH DES_KEY_FILE. + Blame tonu@spam.ee on bugs ;) -struct st_des_keyschedule des_keyschedule[10]; -uint des_default_key; + RETURN + 0 ok + 1 Error +*/ -void +bool load_des_key_file(const char *file_name) { + bool result=1; File file; - des_cblock ivec={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - char offset; IO_CACHE io; DBUG_ENTER("load_des_key_file"); DBUG_PRINT("enter",("name: %s",file_name)); - VOID(pthread_mutex_lock(&LOCK_open)); + if (!initialized) + { + initialized=1; + pthread_mutex_init(&LOCK_des_key_file,MY_MUTEX_INIT_FAST); + } + + VOID(pthread_mutex_lock(&LOCK_des_key_file)); if ((file=my_open(file_name,O_RDONLY | O_BINARY ,MYF(MY_WME))) < 0 || init_io_cache(&io, file, IO_SIZE*2, READ_CACHE, 0, 0, MYF(MY_WME))) goto error; @@ -47,7 +59,7 @@ load_des_key_file(const char *file_name) for (;;) { char *start, *end; - char buf[1024]; + char buf[1024], offset; st_des_keyblock keyblock; uint length; @@ -60,10 +72,12 @@ load_des_key_file(const char *file_name) // Remove newline and possible other control characters for (start=buf+1 ; isspace(*start) ; start++) ; end=buf+length; - for (end=strend(buf) ; end > start && iscntrl(end[-1]) ; end--) ; + for (end=strend(buf) ; end > start && !isgraph(end[-1]) ; end--) ; if (start != end) { + des_cblock ivec; + bzero((char*) &ivec,sizeof(ivec)); // We make good 24-byte (168 bit) key from given plaintext key with MD5 EVP_BytesToKey(EVP_des_ede3_cbc(),EVP_md5(),NULL, (uchar *) start, (int) (end-start),1, @@ -76,11 +90,10 @@ load_des_key_file(const char *file_name) des_default_key= (uint) offset; // use first as def. } } - else - { - DBUG_PRINT("des",("wrong offset: %c",offset)); - } + else if (offset != '#') + sql_print_error("load_des_file: Found wrong key_number: %c",offset); } + result=0; error: if (file >= 0) @@ -88,7 +101,7 @@ error: my_close(file,MYF(0)); end_io_cache(&io); } - VOID(pthread_mutex_unlock(&LOCK_open)); - DBUG_VOID_RETURN; + VOID(pthread_mutex_unlock(&LOCK_des_key_file)); + DBUG_RETURN(result); } #endif /* HAVE_OPENSSL */ |