From ea2cc546774e259ebaf11d5bb70d81f0ed36b3be Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 12 Sep 2016 22:45:47 -0700 Subject: [PATCH] dll: relative symbolic link resolution testing --- tst/memfs/memfs.cpp | 4 ---- tst/winfsp-tests/reparse-test.c | 19 ++++++++++++------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/tst/memfs/memfs.cpp b/tst/memfs/memfs.cpp index 3192a4ff..44c648fc 100644 --- a/tst/memfs/memfs.cpp +++ b/tst/memfs/memfs.cpp @@ -967,10 +967,6 @@ static NTSTATUS GetReparsePointByName( if (0 == (FileNode->FileInfo.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) return STATUS_NOT_A_REPARSE_POINT; - if (IsDirectory && - 0 == (FileNode->FileInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - return STATUS_NOT_A_DIRECTORY; - if (0 != Buffer) { if (FileNode->ReparseDataSize > *PSize) diff --git a/tst/winfsp-tests/reparse-test.c b/tst/winfsp-tests/reparse-test.c index 0c136167..37f9553c 100644 --- a/tst/winfsp-tests/reparse-test.c +++ b/tst/winfsp-tests/reparse-test.c @@ -426,7 +426,7 @@ static BOOL my_namecheck_fn(ULONG Flags, PWSTR Prefix, void *memfs, PWSTR FileNa SYMBOLIC_LINK_FLAG_DIRECTORY)) #define my_symlink(LinkName, FileName) ASSERT(my_symlink_fn(Flags, Prefix, memfs, LinkName, FileName, 0)) #define my_namecheck(FileName, Expected)ASSERT(my_namecheck_fn(Flags, Prefix, memfs, FileName, Expected)) -#define my_notexist(FileName) ASSERT(!my_namecheck_fn(Flags, Prefix, memfs, FileName, L"")) +#define my_failcheck(FileName) ASSERT(!my_namecheck_fn(Flags, Prefix, memfs, FileName, L"")) static void reparse_symlink_relative_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout) { @@ -442,29 +442,34 @@ static void reparse_symlink_relative_dotest(ULONG Flags, PWSTR Prefix, ULONG Fil my_symlink(L"\\l0", L"NON-EXISTANT"); my_symlink(L"\\loop", L"loop"); + my_symlink(L"\\lf", L"\\1"); + my_symlinkd(L"\\ld", L"\\1\\1.1\\1.1.1"); my_symlink(L"\\1\\1.1\\l1.1.1", L"1.1.1"); - my_symlinkd(L"\\2\\l1", L"..\\1"); + my_symlinkd(L"\\2\\l1", L"..\\1\\."); my_symlinkd(L"\\1\\l2", L"..\\.\\2"); my_symlinkd(L"\\2\\a1", L"\\1"); my_symlinkd(L"\\1\\a2", L"\\2"); - my_notexist(L"\\l0"); + my_failcheck(L"\\l0"); ASSERT(ERROR_FILE_NOT_FOUND == GetLastError()); - my_notexist(L"\\loop"); + my_failcheck(L"\\loop"); ASSERT(ERROR_CANT_RESOLVE_FILENAME == GetLastError()); - my_namecheck(L"\\1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); + /* NTFS open with FILE_FLAG_BACKUP_SEMANTICS does not care about SYMLINK/SYMLINKD difference! */ + my_namecheck(L"\\lf", L"\\1"); + my_namecheck(L"\\ld", L"\\1\\1.1\\1.1.1"); + my_namecheck(L"\\1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); my_namecheck(L"\\2\\l1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); my_namecheck(L"\\1\\l2\\l1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); - my_namecheck(L"\\2\\a1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); my_namecheck(L"\\2\\l1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); - my_namecheck(L"\\1\\a2\\l1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); my_namecheck(L"\\1\\a2\\a1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); my_namecheck(L"\\1\\a2\\a1\\l2\\l1\\1.1\\l1.1.1", L"\\1\\1.1\\1.1.1"); + my_rmdir(L"\\ld"); + my_unlink(L"\\lf"); my_rmdir(L"\\1\\a2"); my_rmdir(L"\\2\\a1"); my_rmdir(L"\\1\\l2");