From d9c87559b528e44e350bb5e38dfdab3c9689ac35 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sun, 24 Jan 2016 21:13:24 +0100 Subject: [PATCH] s3/local backend: Fix error for overwriting files --- backend/local/local.go | 13 ++++++++----- backend/s3/s3.go | 8 ++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/backend/local/local.go b/backend/local/local.go index 9a6409a75..b98f118de 100644 --- a/backend/local/local.go +++ b/backend/local/local.go @@ -171,16 +171,19 @@ func (b *Local) Save(h backend.Handle, p []byte) (err error) { f := filename(b.p, h.Type, h.Name) - // create directories if necessary, ignore errors - if h.Type == backend.Data { - os.MkdirAll(filepath.Dir(f), backend.Modes.Dir) - } - // test if new path already exists if _, err := os.Stat(f); err == nil { return fmt.Errorf("Rename(): file %v already exists", f) } + // create directories if necessary, ignore errors + if h.Type == backend.Data { + err = os.MkdirAll(filepath.Dir(f), backend.Modes.Dir) + if err != nil { + return err + } + } + err = os.Rename(tmpfile.Name(), f) debug.Log("local.Save", "save %v: rename %v -> %v: %v", h, filepath.Base(tmpfile.Name()), filepath.Base(f), err) diff --git a/backend/s3/s3.go b/backend/s3/s3.go index a8f69c4c9..097981b79 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -2,6 +2,7 @@ package s3 import ( "bytes" + "errors" "io" "strings" @@ -103,6 +104,13 @@ func (be S3Backend) Save(h backend.Handle, p []byte) (err error) { path := s3path(h.Type, h.Name) + // Check key does not already exist + _, err = be.client.StatObject(be.bucketname, path) + if err == nil { + debug.Log("s3.blob.Finalize()", "%v already exists", h) + return errors.New("key already exists") + } + <-be.connChan defer func() { be.connChan <- struct{}{}