Index: client/1.0/neutral/pkgr.eagle ================================================================== --- client/1.0/neutral/pkgr.eagle +++ client/1.0/neutral/pkgr.eagle @@ -107,10 +107,23 @@ return [uplevel 1 [list $procName] $args] } } + # + # NOTE: This procedure returns a string argument value, which may contain + # spaces, for use with the [exec] command. The value argument is + # the string value to format as an [exec] argument. + # + proc formatExecArgument { value } { + if {[isEagle]} then { + return [appendArgs \" $value \"] + } else { + return $value + } + } + # # NOTE: This procedure returns a formatted, possibly version-specific, # package name, for use in logging. The package argument is the # name of the package. The version argument is the version of the # package. @@ -366,11 +379,11 @@ # proc verifyOpenPgpSignature { fileName } { variable openPgpVerifyCommand if {[isEagle]} then { - set fileName [appendArgs \" $fileName \"] + set fileName [formatExecArgument $fileName] if {[catch { eval exec -success Success [subst $openPgpVerifyCommand] }] == 0} then { return true @@ -380,10 +393,62 @@ eval exec [subst $openPgpVerifyCommand] 2>@1 }] == 0} then { return true } } + + return false + } + + # + # NOTE: This procedure returns the name of the file containing the OpenPGP + # passphrase. This procedure is only used when creating an OpenPGP + # signature. There are no arguments. + # + proc getOpenPgpPassphraseFile {} { + global env + + if {[info exists env(GPG_PASSPHRASE_FILE)]} then { + set fileName [file normalize $env(GPG_PASSPHRASE_FILE)] + + if {[file exists $fileName]} then { + return $fileName + } else { + error "cannot sign with OpenPGP: passphrase file does not exist" + } + } else { + error "cannot sign with OpenPGP: passphrase file is not configured" + } + } + + # + # NOTE: This procedure attempts to create an OpenPGP signature for the + # specified (named) file. Non-zero is only returned if the OpenPGP + # signature is created successfully. A script error should not be + # raised by this procedure. The fileName argument must be the fully + # qualified path and file name of the file to be signed. + # + # + proc createOpenPgpSignature { fileName } { + global env + variable openPgpSignCommand + + if {[isEagle]} then { + set fileName [formatExecArgument $fileName] + + if {[catch { + eval exec -success Success [subst $openPgpSignCommand] + }] == 0} then { + return true + } + } else { + if {[catch { + eval exec [subst $openPgpSignCommand] 2>@1 + }] == 0} then { + return true + } + } return false } # @@ -404,11 +469,11 @@ if {[string length $varName] > 0} then { upvar 1 $varName result } if {[isEagle]} then { - set fileName [appendArgs \" $fileName \"] + set fileName [formatExecArgument $fileName] if {[catch { eval exec -nocarriagereturns -stdout output -stderr error \ [subst $openPgpImportCommand] } result] == 0} then { @@ -1950,10 +2015,28 @@ variable openPgpVerifyCommand; # DEFAULT: gpg2 --verify {${fileName}} if {![info exists openPgpVerifyCommand]} then { set openPgpVerifyCommand {gpg2 --verify {${fileName}}} } + + # + # NOTE: The command to use when creating OpenPGP signatures for the + # downloaded package scripts. This must be configured according + # to the implementation of OpenPGP in use. + # + variable openPgpSignCommand; # DEFAULT: gpg2 --detach-sign ... + + if {![info exists openPgpSignCommand]} then { + set openPgpSignCommand "" + + append openPgpSignCommand {gpg2 --detach-sign --armor} + + append openPgpSignCommand \ + { --passphrase-file [formatExecArgument [getOpenPgpPassphraseFile]]} + + append openPgpSignCommand { --batch --yes {${fileName}}} + } # # NOTE: Verify that the package script matches the current language # when called from the [package unknown] handler? # Index: client/1.0/neutral/pkgr.eagle.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.asc +++ client/1.0/neutral/pkgr.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYKp12AAoJEFAslq9JXcLZRewP/31IxcbUJwHQ3rwf/VfGoy1g -Q0fNGgiq83Vj2PwkIp/+Lq7U+7QJdroydY8vuwHBmfOVvyHhaRLG+5IsRvA9fqXo -2Rr3VeEka14wpWtslUwKihIDZpPkcpa0Vw85YR057XGSgd3fTihJy3KOw9k2jKnn -ljedD/lNqUcS+UloHgdsVzFAlYA5ABiBXGqpwyKNKHDzfQHLl/o0UfMlFXrxRgGN -oiH8zdbDrJfKTyWda/h9ibYxbD4dqDOKaGDX2fHkKgm75y8F8NkloxzAvsMli/Z/ -n/XIP2NmPMUZuMNJ9w8k+n/fzLAPeG/2OuxGpbCkV15qilgnpikA/pMZ258TYKur -4mjmVKjH4UBio2UXkGZshaV5iXYmybc+FWVDa3bH24sp0SQBt3395WKh50TFHvr5 -m7oPuA9n23nnCSaESs7Jx9fiEMwNX1wxPjnaziFJGm9+hUXjNtAo7Va7YOKjbpEs -koeoj3U7JTwD1M8smoOmhUTJ6yidPe+7+REJPtKL0XU+GYUiW5zcHPyY4q6yspG1 -/ZTQtTABA2Rnb5W4fEb9O1nBwglkUQieo/ARok58t5yw8oTmesE4A1PB0AMLsD/g -PjnpnbaYDI6EcuOnABnyjdf7VP4BWGxqemKXfjxZvZZU84oqXVGvR9dAbu7V16iC -oP6mEqanpqQTO13DeLID -=5HMJ +iQIcBAABCAAGBQJYVMeqAAoJEFAslq9JXcLZ7TMP/i1uqLXgToUaI4sFV8hoxPWQ +buaSI3nfNLJvv8jVJAfe7VolYJw9v0FHpeDTcVToVUDlcGy8W561stkgYn96f4tZ +C7jLGhqtv5IpESjXDm/1bf8QoJrLShx74W68/o1ae4uhlpPYxZg5vcSYFNS09h+r +BGNNza0rZS/4elml92cbsfc/h3Qn2A9chu34eiF0TC4zhCknrmU4LKD3yhlqpJWT +cDIGyKUecW+mSXJGltmmJL+IgO+tNwA72q91sJ3ZIsaEFdYMENZkwva9l7LxoK3j +tqJqknv6a8H1V9PKN9c+qUROq0c5+biwhgldfg1JTLD5ah1YcrZNB9idUen/ftf+ +QTQnx3nYPLl7fnMiM6S6svWZjSdZ98Fnpu4Jr1F3Im4DSp6wQcILYruGah9ac49Z +XB/yFpiit7ZhoTH1IVNYYQMdqbf/Wb6WBO5q4CxA000C6ANrk2Cm7Xh5wFlTafg3 +VsEzRNhOLfu8dO2CaOzTIfRo4QhwDJl9yDauei4sPo0J2FmbPTyMBnBwz/X14Gcv +st5sFAIsryfSx2c3rDpnj8aFHcQLi0DuB8QCR0p4aSKVb2lenmZfcA85PZYD662v +2x/41sP//rajbEz3YjJlnoK19acDwJSU6uFuvLEqklnd7TDFHl1YtnVVD6wvfSxV +F67DBCIaQLgfEMK45lzv +=waFs -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr.eagle.harpy ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy +++ client/1.0/neutral/pkgr.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - ebae7353-b388-44b3-b0a2-d1db1ec3080b + b26eb0c0-d25c-485f-9228-064fdd1f781a SHA512 Script - 2016-11-15T05:29:58.4012428Z + 2016-12-17T05:04:57.1298828Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgr.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy.asc +++ client/1.0/neutral/pkgr.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYKp14AAoJEFAslq9JXcLZSQwQAI4IRB3gPmqEVEZlnuqP73/U -+xELXV/byc3UK8A6V5m90wpRRXRPIJ+4Q0VH7i6+4FRUmCvlLjdCbWDQ+JbZFAjn -+q69jjvV76UA8ZicO+aE5/tFLWfz7SPcuAMw2eTdGV+S5mU+ln9IxByXYVFltG0g -lykbx1LDblvngvXeoRJfAXG/bBnXbBmLQogZeBGsSyPTKykMoa39pE9S2tWiRUB0 -dkDIZ1zIYSdx6Fa3LPgKF9fFHAFrjbFDJPn22fbCy3GYmT5QsvfQsUfv5mV1Lg+Q -4EauQandKNgXecRpF9bdvM/XDbqVF7FwneldRsgfNtyw+6V3WWfK00ObxKlIzC00 -LFFcWvhgWXEdKV+7gyEHm4EQGikez6J1Wl2M+pawRiMIyUFf2L1elnQRb+3iLRGt -VR/xYpfQ8j4nz4N5E8thjHYYU0yzR6AVeiDji2xOiwp5t74Ivi0qHtNRL0Y7vHBr -sIq+tTdyPNt59Bgt6YeK033H6Z251LaDcm6/3d0hZxHHWhBa99QzUS5wQMVi9Sdz -6i72cpHXbrVecwMFb8zNhT75BrKzoOMf1nx4ZzeLOymcefvhtwK4c1d9Z3+fQgjj -nenCRruHAswFvlR28khNb87L97mZN3XzKS4RkAMsctpSSqk+hU6Bmd2O7d0BiQx+ -w05waL/erR6oxTDpCWM8 -=QGBE +iQIcBAABCAAGBQJYVMetAAoJEFAslq9JXcLZE/8QAJY8LtO8YUPPhTY+RPAPw7vZ +R5W/eCOJ1Qy185xjLVYeb6V0ULxEAgY7iNw4mAkF7dZl1oQ56Xhao4L2sH4+nsMx +q/BU0Y/Bk0StpHpRvw10bWl/iVo4W2qK07gXepgL9zpI5pl/lJerSJA3LHd6RD8T +Au/2dw6d/N4ozkc3BTZf4PVZCKfLzVdQ1hEbpDTVlWd0fDS9sEywdML/OKgMzvbG +YfJrTwjF8sf3urJDbBolFxV430mdbIbLPyvkUCCiOjC3oJi0766B2Xsz+95fY16y +fMa8T96R2atRPCOolDN5jdIvCkP3VRKlts6OoNZ7nojiS0SsDsREgt5cEFWieXYg +JFf0Ln5wqjAWxRLl/MlZw2qoN4VQKD9OyS/m/lncNQ4udP4/AIeuQIIeJ0e/pjuQ +7jiYm9ZCyBcFT7ncU1gZjp9zQar4hWY1oF79RfiwAhno8Rz1CwAFNGKaJ7nenx+7 +/orx8qcDMFZnPh0fsLQJ2f+Z7TTFmLDuYvA8tDHZRWF4RO//+HYec2KZYIay1ZHI +6RiaNzwjNKI2RF9yJUS+6tGhhu1ck2MR5IXuQ9QFLXqke15qwkpMdKUTxu8N2K/L +FToN9rn9WfC6O1TeUGZkYr7q9hgZ7hBCn0iiLikrgafxuSVQ5eQCRyLD+04vn3nX +cXMvYolWIL6QiREGHpsW +=zSis -----END PGP SIGNATURE-----