@@ -335,10 +335,19 @@ fn registry_credential_config_raw_uncached(
335335/// Use the `[credential-alias]` table to see if the provider name has been aliased.
336336fn resolve_credential_alias ( config : & Config , mut provider : PathAndArgs ) -> Vec < String > {
337337 if provider. args . is_empty ( ) {
338- let key = format ! ( "credential-alias.{}" , provider. path. raw_value( ) ) ;
339- if let Ok ( alias) = config. get :: < PathAndArgs > ( & key) {
338+ let name = provider. path . raw_value ( ) ;
339+ let key = format ! ( "credential-alias.{name}" ) ;
340+ if let Ok ( alias) = config. get :: < Value < PathAndArgs > > ( & key) {
340341 tracing:: debug!( "resolving credential alias '{key}' -> '{alias:?}'" ) ;
341- provider = alias;
342+ if BUILT_IN_PROVIDERS . contains ( & name) {
343+ let _ = config. shell ( ) . warn ( format ! (
344+ "credential-alias `{name}` (defined in `{}`) will be \
345+ ignored because it would shadow a built-in credential-provider",
346+ alias. definition
347+ ) ) ;
348+ } else {
349+ provider = alias. val ;
350+ }
342351 }
343352 }
344353 provider. args . insert (
@@ -470,6 +479,17 @@ pub fn cache_token_from_commandline(config: &Config, sid: &SourceId, token: Secr
470479 ) ;
471480}
472481
482+ /// List of credential providers built-in to Cargo.
483+ /// Keep in sync with the `match` in `credential_action`.
484+ static BUILT_IN_PROVIDERS : & [ & ' static str ] = & [
485+ "cargo:token" ,
486+ "cargo:paseto" ,
487+ "cargo:token-from-stdout" ,
488+ "cargo:wincred" ,
489+ "cargo:macos-keychain" ,
490+ "cargo:libsecret" ,
491+ ] ;
492+
473493fn credential_action (
474494 config : & Config ,
475495 sid : & SourceId ,
@@ -497,6 +517,7 @@ fn credential_action(
497517 . collect ( ) ;
498518 let process = args[ 0 ] ;
499519 tracing:: debug!( "attempting credential provider: {args:?}" ) ;
520+ // If the available built-in providers are changed, update the `BUILT_IN_PROVIDERS` list.
500521 let provider: Box < dyn Credential > = match process {
501522 "cargo:token" => Box :: new ( TokenCredential :: new ( config) ) ,
502523 "cargo:paseto" if config. cli_unstable ( ) . asymmetric_token => {
0 commit comments