Merge branch 'mc/netrc-service-names'

"netrc" credential helper has been improved to understand textual
service names (like smtp) in addition to the numeric port numbers
(like 25).

* mc/netrc-service-names:
  contrib: better support symbolic port names in git-credential-netrc
  contrib: warn for invalid netrc file ports in git-credential-netrc
  contrib: use a more portable shebang for git-credential-netrc
This commit is contained in:
Junio C Hamano
2025-07-14 11:19:25 -07:00
5 changed files with 46 additions and 7 deletions

View File

@@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
use strict;
use warnings;
@@ -267,8 +267,16 @@ sub load_netrc {
if (!defined $nentry->{machine}) {
next;
}
if (defined $nentry->{port} && $nentry->{port} =~ m/^\d+$/) {
$num_port = $nentry->{port};
if (defined $nentry->{port}) {
$num_port = Git::port_num($nentry->{port});
unless ($num_port) {
printf(STDERR "ignoring invalid port `%s' " .
"from netrc file\n", $nentry->{port});
}
# Since we've already validated and converted
# the port to its numerical value, do not
# capture it as the `protocol' value, as used
# to be the case for symbolic port names.
delete $nentry->{port};
}

View File

@@ -45,7 +45,7 @@ chmod 0600, $netrc;
diag "Testing with invalid data\n";
$cred = run_credential(['-f', $netrc, 'get'],
"bad data");
ok(scalar keys %$cred == 4, "Got first found keys with bad data");
ok(scalar keys %$cred == 3, "Got first found keys with bad data");
diag "Testing netrc file for a missing corovamilkbar entry\n";
$cred = run_credential(['-f', $netrc, 'get'],
@@ -64,12 +64,12 @@ is($cred->{username}, 'carol', "Got correct Github username");
diag "Testing netrc file for a username-specific entry\n";
$cred = run_credential(['-f', $netrc, 'get'],
{ host => 'imap', username => 'bob' });
{ host => 'imap:993', username => 'bob' });
ok(scalar keys %$cred == 2, "Got 2 username-specific keys");
# Only the password field gets returned.
ok(scalar keys %$cred == 1, "Got 1 username-specific keys");
is($cred->{password}, 'bobwillknow', "Got correct user-specific password");
is($cred->{protocol}, 'imaps', "Got correct user-specific protocol");
diag "Testing netrc file for a host:port-specific entry\n";
$cred = run_credential(['-f', $netrc, 'get'],