From 9ca22007756f6e6b6e356c1106deb11624db38cd Mon Sep 17 00:00:00 2001 From: Ying Li Date: Tue, 22 Dec 2015 14:11:41 -0800 Subject: [PATCH] Update filestore to first remove existing metadata before setting metadata. This would let it remove corrupt or bad-state metadata. Signed-off-by: Ying Li --- tuf/store/filestore.go | 3 +++ tuf/store/filestore_test.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/tuf/store/filestore.go b/tuf/store/filestore.go index b01b117588..7e7ea02f8c 100644 --- a/tuf/store/filestore.go +++ b/tuf/store/filestore.go @@ -75,6 +75,9 @@ func (f *FilesystemStore) SetMeta(name string, meta []byte) error { return err } + // if something already exists, just delete it and re-write it + os.RemoveAll(path) + // Write the file to disk if err = ioutil.WriteFile(path, meta, 0600); err != nil { return err diff --git a/tuf/store/filestore_test.go b/tuf/store/filestore_test.go index ff79c5ebda..ea013fca2a 100644 --- a/tuf/store/filestore_test.go +++ b/tuf/store/filestore_test.go @@ -4,6 +4,7 @@ import ( "io/ioutil" "os" "path" + "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -57,6 +58,24 @@ func TestSetMetaWithNoParentDirectory(t *testing.T) { assert.Equal(t, testContent, content, "Content written to file was corrupted.") } +// if something already existed there, remove it first and write a new file +func TestSetMetaRemovesExistingFileBeforeWriting(t *testing.T) { + s, err := NewFilesystemStore(testDir, "metadata", "json", "targets") + assert.Nil(t, err, "Initializing FilesystemStore returned unexpected error: %v", err) + defer os.RemoveAll(testDir) + + // make a directory where we want metadata to go + os.Mkdir(filepath.Join(testDir, "metadata", "root.json"), 0700) + + testContent := []byte("test data") + err = s.SetMeta("root", testContent) + assert.NoError(t, err, "SetMeta returned unexpected error: %v", err) + + content, err := ioutil.ReadFile(path.Join(testDir, "metadata", "root.json")) + assert.NoError(t, err, "Error reading file: %v", err) + assert.Equal(t, testContent, content, "Content written to file was corrupted.") +} + func TestGetMeta(t *testing.T) { s, err := NewFilesystemStore(testDir, "metadata", "json", "targets") assert.Nil(t, err, "Initializing FilesystemStore returned unexpected error: %v", err)