From: Silvio F <silvio.fricke@xxxxxxxxx> Signed-off-by: Silvio F <silvio.fricke@xxxxxxxxx> --- Documentation/git-send-email.txt | 4 ++++ git-send-email.perl | 32 +++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt index f0e57a5..ac993d6 100644 --- a/Documentation/git-send-email.txt +++ b/Documentation/git-send-email.txt @@ -364,6 +364,10 @@ sendemail.confirm:: one of 'always', 'never', 'cc', 'compose', or 'auto'. See '--confirm' in the previous section for the meaning of these values. +sendmail.askpasswordcount:: + Number of times the smtp password can be entered before sending mail is + aborted. Default is 1. + EXAMPLE ------- Use gmail as the smtp server diff --git a/git-send-email.perl b/git-send-email.perl index 3782c3b..9b2eda3 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -203,6 +203,7 @@ my ($validate, $confirm); my (@suppress_cc); my ($auto_8bit_encoding); my ($compose_encoding); +my ($askpasswordcount) = 1; my ($debug_net_smtp) = 0; # Net::SMTP, see send_message() @@ -237,6 +238,7 @@ my %config_settings = ( "from" => \$sender, "assume8bitencoding" => \$auto_8bit_encoding, "composeencoding" => \$compose_encoding, + "askpasswordcount" => \$askpasswordcount, ); my %config_path_settings = ( @@ -360,6 +362,10 @@ sub read_config { } } + if ($askpasswordcount < 1) { + $askpasswordcount = 1 + } + if (!defined $smtp_encryption) { my $enc = Git::config(@repo, "$prefix.smtpencryption"); if (defined $enc) { @@ -1069,17 +1075,21 @@ sub smtp_auth_maybe { # TODO: Authentication may fail not because credentials were # invalid but due to other reasons, in which we should not # reject credentials. - $auth = Git::credential({ - 'protocol' => 'smtp', - 'host' => smtp_host_string(), - 'username' => $smtp_authuser, - # if there's no password, "git credential fill" will - # give us one, otherwise it'll just pass this one. - 'password' => $smtp_authpass - }, sub { - my $cred = shift; - return !!$smtp->auth($cred->{'username'}, $cred->{'password'}); - }); + for my $i (1 .. $askpasswordcount) { + $auth = Git::credential({ + 'protocol' => 'smtp', + 'host' => smtp_host_string(), + 'username' => $smtp_authuser, + # if there's no password, "git credential fill" will + # give us one, otherwise it'll just pass this one. + 'password' => $smtp_authpass + }, sub { + my $cred = shift; + return !!$smtp->auth($cred->{'username'}, $cred->{'password'}); + }); + + last if ($auth); + } return $auth; } -- 1.8.4.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html