diff --git a/build/VStudio/version.properties b/build/VStudio/version.properties index d1b0e499..6a6597eb 100644 --- a/build/VStudio/version.properties +++ b/build/VStudio/version.properties @@ -7,7 +7,7 @@ 2015-2016 Bill Zissimopoulos $([System.DateTime]::Now.ToString(`yy`))$([System.DateTime]::Now.DayOfYear.ToString(`000`)) - 0.13.$(MyBuildNumber) + 0.14.$(MyBuildNumber) $(MyVersion.Replace('.',',')),0 \ No newline at end of file diff --git a/doc/Changelog.adoc b/doc/Changelog.adoc index 36e0b625..0d6fb5f6 100644 --- a/doc/Changelog.adoc +++ b/doc/Changelog.adoc @@ -1,6 +1,11 @@ = Changelog +v0.14:: + +- WinFsp-FUSE now uses the S-1-0-65534 <-> 65534 mapping for unmapped SID/UID's. The Anonymous SID mapping from the previous release had security issues. + + v0.13:: This release includes a Cygwin package, an API change and some other minor changes: diff --git a/src/dll/posix.c b/src/dll/posix.c index 7fd296bb..1848c867 100644 --- a/src/dll/posix.c +++ b/src/dll/posix.c @@ -42,16 +42,16 @@ union UINT8 B[sizeof(SID) - sizeof(DWORD) + (1 * sizeof(DWORD))]; } FspUnmappedSidBuf = { - /* S-1-5-7 (Anonymous) */ + /* S-1-0-65534 */ .V.Revision = SID_REVISION, .V.SubAuthorityCount = 1, - .V.IdentifierAuthority.Value[5] = 5, - .V.SubAuthority[0] = 7, + .V.IdentifierAuthority.Value[5] = 0, + .V.SubAuthority[0] = 65534, }; static PISID FspAccountDomainSid, FspPrimaryDomainSid; #define FspUnmappedSid (&FspUnmappedSidBuf.V) -#define FspUnmappedUid (7) +#define FspUnmappedUid (65534) static BOOL WINAPI FspPosixInitialize( PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) @@ -223,7 +223,7 @@ FSP_API NTSTATUS FspPosixMapUidToSid(UINT32 Uid, PSID *PSid) * Other well-known SIDs in the NT_AUTHORITY domain (S-1-5-X-RID): * S-1-5-X-RID <=> uid/gid: 0x1000 * X + RID */ - else if (0x1000 <= Uid && Uid < 0x100000) + else if (FspUnmappedUid != Uid && 0x1000 <= Uid && Uid < 0x100000) *PSid = FspPosixCreateSid(5, 2, Uid >> 12, Uid & 0xfff); if (0 == *PSid) @@ -325,7 +325,9 @@ FSP_API NTSTATUS FspPosixMapSidToUid(PSID Sid, PUINT32 PUid) */ *PUid = 0x60000 + Rid; } - else + else if ( + FspUnmappedSid->IdentifierAuthority.Value[5] != Authority || + FspUnmappedSid->SubAuthority[0] != Rid) { /* [IDMAP] * Other well-known SIDs: diff --git a/tst/winfsp-tests/posix-test.c b/tst/winfsp-tests/posix-test.c index 03c3df14..8ac37779 100644 --- a/tst/winfsp-tests/posix-test.c +++ b/tst/winfsp-tests/posix-test.c @@ -10,6 +10,7 @@ void posix_map_sid_test(void) UINT32 Uid; } map[] = { + { L"S-1-0-65534", 65534 }, { L"S-1-0-0", 0x10000 }, { L"S-1-1-0", 0x10100 }, { L"S-1-2-0", 0x10200 },