Joey Hess [Mon, 27 Feb 2017 20:08:16 +0000 (16:08 -0400)]
inheritable annex.securehashesonly
* init: When annex.securehashesonly has been set with git-annex config,
copy that value to the annex.securehashesonly git config.
* config --set: As well as setting value in git-annex branch,
set local gitconfig. This is needed especially for
annex.securehashesonly, which is read only from local gitconfig and not
the git-annex branch.
doc/todo/sha1_collision_embedding_in_git-annex_keys.mdwn has the
rationalle for doing it this way. There's no perfect solution; this
seems to be the least-bad one.
This commit was supported by the NSF-funded DataLad project.
Joey Hess [Mon, 27 Feb 2017 19:29:23 +0000 (15:29 -0400)]
update
Joey Hess [Mon, 27 Feb 2017 19:21:24 +0000 (15:21 -0400)]
early cancelation of transfer that annex.securehashesonly prohibits
This avoids sending all the data to a remote, only to have it reject it
because it has annex.securehashesonly set. It assumes that local and
remote will have the same annex.securehashesonly setting in most cases.
If a remote does not have that set, and local does, the remote won't get
some content it would otherwise accept.
Also avoids downloading data that will not be added to the local object
store due to annex.securehashesonly.
Note that, while encrypted special remotes use a GPGHMAC key variety,
which is not collisiton resistent, Transfers are not used for such
keys, so this check is avoided. Which is what we want, so encrypted
special remotes still work.
This commit was sponsored by Ewen McNeill.
Joey Hess [Mon, 27 Feb 2017 19:04:03 +0000 (15:04 -0400)]
reorg
Joey Hess [Mon, 27 Feb 2017 19:02:38 +0000 (15:02 -0400)]
securehash matching
Added --securehash option to match files using a secure hash function, and
corresponding securehash preferred content expression.
This commit was sponsored by Ethan Aubin.
Joey Hess [Mon, 27 Feb 2017 18:48:07 +0000 (14:48 -0400)]
mapM_ = sequence_ . map
Joey Hess [Mon, 27 Feb 2017 17:50:00 +0000 (13:50 -0400)]
make fsck check annex.securehashesonly, and new tip for working around SHA1 collisions with git-annex
This commit was sponsored by andrea rota.
Joey Hess [Mon, 27 Feb 2017 17:01:32 +0000 (13:01 -0400)]
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.
Joey Hess [Mon, 27 Feb 2017 16:54:06 +0000 (12:54 -0400)]
add cryptographicallySecure
Note that GPGHMAC keys are not cryptographically secure, because their
content has no relation to the name of the key. So, things that use this
function to avoid sending keys to a remote will need to special case in
support for those keys. If GPGHMAC keys were accepted as
cryptographically secure, symlinks using them could be committed to a
git repo, and their content would be accepted into the repo, with no
guarantee that two repos got the same content, which is what we're aiming
to prevent.
Joey Hess [Sun, 26 Feb 2017 18:55:11 +0000 (14:55 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Sun, 26 Feb 2017 18:54:24 +0000 (14:54 -0400)]
fix osxapp target
Broken by recent changes to other targets
michalrus [Sun, 26 Feb 2017 00:59:21 +0000 (00:59 +0000)]
Added a comment
openmedi [Sat, 25 Feb 2017 20:35:53 +0000 (20:35 +0000)]
Added a comment
Joey Hess [Sat, 25 Feb 2017 19:00:22 +0000 (15:00 -0400)]
move thoughts
michalrus [Sat, 25 Feb 2017 18:53:27 +0000 (18:53 +0000)]
Joey Hess [Sat, 25 Feb 2017 18:49:44 +0000 (14:49 -0400)]
more thoughts
michalrus [Sat, 25 Feb 2017 18:47:36 +0000 (18:47 +0000)]
Added a comment
Joey Hess [Sat, 25 Feb 2017 16:55:38 +0000 (12:55 -0400)]
further thoughts
Joey Hess [Sat, 25 Feb 2017 01:06:29 +0000 (21:06 -0400)]
remove cryptohash from debian build-dep option
Joey Hess [Sat, 25 Feb 2017 00:56:26 +0000 (20:56 -0400)]
Removed support for building with the old cryptohash library.
Building with that library made git-annex not support SHA3; it's time for
that to always be supported in case SHA2 dominoes.
Joey Hess [Sat, 25 Feb 2017 00:03:36 +0000 (20:03 -0400)]
devblog
Joey Hess [Fri, 24 Feb 2017 23:54:36 +0000 (19:54 -0400)]
SHA1 collisions in key names was more exploitable than I thought
Yesterday's SHA1 collision attack could be used to generate eg:
SHA256-sfoo--whatever.good
SHA256-sfoo--whatever.bad
Such that they collide. A repository with the good one could have the
bad one swapped in and signed commits would still verify.
I've already mitigated this.
Joey Hess [Fri, 24 Feb 2017 22:51:57 +0000 (18:51 -0400)]
fix up Read instance incompatability caused by recent commit
9c4650358ca85a298b747bb897dbf4f8f891fa22 changed the Read instance for
Key.
I've checked all uses of that instance (by removing it and seeing what
breaks), and they're all limited to the webapp, except one.
That is GitAnnexDistribution's Read instance.
So,
9c4650358ca85a298b747bb897dbf4f8f891fa22 would have broken upgrades
of git-annex from downloads.kitenet.net. Once the .info files there got
updated for a new release, old releases would have failed to parse them
and never upgraded.
To fix this, I found a way to make the .info files that contain
GitAnnexDistribution values be readable by the old version of git-annex.
This commit was sponsored by Ewen McNeill.
Joey Hess [Fri, 24 Feb 2017 21:57:21 +0000 (17:57 -0400)]
update
Joey Hess [Fri, 24 Feb 2017 19:40:28 +0000 (15:40 -0400)]
Revert "pointer to a todo"
This reverts commit
ae3f6705eb8c4d33ef5983e8ccc6ade6cf0baff6.
todo is not ready yet
Joey Hess [Fri, 24 Feb 2017 19:16:56 +0000 (15:16 -0400)]
add KeyVariety type
Where before the "name" of a key and a backend was a string, this makes
it a concrete data type.
This is groundwork for allowing some varieties of keys to be disabled
in file2key, so git-annex won't use them at all.
Benchmarks ran in my big repo:
old git-annex info:
real 0m3.338s
user 0m3.124s
sys 0m0.244s
new git-annex info:
real 0m3.216s
user 0m3.024s
sys 0m0.220s
new git-annex find:
real 0m7.138s
user 0m6.924s
sys 0m0.252s
old git-annex find:
real 0m7.433s
user 0m7.240s
sys 0m0.232s
Surprising result; I'd have expected it to be slower since it now parses
all the key varieties. But, the parser is very simple and perhaps
sharing KeyVarieties uses less memory or something like that.
This commit was supported by the NSF-funded DataLad project.
Joey Hess [Fri, 24 Feb 2017 17:42:30 +0000 (13:42 -0400)]
factor non-type stuff out of Key
Joey Hess [Fri, 24 Feb 2017 17:41:29 +0000 (13:41 -0400)]
pointer to a todo
Joey Hess [Fri, 24 Feb 2017 16:28:10 +0000 (12:28 -0400)]
update
Joey Hess [Fri, 24 Feb 2017 15:53:59 +0000 (11:53 -0400)]
clarify that annex.backends is used when adding new files
Even if annex.backends does not include a backend, that does not prevent
git-annex commands from acting on a file using the missing backend.
(There's really no reason at all for annex.backends to be a list.)
Joey Hess [Fri, 24 Feb 2017 15:33:57 +0000 (11:33 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Fri, 24 Feb 2017 15:27:00 +0000 (11:27 -0400)]
add back a configure target
Otherwise, make reconfigures every time and then rebuilds all files.
I went too far in
3af9f5ed1a54f1df12f85f613826040e5e855817. All that's
needed is to make the configure target not use Build/SysConfig.hs as the
target name, so make won't delete that file after a failed build.
This commit was supported by the NSF-funded DataLad project
Joey Hess [Fri, 24 Feb 2017 15:17:07 +0000 (11:17 -0400)]
make file2key reject E* backend keys with a long extension
I am not happy that I had to put backend-specific code in file2key. But
it would be very difficult to avoid this layering violation.
Most of the time, when parsing a Key from a symlink target, git-annex
never looks up its Backend at all, so adding this check to a method of
the Backend object would not work.
The Key could be made to contain the appropriate
Backend, but since Backend is parameterized on an "a" that is fixed to
the Annex monad later, that would need Key to change to "Key a".
The only way to clean this up that I can see would be to have the Key
contain a LowlevelBackend, and put the validation in LowlevelBackend.
Perhaps later, but that would be an extensive change, so let's not do
it in this commit which may want to cherry-pick to backports.
This commit was sponsored by Ethan Aubin.
Added a comment
Joey Hess [Fri, 24 Feb 2017 06:14:36 +0000 (02:14 -0400)]
update
Joey Hess [Fri, 24 Feb 2017 05:21:54 +0000 (01:21 -0400)]
update
Joey Hess [Fri, 24 Feb 2017 04:29:37 +0000 (00:29 -0400)]
typo
Joey Hess [Fri, 24 Feb 2017 04:28:15 +0000 (00:28 -0400)]
updates
Joey Hess [Fri, 24 Feb 2017 04:21:58 +0000 (00:21 -0400)]
update
Joey Hess [Fri, 24 Feb 2017 04:17:25 +0000 (00:17 -0400)]
Tighten key parser to not accept keys containing a non-numeric fields, which could be used to embed data useful for a SHA1 attack against git.
Also todo about why this is important, and with some further hardening to
add.
This commit was sponsored by Ignacio on Patreon.
Joey Hess [Thu, 23 Feb 2017 23:08:03 +0000 (19:08 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Thu, 23 Feb 2017 23:06:06 +0000 (19:06 -0400)]
add para
unicell@9c0b0afd4176d5933d4b5c41350ebe61488c1df0 [Thu, 23 Feb 2017 23:05:10 +0000 (23:05 +0000)]
Added a comment
Joey Hess [Thu, 23 Feb 2017 22:37:02 +0000 (18:37 -0400)]
noCommit for PostReceive
This was noticed because it broke the datalad test suite, which pushed
to the remote and then fetched to check if it had received the expected
branches. Auto-init caused the git-annex branch on the remote to
diverge, breaking that test.
https://github.com/datalad/datalad/issues/1319#issuecomment-
281649518
The auto-init still happens, it's staged in the journal, and will be
commited by some later git-annex command when it runs. Which is fine,
it's the same as that later command doing the auto-init.
This commit was supported by the NSF-funded DataLad project
Joey Hess [Thu, 23 Feb 2017 21:11:46 +0000 (17:11 -0400)]
slight correction
Joey Hess [Thu, 23 Feb 2017 20:44:07 +0000 (16:44 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Thu, 23 Feb 2017 20:43:15 +0000 (16:43 -0400)]
devblog
Added a comment
lhunath@3b4ff15f4600f3276d1776a490b734fca0f5c245 [Wed, 22 Feb 2017 16:12:10 +0000 (16:12 +0000)]
db48x [Wed, 22 Feb 2017 00:37:22 +0000 (00:37 +0000)]
Joey Hess [Tue, 21 Feb 2017 17:55:41 +0000 (13:55 -0400)]
remove Build/SysConfig.hs target
The problem with that target was, if a target like git-annex that
depended on it failed for some reason, make would delete
Build/SysConfig.hs, since it knows it's an intermediate file. But, since
stack only builds that file once, that caused all subsequent make git-annex
builds to fail.
Also, this avoids a double stack build when building with stack. Since
stack has no configure stage, and the Build/SysConfig.hs target was
about running the configure stage, the only way to only build once is to
combine the targets like this.
This should work better on the autobuilders that build with stack.
This commit was sponsored by NSF-funded DataLad project
Added a comment
Joey Hess [Mon, 20 Feb 2017 20:37:04 +0000 (16:37 -0400)]
status: Pass --ignore-submodules=when option on to git status.
Didn't make --ignore-submodules without a value be handled because I can't
see a way to make optparse-applicative parse that. I've opened a bug
requesting a way to do that:
https://github.com/pcapriotti/optparse-applicative/issues/243
Joey Hess [Mon, 20 Feb 2017 20:14:43 +0000 (16:14 -0400)]
question
Joey Hess [Mon, 20 Feb 2017 19:59:55 +0000 (15:59 -0400)]
make curl show http errors to stderr
* Run curl with -S, so HTTP errors are displayed, even when
it's otherwise silent.
* When downloading in --json or --quiet mode, use curl in preference
to wget, since curl is able to display only errors to stderr, unlike
wget.
This does mean that downloadQuiet is only silent on stdout, not necessarily
on stderr, which affects a couple other calls of it. For example,
downloading the .git/config of a http remote may show an error message now,
perhaps with slightly suboptimal formatting due to other output.
Joey Hess [Mon, 20 Feb 2017 19:44:43 +0000 (15:44 -0400)]
update
Joey Hess [Mon, 20 Feb 2017 19:44:14 +0000 (15:44 -0400)]
improve layout
Joey Hess [Mon, 20 Feb 2017 19:25:57 +0000 (15:25 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Mon, 20 Feb 2017 19:14:56 +0000 (15:14 -0400)]
Run wget with -nv instead of -q, so it will display HTTP errors.
This adds one extra line of output when a download is successful,
after the progress bar. I don't much like that, but wget does not provide a
way to show HTTP errors without it.
removed
Added a comment
Added a comment
Joey Hess [Mon, 20 Feb 2017 18:49:03 +0000 (14:49 -0400)]
comment
Joey Hess [Mon, 20 Feb 2017 18:37:59 +0000 (14:37 -0400)]
comment
andrew [Mon, 20 Feb 2017 18:11:03 +0000 (18:11 +0000)]
Added a comment: the problem files
Joey Hess [Mon, 20 Feb 2017 17:44:55 +0000 (13:44 -0400)]
adjust: Fix behavior when used in a repository that contains submodules.
Also fixed the LsFiles parser to not assume its output has a fixed width
type field.
Joey Hess [Mon, 20 Feb 2017 17:11:19 +0000 (13:11 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Mon, 20 Feb 2017 17:10:48 +0000 (13:10 -0400)]
comment
Joey Hess [Mon, 20 Feb 2017 16:58:08 +0000 (12:58 -0400)]
mention GIT_SSH_COMMAND
Joey Hess [Mon, 20 Feb 2017 16:55:58 +0000 (12:55 -0400)]
comment
Joey Hess [Mon, 20 Feb 2017 16:49:16 +0000 (12:49 -0400)]
comment
Joey Hess [Mon, 20 Feb 2017 16:24:15 +0000 (12:24 -0400)]
remove
I've seen this thing, whatever it is, mentioned in spam links before,
so even if it's valid for some OS (probably not the one being asked
about), it's verboten here.
Joey Hess [Mon, 20 Feb 2017 16:23:22 +0000 (12:23 -0400)]
comment
Joey Hess [Mon, 20 Feb 2017 16:21:35 +0000 (12:21 -0400)]
git-annex.cabal: Make crypto-api a dependency even when built w/o webapp and test suite.
The p2p code made it always be needed.
This commit was sponsored by Anthony DeRobertis on Patreon.
Joey Hess [Mon, 20 Feb 2017 16:17:09 +0000 (12:17 -0400)]
comment
Joey Hess [Mon, 20 Feb 2017 16:07:20 +0000 (12:07 -0400)]
comment
openmedi [Sun, 19 Feb 2017 22:03:26 +0000 (22:03 +0000)]
Added a comment
m@2be305d83b52202ec4364229a836f463a6701336 [Sun, 19 Feb 2017 19:03:24 +0000 (19:03 +0000)]
mhauru [Sun, 19 Feb 2017 18:48:59 +0000 (18:48 +0000)]
openmedi [Sun, 19 Feb 2017 15:27:08 +0000 (15:27 +0000)]
Added a comment
openmedi [Sat, 18 Feb 2017 13:42:45 +0000 (13:42 +0000)]
openmedi [Sat, 18 Feb 2017 13:41:57 +0000 (13:41 +0000)]
Joey Hess [Fri, 17 Feb 2017 19:58:32 +0000 (15:58 -0400)]
linkify
Joey Hess [Fri, 17 Feb 2017 19:56:38 +0000 (15:56 -0400)]
devblog
Joey Hess [Fri, 17 Feb 2017 19:43:16 +0000 (15:43 -0400)]
documentation updates for new receive.denyCurrentBranch=updateInstead support
This commit was sponsored by andrea rota.
Joey Hess [Fri, 17 Feb 2017 19:21:39 +0000 (15:21 -0400)]
sync hack to make updateInstead work on eg FAT
sync: When syncing with a local repository located on a crippled
filesystem, run the post-receive hook there, since it wouldn't get run
otherwise. This makes pushing to repos on FAT-formatted removable drives
update them when receive.denyCurrentBranch=updateInstead.
Made Remote.Git export onLocal, which was cleaned up to not have so many
caveats about its use.
This commit was sponsored by Jeff Goeke-Smith on Patreon.
Joey Hess [Fri, 17 Feb 2017 18:30:18 +0000 (14:30 -0400)]
have onLocal stop any coprocesses, not only cat-file
I have not seen any other coprocesses being started, but let's avoid
problems if any do for whatever reason.
Joey Hess [Fri, 17 Feb 2017 18:04:43 +0000 (14:04 -0400)]
post-recive hook to make updateInstead work in direct mode and adjusted branches
* Added post-recieve hook, which makes updateInstead work with direct
mode and adjusted branches.
* init: Set up the post-receive hook.
This commit was sponsored by Fernando Jimenez on Patreon.
Joey Hess [Fri, 17 Feb 2017 18:00:01 +0000 (14:00 -0400)]
make git-annex:git-annex push quiet again
Recent changes had a side effect of displaying errors in the fairly
common case when this push fails. Since the synced/git-annex push
is always forced, those errors are noise, so hide again.
This means 3 separate pushes are done now, where before it only made 2.
A bit more expensive, but ssh connection caching eliminates most of
the costs.
This commit was sponsored by Boyd Stephen Smith Jr. on Patreon.
Joey Hess [Fri, 17 Feb 2017 16:57:55 +0000 (12:57 -0400)]
thoughts
Joey Hess [Fri, 17 Feb 2017 16:36:23 +0000 (12:36 -0400)]
comment
Joey Hess [Fri, 17 Feb 2017 16:31:47 +0000 (12:31 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com
yarikoptic [Fri, 17 Feb 2017 15:30:32 +0000 (15:30 +0000)]
initial whining
lasitus [Fri, 17 Feb 2017 03:23:46 +0000 (03:23 +0000)]
Added a comment
yarikoptic [Fri, 17 Feb 2017 01:57:11 +0000 (01:57 +0000)]