X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=refresh.go;h=0138e7ddfbf6f93e29e13f318ee025064ac6b640;hb=d92ea43465ba141be89483d09a5625a6f593726b;hp=55c30e085e1437f904d58798695d771638aa4f24;hpb=eab627bf4869a34fbc8018d212121e30dbd5bc63;p=gocheese.git diff --git a/refresh.go b/refresh.go index 55c30e0..0138e7d 100644 --- a/refresh.go +++ b/refresh.go @@ -25,6 +25,7 @@ import ( "crypto/sha512" "encoding/hex" "encoding/json" + "errors" "hash" "io" "io/ioutil" @@ -427,6 +428,15 @@ func refreshDir( http.Error(w, "digest mismatch", http.StatusBadGateway) return false } + if digestStored, err := ioutil.ReadFile(path + "." + hashAlgo); err == nil && + bytes.Compare(digest, digestStored) != 0 { + err = errors.New("stored digest mismatch") + log.Println("error", r.RemoteAddr, "pypi", filename, err) + os.Remove(dst.Name()) + dst.Close() + http.Error(w, err.Error(), http.StatusInternalServerError) + return false + } if !NoSync { if err = dst.Sync(); err != nil { os.Remove(dst.Name()) @@ -551,8 +561,8 @@ func refreshDir( } path = path + "." + hashAlgo stat, err := os.Stat(path) - if err == nil && - (mtimeExists && stat.ModTime().Truncate(time.Second).Equal(mtime)) { + if err == nil && (!mtimeExists || + (mtimeExists && stat.ModTime().Truncate(time.Second).Equal(mtime))) { continue } if err != nil && !os.IsNotExist(err) {