diff --git a/internal/configfile/config_file.go b/internal/configfile/config_file.go index 3fd16c7..753dd72 100644 --- a/internal/configfile/config_file.go +++ b/internal/configfile/config_file.go @@ -169,7 +169,7 @@ func LoadConfFile(filename string, password []byte) ([]byte, *ConfFile, error) { `+"\033[0m") - return nil, nil, fmt.Errorf("Deprecated filesystem") + return nil, nil, exitcodes.NewErr("Deprecated filesystem", exitcodes.DeprecatedFS) } if len(password) == 0 { // We have validated the config file, but without a password we cannot diff --git a/internal/exitcodes/exitcodes.go b/internal/exitcodes/exitcodes.go index 36f2aae..fc65166 100644 --- a/internal/exitcodes/exitcodes.go +++ b/internal/exitcodes/exitcodes.go @@ -63,6 +63,8 @@ const ( Profiler = 25 // FsckErrors - the filesystem check found errors FsckErrors = 26 + // DeprecatedFS - this filesystem is deprecated + DeprecatedFS = 27 ) // Err wraps an error with an associated numeric exit code diff --git a/tests/fsck/fsck_test.go b/tests/fsck/fsck_test.go index b5bbf84..77f94c3 100644 --- a/tests/fsck/fsck_test.go +++ b/tests/fsck/fsck_test.go @@ -1,7 +1,9 @@ package fsck import ( + "os" "os/exec" + "strings" "testing" "github.com/rfjakob/gocryptfs/internal/exitcodes" @@ -18,3 +20,41 @@ func TestBrokenFsV14(t *testing.T) { t.Errorf("wrong exit code, have=%d want=%d", code, exitcodes.FsckErrors) } } + +func TestExampleFses(t *testing.T) { + dirfd, err := os.Open("../example_filesystems") + if err != nil { + t.Fatal(err) + } + var fsNames []string + entries, err := dirfd.Readdir(0) + if err != nil { + t.Fatal(err) + } + for _, e := range entries { + if !e.IsDir() { + continue + } + if strings.Contains(e.Name(), "reverse") { + continue + } + if e.Name() == "content" { + continue + } + fsNames = append(fsNames, e.Name()) + } + for _, n := range fsNames { + path := "../example_filesystems/" + n + cmd := exec.Command(test_helpers.GocryptfsBinary, "-fsck", "-extpass", "echo test", path) + outBin, err := cmd.CombinedOutput() + out := string(outBin) + code := test_helpers.ExtractCmdExitCode(err) + if code == exitcodes.DeprecatedFS { + continue + } + if code != 0 { + t.Log(out) + t.Errorf("fsck returned code %d but fs should be clean", code) + } + } +}