summaryrefslogtreecommitdiff
path: root/storage/maria/ma_create.c
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2020-08-24 18:52:44 +0200
committerSergei Golubchik <serg@mariadb.org>2020-08-25 20:47:52 +0200
commit62d1e3bf67a12eb6f48ac615bda119e2ed65cf16 (patch)
tree6e21609d357ea89d1c8341033d9a75564acbe87a /storage/maria/ma_create.c
parent29d9df16ffd725cb236238d33bd75f0722256573 (diff)
downloadmariadb-git-62d1e3bf67a12eb6f48ac615bda119e2ed65cf16.tar.gz
MDEV-23569 temporary tables can overwrite existing files
for internal temporary tables: don't use realpath(), and let them overwrite whatever orphan temp files might've left in the tmpdir (see main.error_simulation test). for user created temporary tables: we have to use realpath(), (see 3a726ab6e2e, remember DATA/INDEX DIRECTORY). don't allow them to overwrite existing files. This bug was reported by RACK911 LABS
Diffstat (limited to 'storage/maria/ma_create.c')
-rw-r--r--storage/maria/ma_create.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/storage/maria/ma_create.c b/storage/maria/ma_create.c
index 263d8a307b1..e1d2d89020d 100644
--- a/storage/maria/ma_create.c
+++ b/storage/maria/ma_create.c
@@ -322,7 +322,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
{
options|= HA_OPTION_TMP_TABLE;
tmp_table= TRUE;
- create_mode|= O_NOFOLLOW;
+ create_mode|= O_NOFOLLOW | (internal_table ? 0 : O_EXCL);
/* "CREATE TEMPORARY" tables are not crash-safe (dropped at restart) */
ci->transactional= FALSE;
flags&= ~HA_CREATE_PAGE_CHECKSUM;
@@ -887,8 +887,8 @@ int maria_create(const char *name, enum data_file_type datafile_type,
{
char *iext= strrchr(name, '.');
int have_iext= iext && !strcmp(iext, MARIA_NAME_IEXT);
- fn_format(kfilename, name, "", MARIA_NAME_IEXT,
- MY_UNPACK_FILENAME | MY_RETURN_REAL_PATH |
+ fn_format(kfilename, name, "", MARIA_NAME_IEXT, MY_UNPACK_FILENAME |
+ (internal_table ? 0 : MY_RETURN_REAL_PATH) |
(have_iext ? MY_REPLACE_EXT : MY_APPEND_EXT));
klinkname_ptr= NullS;
/*