From: Sergey Vojtovich Date: March 30 2010 3:22pm Subject: bzr commit into mysql-5.1-bugteam branch (svoj:3431) Bug#40980 List-Archive: http://lists.mysql.com/commits/104639 X-Bug: 40980 Message-Id: <0L0300D4KPE6MD70@fe-emea-09.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_h0qubi6sI2PwRDTccK7whg)" --Boundary_(ID_h0qubi6sI2PwRDTccK7whg) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/svoj/devel/bzr-mysql/mysql-5.1-bugteam-bug40980/ based on revid:li-bing.song@stripped 3431 Sergey Vojtovich 2010-03-30 BUG#40980 - Drop table can remove another MyISAM table's data and index files It was possible if DATA/INDEX DIRECTORY is pointing to symlinked MySQL data home directory. Do not allow to drop data/index files implicitly symlinked to data home directory. For such tables remove symlink only. @ mysql-test/r/symlink.result A test case for BUG#40980. @ mysql-test/t/symlink.test A test case for BUG#40980. @ storage/myisam/mi_delete_table.c Do not allow to drop data/index files implicitly symlinked to data home directory. For such tables remove symlink only. modified: mysql-test/r/symlink.result mysql-test/t/symlink.test storage/myisam/mi_delete_table.c === modified file 'mysql-test/r/symlink.result' --- a/mysql-test/r/symlink.result 2009-10-27 13:20:34 +0000 +++ b/mysql-test/r/symlink.result 2010-03-30 15:22:39 +0000 @@ -168,4 +168,16 @@ Warning 1618 option ign Warning 1618 option ignored DROP TABLE t1; SET @@SQL_MODE=@OLD_SQL_MODE; +# +# BUG#40980 - Drop table can remove another MyISAM table's +# data and index files +# +CREATE TABLE user(a INT) DATA DIRECTORY='MYSQL_TMP_DIR/mysql' + INDEX DIRECTORY='MYSQL_TMP_DIR/mysql'; +FLUSH TABLE user; +# Symlinking mysql database to tmpdir +FLUSH TABLE mysql.user; +DROP TABLE user; +FLUSH TABLE mysql.user; +SELECT * FROM mysql.user; End of 5.1 tests === modified file 'mysql-test/t/symlink.test' --- a/mysql-test/t/symlink.test 2009-10-27 13:20:34 +0000 +++ b/mysql-test/t/symlink.test 2010-03-30 15:22:39 +0000 @@ -249,4 +249,26 @@ eval CREATE TABLE t1(a INT) DATA DIRECTO DROP TABLE t1; SET @@SQL_MODE=@OLD_SQL_MODE; +--echo # +--echo # BUG#40980 - Drop table can remove another MyISAM table's +--echo # data and index files +--echo # +--mkdir $MYSQL_TMP_DIR/mysql +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval CREATE TABLE user(a INT) DATA DIRECTORY='$MYSQL_TMP_DIR/mysql' + INDEX DIRECTORY='$MYSQL_TMP_DIR/mysql'; +FLUSH TABLE user; +--echo # Symlinking mysql database to tmpdir +--remove_file $MYSQL_TMP_DIR/mysql/user.MYD +--remove_file $MYSQL_TMP_DIR/mysql/user.MYI +--rmdir $MYSQL_TMP_DIR/mysql +--exec ln -s $MYSQLD_DATADIR/mysql $MYSQL_TMP_DIR/mysql +FLUSH TABLE mysql.user; +DROP TABLE user; +FLUSH TABLE mysql.user; +--disable_result_log +SELECT * FROM mysql.user; +--enable_result_log +--remove_file $MYSQL_TMP_DIR/mysql + --echo End of 5.1 tests === modified file 'storage/myisam/mi_delete_table.c' --- a/storage/myisam/mi_delete_table.c 2006-12-31 00:32:21 +0000 +++ b/storage/myisam/mi_delete_table.c 2010-03-30 15:22:39 +0000 @@ -58,12 +58,33 @@ int mi_delete_table(const char *name) #endif /* USE_RAID */ fn_format(from,name,"",MI_NAME_IEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT); - if (my_delete_with_symlink(from, MYF(MY_WME))) - DBUG_RETURN(my_errno); + if (my_is_symlink(from) && (*myisam_test_invalid_symlink)(from)) + { + /* Symlink is pointing to data directory. Remove symlink, keep file. */ + if (my_delete(from, MYF(MY_WME))) + DBUG_RETURN(my_errno); + } + else + { + if (my_delete_with_symlink(from, MYF(MY_WME))) + DBUG_RETURN(my_errno); + } + fn_format(from,name,"",MI_NAME_DEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT); #ifdef USE_RAID if (raid_type) DBUG_RETURN(my_raid_delete(from, raid_chunks, MYF(MY_WME)) ? my_errno : 0); #endif - DBUG_RETURN(my_delete_with_symlink(from, MYF(MY_WME)) ? my_errno : 0); + if (my_is_symlink(from) && (*myisam_test_invalid_symlink)(from)) + { + /* Symlink is pointing to data directory. Remove symlink, keep file. */ + if (my_delete(from, MYF(MY_WME))) + DBUG_RETURN(my_errno); + } + else + { + if (my_delete_with_symlink(from, MYF(MY_WME))) + DBUG_RETURN(my_errno); + } + DBUG_RETURN(0); } --Boundary_(ID_h0qubi6sI2PwRDTccK7whg) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/svoj@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/svoj@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: svoj@stripped # target_branch: file:///home/svoj/devel/bzr-mysql/mysql-5.1-bugteam-\ # bug40980/ # testament_sha1: c7e688a0e9816803710ec7c8982ac6cdf0fd4b23 # timestamp: 2010-03-30 19:22:45 +0400 # base_revision_id: li-bing.song@stripped\ # 4lpsnybf8hftnpug # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWURwz0oABBV/gFBwACBd9/// f+f/4L////pgCU7Wfdz7iqXGDl23b24O817YVRU7YTwShSeiaj1NNDT1NPEI2UGgGjQ0BoNAaAGQ SUp5J6JP0aU9PSMlP9SjygH6kAAyAGgAAA5hNAaA0aMI0GI0xMmJoMI0DIBkwEiKjFTzVGYKb1TJ o9R6g8KepoYjIB6jRo9TRtQARSSYJphJ6JkyZJ6npqnlPUfpTQ0DQAAeoGgBJICBT0xDTImjST9T 0k9NBMgYg09TRkDQyB80FRDxyPVvixNJQW81lZsR/OSzkLQpMEUpVSApHgRBNBuyTJMmCOfZwbnF gV4GGFwutmuVlFEV3YVp1wgPJlaY48WebWW5s2U/eXpK1gAUpFwxJUI1/nGVLg3DXlNvWLUZC+un OH2UpjbbYT0Bj3rL9NdCcSzMnC5hzqbz6oz7WJCM0oytL531VbycRXMRxhREk7h8qGAOoUwl2UiS gRi1rnap9FcfSApEY4hcmNBT+uRQpkOw1BH+JmR4PGfnizK0oVxQbXqwNSYculhxEKTSuBdg3DwI Fi/pURFjeB1O3lT3MncULtBgad+uqpV7LJt/FBGnq79pCOHAMbY/oiBcozjGfp+EpGM3VJr1hkKz hGUFCKAZ5LYuK6chUWgk4BXjiGU+gg+8pCsmdIu97FzUK/H5np9QlzT6mc+j0CmmO/PTnJR8x22J 6MIRFaT5qzrrGB3KtPtaZJHlAMUdiZFYvrPWXB5O09t9fqSHhsbwq26SukWmHj8TY8leIeyUe9vE +JCTWzTCkJZiZwBBSYGs7BIJkmFyELMMwypgnZCTU1eJpMpwYJ2JOZNZ4KBV2IW9kwyDp/SKjrqV 8zzWPuv6qKyY5Ei4jENFlJmEtcjDng1zY8WU1YXmgoPS8RGJAeI841+roLFTkU47JzAuSRInnUYQ zEWQJCKyJAxlM5LmbYQlImPIE8tFEkSGoFcayC+FhfdPUja35MoTYEiwmc07ITaQUl/51aiP7oHY PEUmKsIlJuEQhAysvXTVZXGsxrlu9CIORPAzT0jZmsbAiQW9TDAuKBuhw3etkVzHrDPbftmU4C4S 8tKibUiphI8qoC41UKJZJTzj9FTjaYt4RDrZqnPVWMaUoOavn1u77RhhUoIqHHHKwvLSeG266o1k +YgqIRNDh3ZpWUJjXkzCivYtpYodfkc9GETWbiJvWYty2X4VYuFcKlZEMTAofuvKDXEfjJxgPKlV VSIcE8yRbtNZlidNFCiaaIK4qkKEOYtLS0kRkUvKVRCk0kE8GoZEFJgZz5SSbp8SGA+kbMu4DFdg DU1ntF4pIKphuxtLOmQewOz5g7vrm3EulzaLmnvGdQI4zQMF0rmD0FwwjbbH5xHXyhQiTouS0vXx b3B6U8VLCgiZ3WuerSAj8A9RF45MCEubQnGoPWJQOTZ+pOUiG1q9Z6BNB9QyC/JhX7DAC8FYPZDF lGtQSGJHQhhSi4WAsRKKF8BkbkZovMShFZJayQsc0LjIKzeak0QxVgnIwRiIuRMT84UKSJJIu+YL 4oqBbQbZ70MWQWbKoCCCSRQNzCzc1u2KSTbHnIYRS0PAY1L5ABLchMrrHzJTQSo5i8dB34Dxe1Pu 85DkchiWla94+gOW1FtaqetTFweuIjleXmxbAUV6+vuTmGwO49nMRO4ifiSOcYeXGg7i4+RPyUVt YFfgu9UvWpnnSH+noZXFpwOnEmWFpIeYHOhjq9hIqOJSPyP+caMXmh2m1DiTDKQBbNRRCKcE1atO w3DGo9xwpKEd51XJqkayTyIKo+P+F6Ctb+yRivnQarEQOCCjCpGTxFOsRmomwR7eBsWhNdRNSOQg haDagDnaZUY4Mg8xMY1mvF43Wc3BKjsnvk53BZ11yJ14RQdB2lby6ys2JzTrZspDVmchPQ6zrQ4i bidPgIaKSTiwt5F3Q7grxcIv3fe/qDqFpSwM9qKQTNaBWqZoJ8oiLUxqXLlpXPq2CRpeZ1WHA8Hm UnA8wVGYNT5Pf5iNNlGQNQnmSqtA5C6BZLaQ2LhAhOqSMyUDKLquQPdo6FtVPQe+mMjs8AbVxTmM AHXXwXOoI4YqrJcHaBya7O1Om6uVBqw9DwRyA5S3yC9vC17OIDSTu8YfyMd2QndLao6XhgdtdmoT BCTOSxDUJ6TqNFTb43Ked9p3mt994ZmtqzbwiBDATaXzOJ/u3vbukaDjXa6dKd0IElbtPlxd7DAQ wkCMa05DjFB2ZkyspEYpCdarE46+SyrEajA5MxQnfDoJ+3rtkazx3gN7JgvYyMtgk7kTS93LaZ9K hYsn8UhVaxFdYTKjt36l1iNtvvGRzjB1VkwzGBVZfc7QCWQSAMKk3UBSpOQJDKqZRmM7qDCopdk7 lSphiFhN77M+6jmkD8xBNk3hK1zmari+Cn/U0gQrOxcJX3XucpBtPxLwHLwlrwGpRr5d4RHSZqJs GVolK0N3HeBZyUhqGprmK26N9ljBK1xMzB7bu5eDjdtwAejg6nk7ucNhSuDhx5eTjFilMkRApoRL JFaqEM/0Aw2fkkrGT61LxKxU5A41dQEpHJdAtZEqFQwMA/q23dgvq/CrG5MbxWIgK+2VBjEu5c3i AwBXWJJ56BLk4NrteYbYslKUpSOT5wG9NUC5Esd48DygEP7qKkMpF4mH0KDnJzzhSssrDE90HRZO XXY+pu3it66qLCkJjxvMJoAtAq0MPsIslROG2RkGBSSHwE6pbzAOJEtT4HaoFy4pyxGDQBRJDEnO VLIo3kFviMMdi4UmxRXzUPYa2KDhcbDGURDBGswMRIdRpOHGegSxTomLyHZyxu2GgfBsS9v663Ce btZLRHVIpIkkiJP2BUI2Skmhxl6SGFzQFJVJuG0LFUmOcq7NlpZcoq8D/i7kinChIIjhnpQ= --Boundary_(ID_h0qubi6sI2PwRDTccK7whg)--