Index: client/1.0/pkgd.eagle ================================================================== --- client/1.0/pkgd.eagle +++ client/1.0/pkgd.eagle @@ -458,11 +458,11 @@ proc resetCookieAndLoginSimple {} { variable publicPassword variable publicUserName set apiKey [lindex [::PackageRepository::getApiKeys \ - [getDownloadVarNamePrefix]] 0] + [getDownloadVarNamePrefix] true] 0] if {[string length $apiKey] > 0} then { return [resetCookieAndLogin $apiKey $apiKey] } Index: client/1.0/pkgd.eagle.asc ================================================================== --- client/1.0/pkgd.eagle.asc +++ client/1.0/pkgd.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJX2cPLAAoJEFAslq9JXcLZbKgP/2l4qkLKwLfjWPdElkwADK7r -+GfnqOGD0u6C5Te/KOowxMw5idOFIeEE6CZ3qfLB5i5nQmUXYhgIpX18ZV7rs5nt -KqiaMXRCEoT8aNXVPORLfI2SCI1W5QEl+/apW+kw7mG5BkR9AlJZlkXZtrSgIrq5 -T3KojlaXzvJGA0usYdnDYPlapyY3yGGCh5/ePfj0KXgyWuv78SnC8BtXpqUBv3vU -2KZUGoMuHNyV98YJIeSdor2IET9+t0Tbl/RAPbgcI95FbLEOd9rmqqh4yLRXKsnb -LoY7lCjseFbAxVfT0/+bxtmGl5PoWqNC/jvTMoR3eautxZTfyhBKnMyDiigrjMoC -zngOo4GltyETppUCVbir8fGj7KVu5PTe6eFo8kOqEoQ8CcGpqiuLvyBpMSeH3JZd -1d/0YcX6RKrrZU1nlcc6W2kspAdqYj74lUTo3G1+q6JLhHarTAK49HmM1ej+aUvp -SfMhJni46uIpC3aMZSGFO+iVWTV0F2YFWRFzQ/IlVDStAF574iLTH2+hyKb076mY -Ghay/M0S3sXas54TI08uUQbuKnPnpsrk15Y7oZE74LTBjAxrCE0JQ86HADeRquRU -7wNyV/rN0xQ/lWMRIttiScQqhOLaphR8hBppDexvAWcEv3glSoH8ulE76/WOAIE9 -w8EOSugpDMBbJm0ICW2Q -=LqGc +iQIcBAABCAAGBQJX2lmPAAoJEFAslq9JXcLZxUwQALrghwu+4ZYCoda2LiPUhB4L +f2xhc13e84ezWkitX3cOyvaOfG9JGg1dL3+uiwRefKm66g7J8T79JT+O9ji4YQw4 +H2/aCtlBXUB3KX1zM8ta0wdPIohL6NAQSa8Fvbld5J0ZYYzcZmIAq3ExyXIPJnn2 +L9t3lP4hA0dy2zFcYTivheyixAnMSiqHLm6dlrVcP66cynOfiR4FdeI0af9NhlNw +D3yK/FvRZoCsocE1eyfFHQZtP2uSN4mPup7YcdQCV8hAj3nLqai0J2KlKiGg+cud +TgvbieWOa9m3GNOxT5u4wRZby9FtQH5b2+ZcTF5Olto/kJIYh2KyhZy9XHdHqRRI +VfFqwkR+I7S5zvB54jYq/0NkZLYqLiCG+dUFDY/hreRp8dadMnot053nwJfHgy5E +CqOVLrHE1FVB61v0WY3a5BE9rMbUZrHw1jiUKuIeHGk5N5vwpIc3udLQEcW+llY2 +Fzh0++zfmBB5Dbt7TqpuBDMYQug6gAa/wPdaCKOF4Zk8qhGrZlE6UWwtW2B9H7ZZ +e0QagWA05/OWbKzmrJkueQJf7uj1pBBg+B/uzppjX8w//c/lLzuLWIsvpzE5unO2 +bpw8aauhSCkAtw5cMMBHzrL3ovyprVYjxnGSUWlfbAP9124FiKqaupdadxxWu5qI +omf24CSb7cNDO0ig4S5Z +=hQVG -----END PGP SIGNATURE----- Index: client/1.0/pkgd.eagle.harpy ================================================================== --- client/1.0/pkgd.eagle.harpy +++ client/1.0/pkgd.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 2b0a3f6a-f792-4860-b9a8-0ef405383af5 + fe5b4e0d-1a5b-41e3-92ec-88ef23daba5f SHA512 Script - 2016-09-14T21:40:00.7617187Z + 2016-09-15T08:19:02.3906250Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/pkgd.eagle.harpy.asc ================================================================== --- client/1.0/pkgd.eagle.harpy.asc +++ client/1.0/pkgd.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJX2cPPAAoJEFAslq9JXcLZQEMP/02DJ5Bc1hGJE+OETc7rG9bZ -CAy3pU6sQEqDLUy/9ITxi3CwkcbM0YrXkUcAk4JLImLpDy1vvQjkG+E50OF5Nx/G -qfu/HTqBa7rJyFdkJ/hxeayE9PruZ9NbluuS5nAYe4TFlh3h13Grw5yk3Eoh6XAr -TEanHt+M8S1RYp6fT1OpTuWrG5ElHVs+KcjIq3XkO81iB7SLZZbtGSuEvgpHSMkI -Fc1KegMT+KlIHc/iEJGDUs578929uzlgXL7QR6ohz2mGppminfL3LrX0B4X4uYuo -46xenh9uHEk4c1sODmfRzwCsJkmNbsav58V2Qx3voGtLxS3ClwD+61bwaCRMoMXQ -yihyDHDK21FLwm/iiNeNGCqecmuVa4QEoFW/EhqtqRhm7GhHPYmDQpaTqjbeAvF9 -uq4DCsRsWLAKnv6dPKrAWjJ88qw/bq/wqvu/tLfvDcExR2tbcex1+hjg7ENO6mMb -FlMOluAF05njntL3kPikr2dJBF7ZeSSZ9vz5SKXIgWkyoyQ6Egf7dzsyIl1jqiNU -FwadvZ1Ui/JmqHbt3OPGQqOLSmhdl25ZiQhNWl6kroPtL0kBtBqGly5kMs0V6/aO -tc/QWOoPNiFpp0LhJPTAwB/rB7m9C6UOwr1rijPLjFrxneuwCXtEfKRqgQclNpZL -Px2cpUeX4lX7cv9mHeZH -=f+jR +iQIcBAABCAAGBQJX2lmRAAoJEFAslq9JXcLZ7msP/0dgrHwpn+UH3mj180XwYS/a +2ds36eZXWxTTLuaRZote6j8UykroIBd5PaRHG14lStvPv0PNhqZg2KQGkaNuQrN1 +qbmwyYvnURie3r6wFil8RJkSNLlAQJP3iIwa9EBp3J7DSpr1agMowrQlxF0JDASY +QjA0Kv6N183+VNYJQbPKU9GPcpNAN92bMZddyZ1hlaV3RmNjLk4Y3NbJIsMbI6uw +qnLoHyGgIh9I+pkqLeH6XxfoY5n9EwDaXFY1C050MxZaPdlkjNEO0Z9Td6o3m0D9 +IxJLTvDAKmijHXAbLxgvyvUH5j9FLC91hYlo82m5C4Jvwa6ES9A5WEimHm5BYkpB +EBkwUQvqAP65sLRg5AVW0yVTWTwhFeUx4fWjeWJdvgMOzvgyfwxYBHavCjJNJhk2 +5r6Lc9hi7LoiDtsuC8QsDwCPfP1/LoU3h39Awx9M5qeIOcZY8/+Ti6Ax6aDQQdBz +Wv8IHJ7xtiOtSbuLX2PsRvNJ2NdO816o7S7OzuEcJNme4OjyE82FNOPYhDxCmBT+ +fhh+6wW9+9NI6BKjrfjfrGCMd3q8r+IrAy7y4ixws0xevgVj8gXQIe/Qf2KGK1HE +wX/QhCIIvUZGXEE8NEpAos3ILb22O8Tmk8GHVL5mqe2ZroD+sVanxxqIa7Rpn4uI +qd5tr8utEcwGmsBJg1vI +=9qA5 -----END PGP SIGNATURE----- Index: client/1.0/pkgr.eagle ================================================================== --- client/1.0/pkgr.eagle +++ client/1.0/pkgr.eagle @@ -78,11 +78,17 @@ } # # NOTE: This procedure is used to provide a TIP #194 compatible [apply] # command to the native Tcl 8.4 interpreter. Eagle and native Tcl - # 8.5 (or higher) have this command built-in. + # 8.5 (or higher) have this command built-in. The lambdaExpr + # argument must be a list with two or three elements. The first + # element is the list of arguments to the procedure. The second + # element is the body of the procedure. The third element is the + # target namespace for the procedure. If the third element is not + # specified, the global namespace is used. Any remaining arguments + # are passed to the procedure verbatim. # if {[llength [info commands ::apply]] == 0} then { proc ::apply { lambdaExpr args } { set length [llength $lambdaExpr] @@ -103,11 +109,13 @@ } } # # NOTE: This procedure returns a formatted, possibly version-specific, - # package name, for use in logging. + # package name, for use in logging. The package argument is the + # name of the package. The version argument is the version of the + # package. # proc formatPackageName { package version } { return [string trim [appendArgs $package " " $version]] } @@ -315,14 +323,16 @@ # # NOTE: This procedure returns the list of API keys to use when looking # up packages via the package repository server. An empty list # is returned if no API keys are currently configured. The prefix # argument is an extra variable name prefix to check prior to any - # that are already configured. + # that are already configured. The prefixOnly argument should be + # non-zero to exclude any API keys other than those based on the + # prefix specified by the caller. # # - proc getApiKeys { {prefix ""} } { + proc getApiKeys { {prefix ""} {prefixOnly false} } { global env variable autoApiKeys # # NOTE: If the caller specified a variable name prefix, try to use it @@ -333,13 +343,16 @@ if {[string length $prefix] > 0} then { lappend prefixes $prefix } # - # NOTE: Next, fallback to the variable name prefix for this package. + # NOTE: Next, fallback to the variable name prefix for this package, + # unless the caller has forbidden us to do so. # - lappend prefixes [getLookupVarNamePrefix] + if {!$prefixOnly} then { + lappend prefixes [getLookupVarNamePrefix] + } # # NOTE: Try each variable name prefix, in order, until a set of API # keys is found. # @@ -372,13 +385,15 @@ return $env($varName) } } # - # NOTE: If there is a default list of API keys, just return it. + # NOTE: If there is a default list of API keys, just return it, + # unless the caller has forbidden us to do so. # - if {[info exists autoApiKeys] && [llength $autoApiKeys] > 0} then { + if {!$prefixOnly && \ + [info exists autoApiKeys] && [llength $autoApiKeys] > 0} then { return $autoApiKeys } # # NOTE: Otherwise, return the system default, which is "anonymous" @@ -729,11 +744,11 @@ } # # NOTE: This procedure, which may only be used from an Eagle script, checks # if a native Tcl library is loaded and ready. If not, a script error - # is raised. + # is raised. There are no arguments. # proc tclMustBeReady {} { # # NOTE: This procedure is useless when running in native Tcl; therefore, # forbid its use there. @@ -752,11 +767,11 @@ } # # NOTE: This procedure is designed for Eagle. It attempts to load the # "best" native Tcl library. It may raise any number of script - # errors. + # errors. There are no arguments. # proc makeTclReady {} { # # NOTE: This procedure is useless when running in native Tcl; therefore, # forbid its use there. @@ -779,11 +794,11 @@ } # # NOTE: This procedure, which may only be used from a native Tcl script, # checks if Garuda and Eagle are loaded and ready. If not, a script - # error is raised. + # error is raised. There are no arguments. # proc eagleMustBeReady {} { # # NOTE: This procedure is useless when running in Eagle; therefore, # forbid its use there. @@ -802,11 +817,11 @@ } # # NOTE: This procedure is designed for native Tcl. It attempts to load # the Garuda package and gain access to Eagle. It may raise any - # number of script errors. + # number of script errors. There are no arguments. # proc makeEagleReady {} { # # NOTE: This procedure is useless when running in Eagle; therefore, # forbid its use there. @@ -1195,10 +1210,34 @@ } else { error "unsupported script certificate" } } + # + # NOTE: This procedure returns non-zero if the specified package can be + # downloaded, i.e. because it is not required for the downloading + # process itself to be functional, etc. The package argument is + # the name of the package to check. + # + proc canDownloadPackage { package } { + # + # NOTE: Since the "http" and "tls" packages are required from within + # the custom [package unknown] itself, in order to locate and + # download the requested package, we must return false here to + # prevent needless recursion. + # + if {[lsearch -exact [list http tls] $package] != -1} then { + return false + } + + # + # NOTE: Currently, all other packages, including Garuda, are legal to + # handle from the custom [package unknown] handler. + # + return true + } + # # NOTE: This procedure performs initial setup of the package repository # client, using the current configuration parameters. There are # no arguments. It may load the Garuda package when evaluated in # native Tcl. It may load a native Tcl library when evaluated in @@ -1316,18 +1355,20 @@ variable verboseUnknownResult # # NOTE: First, run our special [package unknown] handler. # - set code(1) [catch { - getPackageFromRepository $package $version handler - } result(1)] - - if {$verboseUnknownResult} then { - pkgLog [appendArgs \ - "repository handler results for package \"" [formatPackageName \ - $package $version] "\" are " [formatResult $code(1) $result(1)]] + if {[canDownloadPackage $package]} then { + set code(1) [catch { + getPackageFromRepository $package $version handler + } result(1)] + + if {$verboseUnknownResult} then { + pkgLog [appendArgs \ + "repository handler results for package \"" [formatPackageName \ + $package $version] "\" are " [formatResult $code(1) $result(1)]] + } } # # NOTE: Next, run the saved [package unknown] handler. # @@ -1417,10 +1458,25 @@ # NOTE: This procedure sets up the default values for all configuration # parameters used by the package repository client. There are no # arguments. # proc setupPackageUnknownVars {} { + # + # NOTE: Is this HTTP request processor allowed to use plain HTTP if/when + # the "tls" package is not available? This should only be changed + # if the "tls" package cannot be easily installed for use with the + # native Tcl interpreter in use. It should be noted here that the + # official package repository server reserves the right to refuse + # plain HTTP connections, which means that changing this setting + # may be totally pointless. + # + variable allowInsecureHttp; # DEFAULT: false + + if {![info exists allowInsecureHttp]} then { + set allowInsecureHttp false + } + # # NOTE: What is the default set of API keys if none were set explicitly? # This list is subject to change at any time -AND- may be empty or # may contain non-working API keys, please do not rely on it. # @@ -1639,10 +1695,16 @@ # HTTP response data. It does not contain special code to handle # HTTP status codes other than 3XX (e.g. 4XX, 5XX, etc). # # proc getFileViaHttp { uri redirectLimit channel quiet args } { + # + # NOTE: This variable is used to determine if plain HTTP is allowed if + # the "tls" package is not available. + # + variable allowInsecureHttp + # # NOTE: This variable is used to keep track of the currently scheduled # (i.e. pending) [after] event. # variable afterForPageProgress @@ -1652,18 +1714,23 @@ # which is typically included with the Tcl core distribution. # package require http 2.0 # - # NOTE: If the 'tls' package is available, always attempt to use HTTPS. + # NOTE: If the 'tls' package is available, always attempt to use HTTPS; + # otherwise, only attempt to use HTTP if explicitly allowed. # if {[catch {package require tls}] == 0} then { ::http::register https 443 ::tls::socket if {[string range $uri 0 6] eq "http://"} then { set uri [appendArgs https:// [string range $uri 7 end]] } + } elseif {$allowInsecureHttp} then { + if {[string range $uri 0 7] eq "https://"} then { + set uri [appendArgs http:// [string range $uri 8 end]] + } } # # NOTE: Unless the caller forbids it, display progress messages during # the download. Index: client/1.0/pkgr.eagle.asc ================================================================== --- client/1.0/pkgr.eagle.asc +++ client/1.0/pkgr.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJX2cPGAAoJEFAslq9JXcLZoEEQAIU8u3qomWl5utTUSsBfAlT9 -/LC4G8eHHmxDVT/woyRKZYuVCnU0/jWljIY6pOV4xSxSJOHs2RT0N+EFIi35HD2W -9NW9Q/09w/HO/LevQoyvZA51JDw7Ecsv86ajBRtGD3vQH6PxvLRKc6g8g1qs+X3Q -+J6CbUsJo3F07sFQJgGiFTmC/xxmEeAKT2aV3gwnCBkuPq+EkjUGJ9vA8y1NKDMS -akFeuARrXWgwm61KUdkoYrQzqYNzr7ZMGV7HzVe+57Hu0XF0v/yK5VTYLnaw4Qoc -6Y/8TVuBjFumfZhIZJ6pVdBBhchcNHWydqM+17mcxZEjdVUx7lpE6jT4PRn3svjy -s9MQbfmkA1P5aa4dswUobDMBE8n/pOJYgQUGbiAI6CLLZpiZu2GkbxfgaLYVgoqh -4VPeeB8L/7xgWs+Y6F8HBNaK/HcV6Tj41gCtd2/9duVyNrBpSdrKqOgSLzJ2IEX5 -2GKzb53TZI+JZkNr6y+fKYZzfAqnDw4HS6TJgcNyCQ5eqGFhu7/rT7qEr6hlMCM1 -NxhyiHJFejAmxnhjHWwD21ncc8ZYlEi/XHi+8Blego651AgkhsEubgs8yVEsbu/G -F6H7h2uHls0YcjgyGjc2KOuk55quza4MTSyGERFOl6HChlDXCASAHouXFRkIb42x -HP/iYeSdgv/Jmt0IJWi0 -=lSvY +iQIcBAABCAAGBQJX2lmLAAoJEFAslq9JXcLZ004QAIYsgErwnB3NGRnR95lgXhy1 +7OvhO/y4KUMT7oXHnYeiSejLHb+PMYrBH2Jf+yCcPLH4B8fD2Ao0XGWeKQATTrPZ +MdnBblmtlncRKZ1gkHvFyq0flQeOOoCBDXo/IcPbqlNuZ4ADhKmj+92dXn/QtquX +ocbuWkQ53dssZz3MT4nHy+rHT4IrzTARpva+zbPWK6ETDPfVwwcbkoj1enVV+mni +GN3G1SYD+D0nMFm+BB4ZUYT9ur8lGxkH3bo2ARPoOB6n8vizvomNLawWl5cgheAq +IQTsUYGTYIGVu36ENaYAaehfyWf+8/TIjgeJj1DFs+xlVI5ZSRSxrK/1V/LCkT1M +GJRD29WdUwNnvYhUDir+aflp51xof2u2CW+hNK+X6ovVRctSDASoE8bZu86xy8Fc +cJbM1TF9lRa8TolyO6dWxF7sLyzuDUEnjn8HlgRm8rJ9iOPMO4Jq+WjiEcO5Rq9c +DpfG8eArkbiWfGB1i5hq7m1HCQ5oE1fKgzo2VRXuxh1NE4/1xhIsgJEOa6iiOsw6 +1fJGvLLG8SN+OKWNmnAYafAkXAGK8m/XsdKO9/MQ/Z+ZDXjsOyqtD62mdn+EM2iU +nuwyyWXMuRZ2hAh35+VoQBJXupabSXCIAVl/O2ZKR//pJQTZAa4o3VYqdMrCdCJy +1UNosp1flt84bCm3hr41 +=cRnK -----END PGP SIGNATURE----- Index: client/1.0/pkgr.eagle.harpy ================================================================== --- client/1.0/pkgr.eagle.harpy +++ client/1.0/pkgr.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 59f8e661-e0ae-4a28-aa15-d2ca8d4eab99 + 318a7cd9-abc8-44bc-9375-3d3b9ef1cd38 SHA512 Script - 2016-09-14T21:39:38.0507812Z + 2016-09-15T08:18:37.3359375Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/pkgr.eagle.harpy.asc ================================================================== --- client/1.0/pkgr.eagle.harpy.asc +++ client/1.0/pkgr.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJX2cPIAAoJEFAslq9JXcLZoOsP/AqpJydAxvNd8JADpLwnKJJW -YJ1Tzo5ioSJoYNMYxl0edmXuNfo6FsBZNuKWA+PwSLlmIZX2c8LeQha/A5CwrL0A -ui1Rs/1353dj/VaJwXR7uk34o044MQqCDeoYAVRKr7h4/CrnkGNqXH8FczXd1t0O -fe0zP2HCOA8yiFc5l6Gt2qt87GoHABpdYA0EAhWdKNdURWrL1lvuySqadT2Z1It7 -snn+xm7E/9InIpO3lteRnIAA9M2FegltA+NISZpn1zARdvp/d8wHmtDvnH2pOMif -DT7II0xsvHrN7p6HoBwKvnM2/EVhAkfpjhYYhJ+So4h1RLqsKNWIRBazMA41MJgI -QYSO5/GMupHPHcqO+WwQCYPMXtXhg6dRTuoQYAgu7G9K9ajeOTuL9fWNHjJi+a1r -cMGUKcoNEzeFvGNdFbLtIS4WTpUF3eV5340LZWFTLCm+0FUEkXrb4bMMaO4+gxyY -ECahkU+b67SBTOB4cfNn9mURQCGDwQK4VNDg/776XpazwTtruJRWZ8AG6l453SSf -4mkhhGjOqWvULw6i9/vp7HizAe52a7+d9pjGdtuMHyBF0gePpIaucmPpSN1p5TkU -9Aeq8XmvGwXM1BUPDZ1dUTgKumobwB1vbkdf/EZbjZkLzZogzSwyebjT+1tjy+2e -3W8zT+cilYmLj2cAnV1J -=H0ez +iQIcBAABCAAGBQJX2lmMAAoJEFAslq9JXcLZSNoQAMimg7wVtpuOSAMrLPIrZSma +y5iosyPUA2xV4rc09RZXduNqsV/qKw/MnFCaFXOgatFanlo8Z+i7QtH/7mH1tH/w +rJF+5L/VblHj9yWvxrqtivFR0zzzk6jNBlaxFFeSSvdI0FOrGjiZm5qWqbdikKm9 +80yj7grDqZxfXXH6auxggfeaDbju14s0EYQfi0cZ6QwKxBQ2n987vcj9jAIcp1o2 ++WBLaNWst38TckXFxPv0zxkosITjC0Nv6A0b8HzP+l9k9tLG1YHjImDgtjRJnpn1 +ZcwjViDMq2vQdSldpZkC0WlPZ7rQLts7eB3PCLxgwud08Z5PMQmyLs2vnagZWemX +HV/r3fjJsdzmCEy6Qd/ujH4dy2GOHVlIVmRDpAuO0KFtpHKNMAm2TbxyDUc/b9gx +Mx5ieEWUvGFq2xGeJobaqjcN6jo1EE2BMX4jUbGyx1I9nOMZIIMlLEuSZaVOz8NE +Fn7zSbSfI7Zj5C4nE5Z+cIBMeZ4YYUQmOXp9CfcRTXCdTnYN1JyID0hMJf0TsLgH +P7NSvi81HgNQLj8+ZBk5TueKIXFX5mnfJELm+UqL9h2ewbnwmXb3QFNmAW35Rnq0 +VT7QT2qSNS5kxEfCI2UI+moMpEeiE1y/i4O8ceI5fAGXqRTRPo98TCB1x4qggxpZ +2txrMtdMKZQDASB6u3NU +=UXhY -----END PGP SIGNATURE-----