# [PATCH] Authenticate only once in git-send-email

3 messages from 2007-11-21 to 2007-11-22. Participants: Wincent Colaiuta, Junio C Hamano.
Thread: https://gitlist.dev/t/10955

## Wincent Colaiuta, 2007-11-21 12:35

Subject: [PATCH] Authenticate only once in git-send-email
Message-ID: <1195648505-21653-1-git-send-email-win@wincent.com>
URL: https://gitlist.dev/e/1195648505-21653-1-git-send-email-win%40wincent.com

```
When using git-send-email with SMTP authentication sending a patch series
would redundantly authenticate multiple times, once for each patch. In
the worst case, this would actually prevent the series from being sent
because the server would reply with a "5.5.0 Already Authenticated"
status code which would derail the process.

This commit teaches git-send-email to authenticate once and only once at
the beginning of the series.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
---
 git-send-email.perl |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/git-send-email.perl b/git-send-email.perl
index 9c6fa64..76baa8e 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -145,6 +145,7 @@ sub format_2822_time {
 
 my $have_email_valid = eval { require Email::Valid; 1 };
 my $smtp;
+my $auth;
 
 sub unique_email_list(@);
 sub cleanup_compose_files();
@@ -635,7 +636,7 @@ X-Mailer: git-send-email $gitversion
 		}
 
 		if ((defined $smtp_authuser) && (defined $smtp_authpass)) {
-			$smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
+			$auth ||= $smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
 		}
 		$smtp->mail( $raw_from ) or die $smtp->message;
 		$smtp->to( @recipients ) or die $smtp->message;
-- 
1.5.3.5.737.gdee1b

```

## Junio C Hamano, 2007-11-22 08:48

Subject: Re: [PATCH] Authenticate only once in git-send-email
Message-ID: <7vwssa7jii.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vwssa7jii.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <1195648505-21653-1-git-send-email-win@wincent.com>

```
Wincent Colaiuta <win@wincent.com> writes:

> This commit teaches git-send-email to authenticate once and only once at
> the beginning of the series.

Ok.  What does $smtp->auth() return?  Presumably a true value,
but I do not find it the best coding style to hide a call made
primarily for its effects not for its return value behind a
conditional assignment to a boolean.  Eek.

>  		if ((defined $smtp_authuser) && (defined $smtp_authpass)) {
> -			$smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
> +			$auth ||= $smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
>  		}

Perhaps something along the lines of...

>  		if ((defined $smtp_authuser) && (defined $smtp_authpass)) {
> 			$smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
> +			undef $smtp_authpass;
>  		}

... or using a separate boolean variable "my $auth_happened"
may be more appropriate.

But I am just saying this; I do not care _too_ deeply about it.
Will apply as-is.
 

```

## Wincent Colaiuta, 2007-11-22 10:07

Subject: Re: [PATCH] Authenticate only once in git-send-email
Message-ID: <C0E02CFE-F6E6-4902-8BA1-D6AC02F1C04F@wincent.com>
URL: https://gitlist.dev/e/C0E02CFE-F6E6-4902-8BA1-D6AC02F1C04F%40wincent.com
In-Reply-To: <7vwssa7jii.fsf@gitster.siamese.dyndns.org>

```
El 22/11/2007, a las 9:48, Junio C Hamano escribió:

> Wincent Colaiuta <win@wincent.com> writes:
>
>> This commit teaches git-send-email to authenticate once and only  
>> once at
>> the beginning of the series.
>
> Ok.  What does $smtp->auth() return?  Presumably a true value,

True on success, false on failure.

> but I do not find it the best coding style to hide a call made
> primarily for its effects not for its return value behind a
> conditional assignment to a boolean.  Eek.
>
>> 		if ((defined $smtp_authuser) && (defined $smtp_authpass)) {
>> -			$smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp- 
>> >message;
>> +			$auth ||= $smtp->auth( $smtp_authuser, $smtp_authpass ) or die  
>> $smtp->message;
>> 		}
>
> Perhaps something along the lines of...
>
>> 		if ((defined $smtp_authuser) && (defined $smtp_authpass)) {
>> 			$smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp- 
>> >message;
>> +			undef $smtp_authpass;
>> 		}
>
> ... or using a separate boolean variable "my $auth_happened"
> may be more appropriate.

Of the alternatives you suggest, I think an "$auth_happened" or  
"$auth_done" flag is probably the nicest/cleanest.

> But I am just saying this; I do not care _too_ deeply about it.
> Will apply as-is.

Yes, I don't really care either. My reasoning for doing it the way I  
did is that I'm not much of a Perl hacker so I basically wanted to  
make the change as minimally invasive as possible (in this case  
prepending "$auth ||= "). But above all, all that I really care about  
is that the problem gets fixed.

Cheers,
Wincent

```
