2015-04-01 10:50:21 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
|
|
|
|
Copyright (c) 2015, MariaDB Corporation.
|
|
|
|
|
|
|
|
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; version 2 of the License.
|
|
|
|
|
|
|
|
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.,
|
|
|
|
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
|
|
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
/**************************************************//**
|
|
|
|
@file include/fil0fil.h
|
|
|
|
The low-level file system encryption support functions
|
|
|
|
|
|
|
|
Created 04/01/2015 Jan Lindström
|
|
|
|
*******************************************************/
|
|
|
|
|
|
|
|
/*******************************************************************//**
|
|
|
|
Find out whether the page is page encrypted
|
|
|
|
@return true if page is page encrypted, false if not */
|
|
|
|
UNIV_INLINE
|
|
|
|
bool
|
|
|
|
fil_page_is_encrypted(
|
|
|
|
/*==================*/
|
|
|
|
const byte *buf) /*!< in: page */
|
|
|
|
{
|
|
|
|
return(mach_read_from_4(buf+FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION) != 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*******************************************************************//**
|
|
|
|
Find out whether the page can be decrypted.
|
|
|
|
The function for decrypting the page should already be executed before this.
|
2015-04-09 19:27:40 +02:00
|
|
|
@return 1 if key provider not available or key is not available
|
|
|
|
0 if decryption should be possible
|
2015-04-01 10:50:21 +02:00
|
|
|
*/
|
|
|
|
UNIV_INLINE
|
2015-04-09 19:27:40 +02:00
|
|
|
bool
|
2015-04-01 10:50:21 +02:00
|
|
|
fil_page_encryption_status(
|
|
|
|
/*===================*/
|
|
|
|
const byte *buf, /*!< in: page */
|
|
|
|
ulint space_id) /*!< in: space_id */
|
|
|
|
{
|
2015-04-09 00:37:47 +02:00
|
|
|
fil_space_crypt_t *crypt_data = fil_space_get_crypt_data(space_id);
|
2015-04-01 10:50:21 +02:00
|
|
|
ulint page_type = mach_read_from_2(buf+FIL_PAGE_TYPE);
|
|
|
|
|
|
|
|
if (page_type == FIL_PAGE_TYPE_FSP_HDR) {
|
|
|
|
if (crypt_data != NULL) {
|
2015-04-09 00:37:47 +02:00
|
|
|
if (!encryption_key_id_exists(crypt_data->key_id)) {
|
2015-04-01 10:50:21 +02:00
|
|
|
/* accessing table would surely fail, because no key or no key provider available */
|
2015-04-09 19:27:40 +02:00
|
|
|
return 1;
|
2015-04-01 10:50:21 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
ulint key = mach_read_from_4(buf + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION);
|
2015-04-09 00:37:47 +02:00
|
|
|
if (!encryption_key_version_exists(crypt_data->key_id, key)) {
|
2015-04-09 19:27:40 +02:00
|
|
|
return 1;
|
2015-04-01 10:50:21 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|