From 9f51bdfd052f0f7c8896f224fe6f715b0972fa30 Mon Sep 17 00:00:00 2001 From: Yura Pakhuchiy Date: Wed, 5 Sep 2007 21:19:53 +0300 Subject: [PATCH] Catch and deny all junction/reparse point write operations. (Szaka) --- libntfs/dir.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libntfs/dir.c b/libntfs/dir.c index 33684181..d9bb15b8 100644 --- a/libntfs/dir.c +++ b/libntfs/dir.c @@ -1112,6 +1112,11 @@ static ntfs_inode *__ntfs_create(ntfs_inode *dir_ni, errno = EINVAL; return NULL; } + /* FIXME: Reparse points requires special handling. */ + if (dir_ni->flags & FILE_ATTR_REPARSE_POINT) { + err = EOPNOTSUPP; + goto err_out; + } /* Allocate MFT record for new file. */ ni = ntfs_mft_record_alloc(dir_ni->vol, NULL); if (!ni) { @@ -1222,7 +1227,7 @@ static ntfs_inode *__ntfs_create(ntfs_inode *dir_ni, ni->vol->indx_record_size >> ni->vol->cluster_size_bits; else - ir->clusters_per_index_block = + ir->clusters_per_index_block = ni->vol->indx_record_size >> ni->vol->sector_size_bits; ir->index.entries_offset = cpu_to_le32(sizeof(INDEX_HEADER)); @@ -1685,6 +1690,11 @@ int ntfs_link(ntfs_inode *ni, ntfs_inode *dir_ni, ntfschar *name, u8 name_len) ntfs_log_error("Invalid arguments."); goto err_out; } + /* FIXME: Reparse points requires special handling. */ + if (ni->flags & FILE_ATTR_REPARSE_POINT) { + err = EOPNOTSUPP; + goto err_out; + } /* Create FILE_NAME attribute. */ fn_len = sizeof(FILE_NAME_ATTR) + name_len * sizeof(ntfschar); fn = ntfs_calloc(fn_len);