git-annex-shell: Ensure that received files can be read. Files transferred from some Android devices may have very broken permissions as received.

This commit is contained in:
Joey Hess 2013-05-06 17:30:57 -04:00
parent a0f6dab8de
commit adde00f4f3
3 changed files with 18 additions and 8 deletions

View file

@ -470,9 +470,8 @@ preseedTmp key file = go =<< inAnnex key
liftIO $ copyFileExternal s file
)
{- Blocks writing to an annexed file. The file is made unwritable
- to avoid accidental edits. core.sharedRepository may change
- who can read it. -}
{- Blocks writing to an annexed file, and modifies file permissions to
- allow reading it, per core.sharedRepository setting. -}
freezeContent :: FilePath -> Annex ()
freezeContent file = unlessM crippledFileSystem $
liftIO . go =<< fromRepo getSharedRepository
@ -483,7 +482,9 @@ freezeContent file = unlessM crippledFileSystem $
go AllShared = modifyFileMode file $
removeModes writeModes .
addModes readModes
go _ = preventWrite file
go _ = modifyFileMode file $
removeModes writeModes .
addModes [ownerReadMode]
{- Allows writing to an annexed file that freezeContent was called on
- before. -}

View file

@ -44,13 +44,19 @@ start key = ifM (inAnnex key)
go tmp = do
opts <- filterRsyncSafeOptions . maybe [] words
<$> getField "RsyncOptions"
ifM (liftIO $ rsyncServerReceive (map Param opts) tmp)
( ifM (isJust <$> Fields.getField Fields.direct)
ok <- liftIO $ rsyncServerReceive (map Param opts) tmp
-- The file could have been received with permissions that
-- do not allow reading it, so this is done before the
-- directcheck.
freezeContent tmp
if ok
then ifM (isJust <$> Fields.getField Fields.direct)
( directcheck tmp
, return True
)
, return False
)
else return False
{- If the sending repository uses direct mode, the file
- it sends could be modified as it's sending it. So check
- that the right size file was received, and that the key/value

3
debian/changelog vendored
View file

@ -12,6 +12,9 @@ git-annex (4.20130502) UNRELEASED; urgency=low
* direct: Fix a bug that could cause some files to be left in indirect mode.
* When initializing a directory special remote with a relative path,
the path is made absolute.
* git-annex-shell: Ensure that received files can be read. Files
transferred from some Android devices may have very broken permissions
as received.
-- Joey Hess <joeyh@debian.org> Thu, 02 May 2013 20:39:19 -0400