-
Notifications
You must be signed in to change notification settings - Fork 903
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Credentials from configured source used for a non-configured source when the URL is similar #3565
Open
6 tasks done
Comments
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 15, 2024
Previously we looked up any available sources in the config by the hostname, before falling back to trying an exact match if we had collisions. This still allowed credentials to be reused in situations where we don't actually know if they're applicable; many repository servers will support different credentials for individual repositories, so we cannot and should not assume that credentials for one repository will actually match another repository, nor that users want the credentials to be shared for both. It also led to the possibility of users storing one repository first, and then later specifying a different repository on the same server, and choco would try to use the stored credentials for the first repository for the explicitly-entered URL which is nowhere in config. Instead, we should only match the whole URL (which can be done with Uri.Equals to ensure that we match hostnames case-insensitively, but routes case-sensitively), and expect users to provide credentials if they provide a URL that is not explicitly in the sources.
gep13
changed the title
Credentials from configured NuGet v3 source used for a non-configured source when the URL is similar
Credentials from configured source used for a non-configured source when the URL is similar
Nov 18, 2024
Open
6 tasks
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 18, 2024
Previously we looked up any available sources in the config by the hostname, before falling back to trying an exact match if we had collisions. This still allowed credentials to be reused in situations where we don't actually know if they're applicable; many repository servers will support different credentials for individual repositories, so we cannot and should not assume that credentials for one repository will actually match another repository, nor that users want the credentials to be shared for both. It also led to the possibility of users storing one repository first, and then later specifying a different repository on the same server, and choco would try to use the stored credentials for the first repository for the explicitly-entered URL which is nowhere in config. Instead, we should only match the whole URL (which can be done with Uri.Equals to ensure that we match hostnames case-insensitively, but routes case-sensitively), and expect users to provide credentials if they provide a URL that is not explicitly in the sources.
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 18, 2024
Previously we looked up any available sources in the config by the hostname, before falling back to trying an exact match if we had collisions. This still allowed credentials to be reused in situations where we don't actually know if they're applicable; many repository servers will support different credentials for individual repositories, so we cannot and should not assume that credentials for one repository will actually match another repository, nor that users want the credentials to be shared for both. It also led to the possibility of users storing one repository first, and then later specifying a different repository on the same server, and choco would try to use the stored credentials for the first repository for the explicitly-entered URL which is nowhere in config. Instead, we should only match the whole URL (which can be done with Uri. Equals to ensure that we match hostnames case-insensitively, but routes case-sensitively), and expect users to provide credentials if they provide a URL that is not explicitly in the sources. Additionally, we try to ensure that if a user has named a specific source, rather than themselves providing a URL at the command line, we prioritise finding that in the already-configured sources and use that source if the URL matches the current URL that NuGet requires a credential for.
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 18, 2024
Previously we looked up any available sources in the config by the hostname, before falling back to trying an exact match if we had collisions. This still allowed credentials to be reused in situations where we don't actually know if they're applicable; many repository servers will support different credentials for individual repositories, so we cannot and should not assume that credentials for one repository will actually match another repository, nor that users want the credentials to be shared for both. It also led to the possibility of users storing one repository first, and then later specifying a different repository on the same server, and choco would try to use the stored credentials for the first repository for the explicitly-entered URL which is nowhere in config. Instead, we should only match the whole URL (which can be done with Uri. Equals to ensure that we match hostnames case-insensitively, but routes case-sensitively), and expect users to provide credentials if they provide a URL that is not explicitly in the sources. Additionally, we try to ensure that if a user has named a specific source, rather than themselves providing a URL at the command line, we prioritise finding that in the already-configured sources and use that source if the URL matches the current URL that NuGet requires a credential for.
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 18, 2024
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 19, 2024
These tests ensure that the use cases we expect to handle in the credential provider are appropriately handled according to our expectations, based on the user-provided input and the transformed input that is left in configuration.Sources once the credential provider typically gets queried.
10 tasks
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 19, 2024
Previously we looked up any available sources in the config by the hostname, before falling back to trying an exact match if we had collisions. This still allowed credentials to be reused in situations where we don't actually know if they're applicable; many repository servers will support different credentials for individual repositories, so we cannot and should not assume that credentials for one repository will actually match another repository, nor that users want the credentials to be shared for both. It also led to the possibility of users storing one repository first, and then later specifying a different repository on the same server, and choco would try to use the stored credentials for the first repository for the explicitly-entered URL which is nowhere in config. Instead, we should only match the whole URL (which can be done with Uri. Equals to ensure that we match hostnames case-insensitively, but routes case-sensitively), and expect users to provide credentials if they provide a URL that is not explicitly in the sources. Additionally, we try to ensure that if a user has named a specific source, rather than themselves providing a URL at the command line, we prioritise finding that in the already-configured sources and use that source if the URL matches the current URL that NuGet requires a credential for.
vexx32
added a commit
to vexx32/choco
that referenced
this issue
Nov 19, 2024
These tests ensure that the use cases we expect to handle in the credential provider are appropriately handled according to our expectations, based on the user-provided input and the transformed input that is left in configuration.Sources once the credential provider typically gets queried.
corbob
pushed a commit
to vexx32/choco
that referenced
this issue
Nov 20, 2024
Previously we looked up any available sources in the config by the hostname, before falling back to trying an exact match if we had collisions. This still allowed credentials to be reused in situations where we don't actually know if they're applicable; many repository servers will support different credentials for individual repositories, so we cannot and should not assume that credentials for one repository will actually match another repository, nor that users want the credentials to be shared for both. It also led to the possibility of users storing one repository first, and then later specifying a different repository on the same server, and choco would try to use the stored credentials for the first repository for the explicitly-entered URL which is nowhere in config. Instead, we should only match the whole URL (which can be done with Uri. Equals to ensure that we match hostnames case-insensitively, but routes case-sensitively), and expect users to provide credentials if they provide a URL that is not explicitly in the sources. Additionally, we try to ensure that if a user has named a specific source, rather than themselves providing a URL at the command line, we prioritise finding that in the already-configured sources and use that source if the URL matches the current URL that NuGet requires a credential for.
corbob
pushed a commit
to vexx32/choco
that referenced
this issue
Nov 20, 2024
These tests ensure that the use cases we expect to handle in the credential provider are appropriately handled according to our expectations, based on the user-provided input and the transformed input that is left in configuration.Sources once the credential provider typically gets queried.
corbob
added a commit
to vexx32/choco
that referenced
this issue
Nov 21, 2024
Add Pester tests to ensure we don't inadvertently bleed configured credentials into scenarios where they should not be used.
corbob
added a commit
to vexx32/choco
that referenced
this issue
Nov 21, 2024
Add Pester tests to ensure we don't inadvertently bleed configured credentials into scenarios where they should not be used.
corbob
added a commit
to vexx32/choco
that referenced
this issue
Nov 21, 2024
The query string used by some commands seems to be ever so slightly different depending on where they are run. This removes the query string from the tests as these tests are not concerned with the entire message, just the initial part of the message.
corbob
added a commit
to vexx32/choco
that referenced
this issue
Nov 21, 2024
corbob
added a commit
to corbob/choco
that referenced
this issue
Nov 22, 2024
…string from Pester tests"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Checklist
What You Are Seeing?
When performing package operations against a source, Chocolatey CLI may choose to use credentials stored against a different source.
What is Expected?
If credentials are not provided, Chocolatey CLI should not use credentials stored against a different source.
How Did You Get This To Happen?
Set-ExecutionPolicy Unrestricted Process -Force; irm https://ch0.co/go | iex
choco install nexus-repository nexushell --confirm
a. Log in to Nexus
Connect-NexusServer -Hostname LocalHost -Credential ([PSCredential]::new('admin', (Get-Content C:\ProgramData\sonatype-work\nexus3\admin.password | ConvertTo-SecureString -Force -AsPlainText)))
b. Create ChocolateyInternal NuGet repository
New-NexusRepository -Name ChocolateyInternal -Format nuget -Type hosted -DeploymentPolicy Allow
c. Create AdminOnly NuGet repository
New-NexusRepository -Name AdminOnly -Format nuget -Type hosted -DeploymentPolicy Allow
d. Push a package to the AdminOnly repository
$ApiKey = (Get-NexusNuGetApiKey -Credential ([PSCredential]::new('admin', (Get-Content C:\ProgramData\sonatype-work\nexus3\admin.password | ConvertTo-SecureString -Force -AsPlainText)))).apiKey; choco push $env:ChocolateyInstall\lib\nexus-repository\nexus-repository.nupkg --source http://localhost:8081/repository/adminOnly/index.json --api-key="$ApiKey"
e. Turn off anonymous access (last, because otherwise you can't push the package)
Set-NexusAnonymousAuth -Disabled
choco source add -n=ChocoInternal --source=http://localhost:8081/repository/ChocolateyInternal/index.json -U=admin -P="$(Get-Content C:\ProgramData\sonatype-work\nexus3\admin.password)"
choco search --source $AdminOnlyFeedUrl
, where the AdminOnlyFeedUrl is the URL of the AdminOnly repository on Nexus, without specifying credentials.choco search --source http://localhost:8081/repository/adminOnly/index.json
At the end of the configuration, the server should be configured as follows:
System Details
Installed Packages
Output Log
See GitLab issue.
Additional Context
The text was updated successfully, but these errors were encountered: