Index: client/pkgr.eagle ================================================================== --- client/pkgr.eagle +++ client/pkgr.eagle @@ -252,11 +252,13 @@ # request to be considered successful. # return [expr {$code eq "OK"}] } - proc extractAndVerifyLookupMetadata { result varName } { + proc extractAndVerifyLookupMetadata { result varName caller } { + variable strictUnknownLanguage + # # NOTE: Grab the language for the package script. It must be an empty # string, "Tcl", or "Eagle". If it is an empty string, "Eagle" # will be assumed. # @@ -285,10 +287,31 @@ set certificate [getDictionaryValue $result Certificate] if {[string length $certificate] == 0} then { error "missing script certificate" } + + # + # NOTE: Are we being called from the [package unknown] handler + # in "strict" mode? + # + if {$strictUnknownLanguage && $caller eq "handler"} then { + # + # NOTE: If so, the package script must be targeted at the this + # language; otherwise, there is no way that the package + # will actually be provided to this language. + # + if {[isEagle]} then { + if {$language ne "Eagle"} then { + error "repository package is not for Eagle" + } + } else { + if {$language ne "Tcl"} then { + error "repository package is not for Tcl" + } + } + } # # NOTE: If the caller wants the package metadata, use the array variable # name they specified. # @@ -741,11 +764,11 @@ # proc packageUnknownHandler { package {version ""} } { # # NOTE: First, run our [package unknown] handler. # - if {[catch {main $package $version} error(1)] == 0} then { + if {[catch {main $package $version handler} error(1)] == 0} then { # # NOTE: The repository [package unknown] handler succeeded, run the # saved [package unknown] handler. # if {[catch { @@ -857,13 +880,23 @@ variable pgpCommand; # DEFAULT: gpg2 --verify {${fileName}} if {![info exists pgpCommand]} then { set pgpCommand {gpg2 --verify {${fileName}}} } + + # + # NOTE: Verify that the package script matches the current language + # when called from the [package unknown] handler? + # + variable strictUnknownLanguage; # DEFAULT: true + + if {![info exists strictUnknownLanguage]} then { + set strictUnknownLanguage true + } } - proc main { package version } { + proc main { package version caller } { # # NOTE: Issue the lookup request to the remote package repository. # set data [getLookupData \ [getLookupApiKey] $package [getLookupVersion $version]] @@ -902,11 +935,11 @@ # # NOTE: Process the lookup data into the pieces of metadata that we # need to load the requested package. # - extractAndVerifyLookupMetadata $result metadata + extractAndVerifyLookupMetadata $result metadata $caller # # NOTE: Attempt to load the requested package using the metadata # extracted in the previous step. # Index: client/pkgr.eagle.harpy ================================================================== --- client/pkgr.eagle.harpy +++ client/pkgr.eagle.harpy @@ -19,32 +19,32 @@ None Mistachkin Systems - 65afd3ba-f052-4cba-845e-55d4ca330074 + c264eab7-8a66-498a-9cbf-d1bc078e075c SHA512 Script - 2016-08-17T01:35:13.0300313Z + 2016-08-17T02:10:26.4997578Z -1.00:00:00 0x2c322765603b5278 - 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