summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Net/HTTPS.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Net/HTTPS.pm')
-rw-r--r--Master/tlpkg/tlperl/lib/Net/HTTPS.pm73
1 files changed, 62 insertions, 11 deletions
diff --git a/Master/tlpkg/tlperl/lib/Net/HTTPS.pm b/Master/tlpkg/tlperl/lib/Net/HTTPS.pm
index bfed714870c..5ab56a7d43e 100644
--- a/Master/tlpkg/tlperl/lib/Net/HTTPS.pm
+++ b/Master/tlpkg/tlperl/lib/Net/HTTPS.pm
@@ -3,33 +3,40 @@ package Net::HTTPS;
use strict;
use vars qw($VERSION $SSL_SOCKET_CLASS @ISA);
-$VERSION = "5.819";
+$VERSION = "6.02";
# Figure out which SSL implementation to use
if ($SSL_SOCKET_CLASS) {
# somebody already set it
}
-elsif ($Net::SSL::VERSION) {
- $SSL_SOCKET_CLASS = "Net::SSL";
+elsif ($SSL_SOCKET_CLASS = $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS}) {
+ unless ($SSL_SOCKET_CLASS =~ /^(IO::Socket::SSL|Net::SSL)\z/) {
+ die "Bad socket class [$SSL_SOCKET_CLASS]";
+ }
+ eval "require $SSL_SOCKET_CLASS";
+ die $@ if $@;
}
elsif ($IO::Socket::SSL::VERSION) {
$SSL_SOCKET_CLASS = "IO::Socket::SSL"; # it was already loaded
}
+elsif ($Net::SSL::VERSION) {
+ $SSL_SOCKET_CLASS = "Net::SSL";
+}
else {
- eval { require Net::SSL; }; # from Crypt-SSLeay
+ eval { require IO::Socket::SSL; };
if ($@) {
my $old_errsv = $@;
eval {
- require IO::Socket::SSL;
+ require Net::SSL; # from Crypt-SSLeay
};
if ($@) {
$old_errsv =~ s/\s\(\@INC contains:.*\)/)/g;
die $old_errsv . $@;
}
- $SSL_SOCKET_CLASS = "IO::Socket::SSL";
+ $SSL_SOCKET_CLASS = "Net::SSL";
}
else {
- $SSL_SOCKET_CLASS = "Net::SSL";
+ $SSL_SOCKET_CLASS = "IO::Socket::SSL";
}
}
@@ -44,6 +51,20 @@ sub configure {
sub http_connect {
my($self, $cnf) = @_;
+ if ($self->isa("Net::SSL")) {
+ if ($cnf->{SSL_verify_mode}) {
+ if (my $f = $cnf->{SSL_ca_file}) {
+ $ENV{HTTPS_CA_FILE} = $f;
+ }
+ if (my $f = $cnf->{SSL_ca_path}) {
+ $ENV{HTTPS_CA_DIR} = $f;
+ }
+ }
+ if ($cnf->{SSL_verifycn_scheme}) {
+ $@ = "Net::SSL from Crypt-SSLeay can't verify hostnames; either install IO::Socket::SSL or turn off verification by setting the PERL_LWP_SSL_VERIFY_HOSTNAME environment variable to 0";
+ return undef;
+ }
+ }
$self->SUPER::configure($cnf);
}
@@ -51,9 +72,39 @@ sub http_default_port {
443;
}
-# The underlying SSLeay classes fails to work if the socket is
-# placed in non-blocking mode. This override of the blocking
-# method makes sure it stays the way it was created.
-sub blocking { } # noop
+if ($SSL_SOCKET_CLASS eq "Net::SSL") {
+ # The underlying SSLeay classes fails to work if the socket is
+ # placed in non-blocking mode. This override of the blocking
+ # method makes sure it stays the way it was created.
+ *blocking = sub { };
+}
1;
+
+=head1 NAME
+
+Net::HTTPS - Low-level HTTP over SSL/TLS connection (client)
+
+=head1 DESCRIPTION
+
+The C<Net::HTTPS> is a low-level HTTP over SSL/TLS client. The interface is the same
+as the interface for C<Net::HTTP>, but the constructor method take additional parameters
+as accepted by L<IO::Socket::SSL>. The C<Net::HTTPS> object isa C<IO::Socket::SSL>
+too, which make it inherit additional methods from that base class.
+
+For historical reasons this module also supports using C<Net::SSL> (from the
+Crypt-SSLeay distribution) as its SSL driver and base class. This base is
+automatically selected if available and C<IO::Socket::SSL> isn't. You might
+also force which implementation to use by setting $Net::HTTPS::SSL_SOCKET_CLASS
+before loading this module. If not set this variable is initialized from the
+C<PERL_NET_HTTPS_SSL_SOCKET_CLASS> environment variable.
+
+=head1 ENVIRONMENT
+
+You might set the C<PERL_NET_HTTPS_SSL_SOCKET_CLASS> environment variable to the name
+of the base SSL implementation (and Net::HTTPS base class) to use. The default
+is C<IO::Socket::SSL>. Currently the only other supported value is C<Net::SSL>.
+
+=head1 SEE ALSO
+
+L<Net::HTTP>, L<IO::Socket::SSL>