From b2e71c32ff3297e501e4ecdba248d8fc31523cac Mon Sep 17 00:00:00 2001 From: Frederik Carlier Date: Wed, 4 Dec 2019 23:15:14 +0100 Subject: [PATCH 1/3] Add test for Content file which is located outside the project root --- .../framework-dependent-app/framework-dependent-app.csproj | 6 ++++++ .../molecule/default/tests/test_default.py | 5 +++++ .../self-contained/molecule/default/tests/test_default.py | 5 +++++ .../self-contained-app/self-contained-app.csproj | 7 +++++++ 4 files changed, 23 insertions(+) diff --git a/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj b/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj index 7f45bb1..08f4de0 100644 --- a/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj +++ b/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj @@ -20,5 +20,11 @@ + + + + /etc/dotnet-packaging/LICENSE + diff --git a/molecule/framework-dependent/molecule/default/tests/test_default.py b/molecule/framework-dependent/molecule/default/tests/test_default.py index 11a6806..8d20c51 100644 --- a/molecule/framework-dependent/molecule/default/tests/test_default.py +++ b/molecule/framework-dependent/molecule/default/tests/test_default.py @@ -26,3 +26,8 @@ def test_hidden_file_is_ignored(host): def test_empty_file_is_ignored(host): assert \ not host.file("/usr/share/framework-dependent-app/empty").exists + + +def test_license_is_deployed_with_permissions(host): + assert host.file("/etc/dotnet-packaging/LICENSE").exists + assert host.file("/etc/dotnet-packaging/LICENSE").mode == 0o755 diff --git a/molecule/self-contained/molecule/default/tests/test_default.py b/molecule/self-contained/molecule/default/tests/test_default.py index 66ef4d3..119bc39 100644 --- a/molecule/self-contained/molecule/default/tests/test_default.py +++ b/molecule/self-contained/molecule/default/tests/test_default.py @@ -26,3 +26,8 @@ def test_hidden_file_is_ignored(host): def test_empty_file_is_ignored(host): assert \ not host.file("/usr/share/self-contained-app/empty").exists + + +def test_license_is_deployed_with_permissions(host): + assert host.file("/etc/dotnet-packaging/LICENSE").exists + assert host.file("/etc/dotnet-packaging/LICENSE").mode == 0o755 diff --git a/molecule/self-contained/self-contained-app/self-contained-app.csproj b/molecule/self-contained/self-contained-app/self-contained-app.csproj index 970fb85..4ee33ec 100644 --- a/molecule/self-contained/self-contained-app/self-contained-app.csproj +++ b/molecule/self-contained/self-contained-app/self-contained-app.csproj @@ -21,5 +21,12 @@ + + + + /etc/dotnet-packaging/LICENSE + From b8f51e9354281d4a8d906bf3044b8cc7a689661d Mon Sep 17 00:00:00 2001 From: Frederik Carlier Date: Thu, 5 Dec 2019 11:13:37 +0100 Subject: [PATCH 2/3] Include sticky bit in test --- .../framework-dependent-app/framework-dependent-app.csproj | 2 +- .../molecule/default/tests/test_default.py | 4 ++-- .../self-contained/molecule/default/tests/test_default.py | 4 ++-- .../self-contained-app/self-contained-app.csproj | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj b/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj index 08f4de0..c1aca1e 100644 --- a/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj +++ b/molecule/framework-dependent/framework-dependent-app/framework-dependent-app.csproj @@ -23,7 +23,7 @@ - + /etc/dotnet-packaging/LICENSE diff --git a/molecule/framework-dependent/molecule/default/tests/test_default.py b/molecule/framework-dependent/molecule/default/tests/test_default.py index 8d20c51..390befb 100644 --- a/molecule/framework-dependent/molecule/default/tests/test_default.py +++ b/molecule/framework-dependent/molecule/default/tests/test_default.py @@ -28,6 +28,6 @@ def test_empty_file_is_ignored(host): not host.file("/usr/share/framework-dependent-app/empty").exists -def test_license_is_deployed_with_permissions(host): +def test_license_is_deployed_with_permissions_and_sticky_bit(host): assert host.file("/etc/dotnet-packaging/LICENSE").exists - assert host.file("/etc/dotnet-packaging/LICENSE").mode == 0o755 + assert host.file("/etc/dotnet-packaging/LICENSE").mode == 0o1755 diff --git a/molecule/self-contained/molecule/default/tests/test_default.py b/molecule/self-contained/molecule/default/tests/test_default.py index 119bc39..c56c698 100644 --- a/molecule/self-contained/molecule/default/tests/test_default.py +++ b/molecule/self-contained/molecule/default/tests/test_default.py @@ -28,6 +28,6 @@ def test_empty_file_is_ignored(host): not host.file("/usr/share/self-contained-app/empty").exists -def test_license_is_deployed_with_permissions(host): +def test_license_is_deployed_with_permissions_and_sticky_bit(host): assert host.file("/etc/dotnet-packaging/LICENSE").exists - assert host.file("/etc/dotnet-packaging/LICENSE").mode == 0o755 + assert host.file("/etc/dotnet-packaging/LICENSE").mode == 0o1755 diff --git a/molecule/self-contained/self-contained-app/self-contained-app.csproj b/molecule/self-contained/self-contained-app/self-contained-app.csproj index 4ee33ec..972604a 100644 --- a/molecule/self-contained/self-contained-app/self-contained-app.csproj +++ b/molecule/self-contained/self-contained-app/self-contained-app.csproj @@ -25,7 +25,7 @@ - + /etc/dotnet-packaging/LICENSE From bcc79edae1ab80b3725060dcbd4d75cbc9354de2 Mon Sep 17 00:00:00 2001 From: Frederik Carlier Date: Thu, 5 Dec 2019 11:14:55 +0100 Subject: [PATCH 3/3] ArchiveBuilder: Always set file mode to S_IFREG --- Packaging.Targets.Tests/ArchiveBuilderTests.cs | 2 +- Packaging.Targets/ArchiveBuilder.cs | 16 ++++++++++++++-- Packaging.Targets/IO/LinuxFileMode.cs | 5 +++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Packaging.Targets.Tests/ArchiveBuilderTests.cs b/Packaging.Targets.Tests/ArchiveBuilderTests.cs index 0556ca2..f6a1795 100644 --- a/Packaging.Targets.Tests/ArchiveBuilderTests.cs +++ b/Packaging.Targets.Tests/ArchiveBuilderTests.cs @@ -92,7 +92,7 @@ namespace Packaging.Targets.Tests Assert.Equal(string.Empty, script.LinkTo); // -rwxr-xr-x - Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR, script.Mode); + Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode); Assert.Equal("root", script.Owner); Assert.False(script.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "script.sh"), script.SourceFilename); diff --git a/Packaging.Targets/ArchiveBuilder.cs b/Packaging.Targets/ArchiveBuilder.cs index 9c82370..23b6a0f 100644 --- a/Packaging.Targets/ArchiveBuilder.cs +++ b/Packaging.Targets/ArchiveBuilder.cs @@ -359,10 +359,22 @@ namespace Packaging.Targets if (overridenFileMode != null) { - // We expect the user to specify the file mode in its octal representation. + // We expect the user to specify the file mode in its octal representation, + // such as 755. We don't expect users to specify the higher bits (e.g. + // S_IFREG). try { mode = (LinuxFileMode)Convert.ToUInt32(overridenFileMode, 8); + + LinuxFileMode fileType = mode & LinuxFileMode.FileTypeMask; + + if (fileType != LinuxFileMode.None && fileType != LinuxFileMode.S_IFREG) + { + this.Log.LogWarning($"An invalid file type of '{fileType}' has been set for file '{name}'. The file type will be reset to IFREG."); + } + + // Override the file type mask and hardcode it to S_IFREG. + mode = (mode & ~LinuxFileMode.FileTypeMask) | LinuxFileMode.S_IFREG; } catch (Exception) { @@ -375,7 +387,7 @@ namespace Packaging.Targets FileSize = (uint)fileStream.Length, Group = fileMetadata.GetGroup(), Owner = fileMetadata.GetOwner(), - Modified = File.GetLastAccessTimeUtc(entry), + Modified = File.GetLastWriteTimeUtc(entry), SourceFilename = entry, TargetPath = name, Sha256 = hash, diff --git a/Packaging.Targets/IO/LinuxFileMode.cs b/Packaging.Targets/IO/LinuxFileMode.cs index 1579b8b..3e3144c 100644 --- a/Packaging.Targets/IO/LinuxFileMode.cs +++ b/Packaging.Targets/IO/LinuxFileMode.cs @@ -9,6 +9,11 @@ namespace Packaging.Targets.IO [Flags] public enum LinuxFileMode : ushort { + /// + /// No file mode has been specified. + /// + None = 0, + /// /// Set user ID on execution ///