httpmail (httpmail.sourceforge.net) needs this patch. hotmail.com
reauthenticates with the same user/pass but a different uri (going to
passport). The code in LWP::Authen::Digest assumed a re-auth failure
only if the user/pass matched. This code adds the uri to the mix.
Rob
----------------------------------------------------------------
Index: Digest.pm
===================================================================
*** Digest.pm 2002/09/04 17:25:21 1.1
--- Digest.pm 2002/10/01 21:33:57 1.2
***************
*** 66,76 ****
my $auth_header = $proxy ? "Proxy-Authorization" : "Authorization";
my $auth_value = "Digest " . join(", ", @pairs);
! # Need to check this isn't a repeated fail!
my $r = $response;
while ($r) {
my $u = $r->request->{digest_user_pass};
! if ($u && $u->[0] eq $user && $u->[1] eq $pass) {
# here we know this failed before
$response->header("Client-Warning" =>
"Credentials for '$user' failed before");
--- 66,78 ----
my $auth_header = $proxy ? "Proxy-Authorization" : "Authorization";
my $auth_value = "Digest " . join(", ", @pairs);
! # Need to check this isn't a repeated fail for this [user, pass, uri]
my $r = $response;
+ my $failed_uri = $r->request->url->as_string;
while ($r) {
my $u = $r->request->{digest_user_pass};
! if ($u && $u->[0] eq $user && $u->[1] eq $pass
! && $u->[2] eq $failed_uri) {
# here we know this failed before
$response->header("Client-Warning" =>
"Credentials for '$user' failed before");
***************
*** 82,88 ****
my $referral = $request->clone;
$referral->header($auth_header => $auth_value);
# we shouldn't really do this, but...
! $referral->{digest_user_pass} = [$user, $pass];
return $ua->request($referral, $arg, $size, $response);
}
--- 84,90 ----
my $referral = $request->clone;
$referral->header($auth_header => $auth_value);
# we shouldn't really do this, but...
! $referral->{digest_user_pass} = [$user, $pass, $failed_uri];
return $ua->request($referral, $arg, $size, $response);
}