On 29.11.2011 11:44, Torsten Förtsch wrote: > These calls to user_agent(reset=>1) are the actual reason for this mail. I > think it is wrong to do that here. The user agent keeps a global state that > is > reset if user_agent() is called with reset=>1. set_client_cert() is called by > prepare() which is called by GET, POST etc. > > According to the documentation for Apache::TestRequest the way to make the UA > not to follow redirects is > > Apache::TestRequest::user_agent(reset => 1, > requests_redirectable => 0); > > before calling GET. > > If now GET itself calls user_agent(reset=>1) via prepare() and > set_client_cert() wouldn't that clobber the "requests_redirectable => 0" > setting made by the user?
You're right, indeed - thanks for pointing this out. After further testing and experiments, I think that the attached patch should take care of this... does this look like an acceptable solution? Kaspar
Index: Apache-Test/lib/Apache/TestRequest.pm =================================================================== --- Apache-Test/lib/Apache/TestRequest.pm (revision 1207758) +++ Apache-Test/lib/Apache/TestRequest.pm (working copy) @@ -626,20 +626,27 @@ sub set_client_cert { my $dir = join '/', $vars->{sslca}, $vars->{sslcaorg}; if ($name) { - $ENV{HTTPS_CERT_FILE} = "$dir/certs/$name.crt"; - $ENV{HTTPS_KEY_FILE} = "$dir/keys/$name.pem"; + my ($cert, $key) = ("$dir/certs/$name.crt", "$dir/keys/$name.pem"); + @ENV{qw/HTTPS_CERT_FILE HTTPS_KEY_FILE/} = ($cert, $key); if ($LWP::VERSION >= 6.0) { - # LWP 6 no longer honors HTTPS_{CERT,KEY}_FILE - user_agent(reset => 1, - ssl_opts => { SSL_cert_file => "$dir/certs/$name.crt", - SSL_key_file => "$dir/keys/$name.pem" }); + # IO::Socket:SSL doesn't look at environment variables + if ($UA) { + $UA->ssl_opts(SSL_cert_file => $cert); + $UA->ssl_opts(SSL_key_file => $key); + } else { + user_agent(ssl_opts => { SSL_cert_file => $cert, + SSL_key_file => $key }); + } } } else { for (qw(CERT KEY)) { delete $ENV{"HTTPS_${_}_FILE"}; } - user_agent(reset => 1) if $LWP::VERSION >= 6.0; + if ($LWP::VERSION >= 6.0 and $UA) { + $UA->ssl_opts(SSL_cert_file => undef); + $UA->ssl_opts(SSL_key_file => undef); + } } }