Standalone builds now check gpg signatures before upgrading.
This commit is contained in:
parent
4887f8f860
commit
ca496b6a97
6 changed files with 60 additions and 17 deletions
|
@ -18,11 +18,8 @@ import Assistant.Types.UrlRenderer
|
|||
import Assistant.DaemonStatus
|
||||
import Assistant.Alert
|
||||
import Utility.NotificationBroadcaster
|
||||
import Utility.Tmp
|
||||
import qualified Annex
|
||||
import qualified Build.SysConfig
|
||||
import qualified Utility.Url as Url
|
||||
import qualified Annex.Url as Url
|
||||
import qualified Git.Version
|
||||
import Types.Distribution
|
||||
#ifdef WITH_WEBAPP
|
||||
|
@ -62,7 +59,7 @@ upgraderThread urlrenderer = namedThread "Upgrader" $
|
|||
checkUpgrade :: UrlRenderer -> Assistant ()
|
||||
checkUpgrade urlrenderer = do
|
||||
debug [ "Checking if an upgrade is available." ]
|
||||
go =<< getDistributionInfo
|
||||
go =<< downloadDistributionInfo
|
||||
where
|
||||
go Nothing = debug [ "Failed to check if upgrade is available." ]
|
||||
go (Just d) = do
|
||||
|
@ -86,16 +83,3 @@ canUpgrade urgency urlrenderer d = ifM autoUpgradeEnabled
|
|||
noop
|
||||
#endif
|
||||
)
|
||||
|
||||
getDistributionInfo :: Assistant (Maybe GitAnnexDistribution)
|
||||
getDistributionInfo = do
|
||||
uo <- liftAnnex Url.getUrlOptions
|
||||
liftIO $ withTmpFile "git-annex.tmp" $ \tmpfile h -> do
|
||||
hClose h
|
||||
ifM (Url.downloadQuiet distributionInfoUrl tmpfile uo)
|
||||
( readish <$> readFileStrict tmpfile
|
||||
, return Nothing
|
||||
)
|
||||
|
||||
distributionInfoUrl :: String
|
||||
distributionInfoUrl = fromJust Build.SysConfig.upgradelocation ++ ".info"
|
||||
|
|
|
@ -32,7 +32,11 @@ import Config.Files
|
|||
import Utility.ThreadScheduler
|
||||
import Utility.Tmp
|
||||
import Utility.UserInfo
|
||||
import Utility.Gpg
|
||||
import qualified Utility.Lsof as Lsof
|
||||
import qualified Build.SysConfig
|
||||
import qualified Utility.Url as Url
|
||||
import qualified Annex.Url as Url
|
||||
|
||||
import qualified Data.Map as M
|
||||
import Data.Tuple.Utils
|
||||
|
@ -313,3 +317,48 @@ upgradeSanityCheck = ifM usingDistribution
|
|||
|
||||
usingDistribution :: IO Bool
|
||||
usingDistribution = isJust <$> getEnv "GIT_ANNEX_STANDLONE_ENV"
|
||||
|
||||
downloadDistributionInfo :: Assistant (Maybe GitAnnexDistribution)
|
||||
downloadDistributionInfo = do
|
||||
uo <- liftAnnex Url.getUrlOptions
|
||||
liftIO $ withTmpDir "git-annex.tmp" $ \tmpdir -> do
|
||||
let infof = tmpdir </> "info"
|
||||
let sigf = infof ++ ".sig"
|
||||
ifM (Url.downloadQuiet distributionInfoUrl infof uo
|
||||
<&&> Url.downloadQuiet distributionInfoSigUrl sigf uo
|
||||
<&&> verifyDistributionSig sigf)
|
||||
( readish <$> readFileStrict infof
|
||||
, return Nothing
|
||||
)
|
||||
|
||||
distributionInfoUrl :: String
|
||||
distributionInfoUrl = fromJust Build.SysConfig.upgradelocation ++ ".info"
|
||||
|
||||
distributionInfoSigUrl :: String
|
||||
distributionInfoSigUrl = distributionInfoUrl ++ ".sig"
|
||||
|
||||
{- Verifies that a file from the git-annex distribution has a valid
|
||||
- signature. Pass the detached .sig file; the file to be verified should
|
||||
- be located next to it.
|
||||
-
|
||||
- The gpg keyring used to verify the signature is located in
|
||||
- trustedkeys.gpg, next to the git-annex program.
|
||||
-}
|
||||
verifyDistributionSig :: FilePath -> IO Bool
|
||||
verifyDistributionSig sig = do
|
||||
p <- readProgramFile
|
||||
if isAbsolute p
|
||||
then withTmpDir "git-annex-gpg.tmp" $ \gpgtmp -> do
|
||||
let trustedkeys = takeDirectory p </> "trustedkeys.gpg"
|
||||
boolSystem gpgcmd
|
||||
[ Param "--no-default-keyring"
|
||||
, Param "--no-auto-check-trustdb"
|
||||
, Param "--no-options"
|
||||
, Param "--homedir"
|
||||
, File gpgtmp
|
||||
, Param "--keyring"
|
||||
, File trustedkeys
|
||||
, Param "--verify"
|
||||
, File sig
|
||||
]
|
||||
else return False
|
||||
|
|
2
Makefile
2
Makefile
|
@ -120,6 +120,7 @@ linuxstandalone-nobuild: Build/Standalone Build/LinuxMkLibs
|
|||
ln -sf git-annex "$(LINUXSTANDALONE_DEST)/bin/git-annex-shell"
|
||||
zcat standalone/licences.gz > $(LINUXSTANDALONE_DEST)/LICENSE
|
||||
cp doc/logo_16x16.png doc/logo.svg $(LINUXSTANDALONE_DEST)
|
||||
cp standalone/trustedkeys.gpg $(LINUXSTANDALONE_DEST)
|
||||
|
||||
./Build/Standalone "$(LINUXSTANDALONE_DEST)"
|
||||
|
||||
|
@ -150,6 +151,7 @@ osxapp: Build/Standalone Build/OSXMkLibs
|
|||
ln -sf git-annex "$(OSXAPP_BASE)/git-annex-shell"
|
||||
gzcat standalone/licences.gz > $(OSXAPP_BASE)/LICENSE
|
||||
cp $(OSXAPP_BASE)/LICENSE tmp/build-dmg/LICENSE.txt
|
||||
cp standalone/trustedkeys.gpg $(OSXAPP_BASE)
|
||||
|
||||
./Build/Standalone $(OSXAPP_BASE)
|
||||
|
||||
|
|
6
debian/changelog
vendored
6
debian/changelog
vendored
|
@ -1,3 +1,9 @@
|
|||
git-annex (5.20140422) UNRELEASED; urgency=medium
|
||||
|
||||
* Standalone builds now check gpg signatures before upgrading.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Wed, 23 Apr 2014 12:43:39 -0400
|
||||
|
||||
git-annex (5.20140421) unstable; urgency=medium
|
||||
|
||||
* assistant: Now detects immediately when other repositories push
|
||||
|
|
|
@ -76,6 +76,7 @@ build: start
|
|||
cp $(GIT_ANNEX_ANDROID_SOURCETREE)/git/git.tar.gz $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git.tar.gz.so
|
||||
|
||||
git rev-parse HEAD > $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.version.so
|
||||
cp ../trustedkeys.gpg $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.trustedkeys.so
|
||||
|
||||
mkdir -p ../../tmp/4.0 ../../tmp/4.3
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ buildtree () {
|
|||
$cmd echo "exec $base/lib/lib.start.so" >> "$base/runshell"
|
||||
$cmd chmod 755 runshell
|
||||
|
||||
$cmd cat "$base/lib/lib.trustedkeys.so" > "$base/bin/trustedkeys.gpg"
|
||||
$cmd cat "$base/lib/lib.version.so" > "$base/installed-version"
|
||||
$cmd echo "Installation complete"
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue