annex.securehashesonly
authorJoey Hess <joeyh@joeyh.name>
Mon, 27 Feb 2017 17:01:32 +0000 (13:01 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 27 Feb 2017 17:33:59 +0000 (13:33 -0400)
commit07f1e638ee9d693f7df62b5c738a463805b8b649
tree115b754283723b71858935791b271dd463405991
parent0fda7c08d04d6ce83a4562bbb8b1caf89082f4a3
annex.securehashesonly

Cryptographically secure hashes can be forced to be used in a repository,
by setting annex.securehashesonly. This does not prevent the git repository
from containing files with insecure hashes, but it does prevent the content
of such files from being pulled into .git/annex/objects from another
repository.

We want to make sure that at no point does git-annex accept content into
.git/annex/objects that is hashed with an insecure key. Here's how it
was done:

* .git/annex/objects/xx/yy/KEY/ is kept frozen, so nothing can be
  written to it normally
* So every place that writes content must call, thawContent or modifyContent.
  We can audit for these, and be sure we've considered all cases.
* The main functions are moveAnnex, and linkToAnnex; these were made to
  check annex.securehashesonly, and are the main security boundary
  for annex.securehashesonly.
* Most other calls to modifyContent deal with other files in the KEY
  directory (inode cache etc). The other ones that mess with the content
  are:
- Annex.Direct.toDirectGen, in which content already in the
  annex directory is moved to the direct mode file, so not relevant.
- fix and lock, which don't add new content
- Command.ReKey.linkKey, which manually unlocks it to make a
  copy.
* All other calls to thawContent appear safe.

Made moveAnnex return a Bool, so checked all callsites and made them
deal with a failure in appropriate ways.

linkToAnnex simply returns LinkAnnexFailed; all callsites already deal
with it failing in appropriate ways.

This commit was sponsored by Riku Voipio.
Annex/Content.hs
Annex/Direct.hs
Annex/Ingest.hs
CHANGELOG
Command/AddUrl.hs
Command/Indirect.hs
Command/Reinject.hs
Types/GitConfig.hs