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.DaemonStatus
|
||||||
import Assistant.Alert
|
import Assistant.Alert
|
||||||
import Utility.NotificationBroadcaster
|
import Utility.NotificationBroadcaster
|
||||||
import Utility.Tmp
|
|
||||||
import qualified Annex
|
import qualified Annex
|
||||||
import qualified Build.SysConfig
|
import qualified Build.SysConfig
|
||||||
import qualified Utility.Url as Url
|
|
||||||
import qualified Annex.Url as Url
|
|
||||||
import qualified Git.Version
|
import qualified Git.Version
|
||||||
import Types.Distribution
|
import Types.Distribution
|
||||||
#ifdef WITH_WEBAPP
|
#ifdef WITH_WEBAPP
|
||||||
|
@ -62,7 +59,7 @@ upgraderThread urlrenderer = namedThread "Upgrader" $
|
||||||
checkUpgrade :: UrlRenderer -> Assistant ()
|
checkUpgrade :: UrlRenderer -> Assistant ()
|
||||||
checkUpgrade urlrenderer = do
|
checkUpgrade urlrenderer = do
|
||||||
debug [ "Checking if an upgrade is available." ]
|
debug [ "Checking if an upgrade is available." ]
|
||||||
go =<< getDistributionInfo
|
go =<< downloadDistributionInfo
|
||||||
where
|
where
|
||||||
go Nothing = debug [ "Failed to check if upgrade is available." ]
|
go Nothing = debug [ "Failed to check if upgrade is available." ]
|
||||||
go (Just d) = do
|
go (Just d) = do
|
||||||
|
@ -86,16 +83,3 @@ canUpgrade urgency urlrenderer d = ifM autoUpgradeEnabled
|
||||||
noop
|
noop
|
||||||
#endif
|
#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.ThreadScheduler
|
||||||
import Utility.Tmp
|
import Utility.Tmp
|
||||||
import Utility.UserInfo
|
import Utility.UserInfo
|
||||||
|
import Utility.Gpg
|
||||||
import qualified Utility.Lsof as Lsof
|
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 qualified Data.Map as M
|
||||||
import Data.Tuple.Utils
|
import Data.Tuple.Utils
|
||||||
|
@ -313,3 +317,48 @@ upgradeSanityCheck = ifM usingDistribution
|
||||||
|
|
||||||
usingDistribution :: IO Bool
|
usingDistribution :: IO Bool
|
||||||
usingDistribution = isJust <$> getEnv "GIT_ANNEX_STANDLONE_ENV"
|
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"
|
ln -sf git-annex "$(LINUXSTANDALONE_DEST)/bin/git-annex-shell"
|
||||||
zcat standalone/licences.gz > $(LINUXSTANDALONE_DEST)/LICENSE
|
zcat standalone/licences.gz > $(LINUXSTANDALONE_DEST)/LICENSE
|
||||||
cp doc/logo_16x16.png doc/logo.svg $(LINUXSTANDALONE_DEST)
|
cp doc/logo_16x16.png doc/logo.svg $(LINUXSTANDALONE_DEST)
|
||||||
|
cp standalone/trustedkeys.gpg $(LINUXSTANDALONE_DEST)
|
||||||
|
|
||||||
./Build/Standalone "$(LINUXSTANDALONE_DEST)"
|
./Build/Standalone "$(LINUXSTANDALONE_DEST)"
|
||||||
|
|
||||||
|
@ -150,6 +151,7 @@ osxapp: Build/Standalone Build/OSXMkLibs
|
||||||
ln -sf git-annex "$(OSXAPP_BASE)/git-annex-shell"
|
ln -sf git-annex "$(OSXAPP_BASE)/git-annex-shell"
|
||||||
gzcat standalone/licences.gz > $(OSXAPP_BASE)/LICENSE
|
gzcat standalone/licences.gz > $(OSXAPP_BASE)/LICENSE
|
||||||
cp $(OSXAPP_BASE)/LICENSE tmp/build-dmg/LICENSE.txt
|
cp $(OSXAPP_BASE)/LICENSE tmp/build-dmg/LICENSE.txt
|
||||||
|
cp standalone/trustedkeys.gpg $(OSXAPP_BASE)
|
||||||
|
|
||||||
./Build/Standalone $(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
|
git-annex (5.20140421) unstable; urgency=medium
|
||||||
|
|
||||||
* assistant: Now detects immediately when other repositories push
|
* 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
|
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
|
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
|
mkdir -p ../../tmp/4.0 ../../tmp/4.3
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,7 @@ buildtree () {
|
||||||
$cmd echo "exec $base/lib/lib.start.so" >> "$base/runshell"
|
$cmd echo "exec $base/lib/lib.start.so" >> "$base/runshell"
|
||||||
$cmd chmod 755 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 cat "$base/lib/lib.version.so" > "$base/installed-version"
|
||||||
$cmd echo "Installation complete"
|
$cmd echo "Installation complete"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue