chore: Add a landlock test for path deny (#247)

* chore: Add a landlock test for path deny

* fix: Make sure sandbox is available:
This commit is contained in:
Abhisek Datta
2026-05-08 14:18:57 +00:00
committed by GitHub
parent 19d735cdd2
commit a31c201117
2 changed files with 36 additions and 0 deletions
+15
View File
@@ -13,6 +13,7 @@ import (
"github.com/safedep/pmg/internal/analytics" "github.com/safedep/pmg/internal/analytics"
"github.com/safedep/pmg/internal/ui" "github.com/safedep/pmg/internal/ui"
"github.com/safedep/pmg/internal/version" "github.com/safedep/pmg/internal/version"
"github.com/safedep/pmg/sandbox/platform"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@@ -104,6 +105,7 @@ func executeSetupInfo() error {
sandboxEntries := make(map[string]string) sandboxEntries := make(map[string]string)
sandboxEntries["Enabled"] = strconv.FormatBool(sandboxCfg.Enabled) sandboxEntries["Enabled"] = strconv.FormatBool(sandboxCfg.Enabled)
sandboxEntries["Enforce Always"] = strconv.FormatBool(sandboxCfg.EnforceAlways) sandboxEntries["Enforce Always"] = strconv.FormatBool(sandboxCfg.EnforceAlways)
sandboxEntries["Driver"] = resolveSandboxDriverName()
if len(sandboxCfg.Policies) > 0 { if len(sandboxCfg.Policies) > 0 {
pmNames := make([]string, 0, len(sandboxCfg.Policies)) pmNames := make([]string, 0, len(sandboxCfg.Policies))
@@ -145,6 +147,19 @@ func executeSetupInfo() error {
return nil return nil
} }
func resolveSandboxDriverName() string {
sb, err := platform.NewSandbox()
if err != nil {
return "unavailable"
}
if !sb.IsAvailable() {
return "unavailable"
}
return sb.Name()
}
// describeCloudCredentials reports whether SafeDep Cloud credentials can be // describeCloudCredentials reports whether SafeDep Cloud credentials can be
// resolved, and from where. The resolution order matches NewSyncClientBundle: // resolved, and from where. The resolution order matches NewSyncClientBundle:
// keychain first, then environment variables. No network calls are made. // keychain first, then environment variables. No network calls are made.
@@ -4,9 +4,13 @@ package platform
import ( import (
"os" "os"
"path/filepath"
"strings" "strings"
"testing" "testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
llsyscall "github.com/landlock-lsm/go-landlock/landlock/syscall" llsyscall "github.com/landlock-lsm/go-landlock/landlock/syscall"
"github.com/safedep/dry/utils" "github.com/safedep/dry/utils"
"github.com/safedep/pmg/sandbox" "github.com/safedep/pmg/sandbox"
@@ -298,6 +302,23 @@ func TestLandlockTranslatePolicy_MandatoryDenies(t *testing.T) {
} }
} }
func TestLandlockTranslatePolicy_AllowReadSuppression(t *testing.T) {
cwd, err := os.Getwd()
require.NoError(t, err)
cwdEnv := filepath.Clean(filepath.Join(cwd, ".env"))
policy := newTestPolicy()
policy.Filesystem.AllowRead = []string{cwdEnv}
abi := newLandlockABI(3)
ep, err := landlockTranslatePolicy(policy, abi)
require.NoError(t, err)
envEntry := findDenyPath(ep.DenyPaths, cwdEnv)
require.NotNil(t, envEntry)
assert.Equal(t, denyWrite, envEntry.Mode)
}
func TestLandlockTranslatePolicy_ImplicitRules(t *testing.T) { func TestLandlockTranslatePolicy_ImplicitRules(t *testing.T) {
policy := newTestPolicy() policy := newTestPolicy()
policy.Filesystem.AllowRead = []string{"/usr"} policy.Filesystem.AllowRead = []string{"/usr"}