@@ -335,10 +335,19 @@ fn registry_credential_config_raw_uncached(
335
335
/// Use the `[credential-alias]` table to see if the provider name has been aliased.
336
336
fn resolve_credential_alias ( config : & Config , mut provider : PathAndArgs ) -> Vec < String > {
337
337
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) {
340
341
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
+ }
342
351
}
343
352
}
344
353
provider. args . insert (
@@ -470,6 +479,17 @@ pub fn cache_token_from_commandline(config: &Config, sid: &SourceId, token: Secr
470
479
) ;
471
480
}
472
481
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
+
473
493
fn credential_action (
474
494
config : & Config ,
475
495
sid : & SourceId ,
@@ -497,6 +517,7 @@ fn credential_action(
497
517
. collect ( ) ;
498
518
let process = args[ 0 ] ;
499
519
tracing:: debug!( "attempting credential provider: {args:?}" ) ;
520
+ // If the available built-in providers are changed, update the `BUILT_IN_PROVIDERS` list.
500
521
let provider: Box < dyn Credential > = match process {
501
522
"cargo:token" => Box :: new ( TokenCredential :: new ( config) ) ,
502
523
"cargo:paseto" if config. cli_unstable ( ) . asymmetric_token => {
0 commit comments