Initial Commit
This commit is contained in:
538
database/perl/vendor/lib/Crypt/SSLeay.pm
vendored
Normal file
538
database/perl/vendor/lib/Crypt/SSLeay.pm
vendored
Normal file
@@ -0,0 +1,538 @@
|
||||
package Crypt::SSLeay;
|
||||
|
||||
use strict;
|
||||
use vars '$VERSION';
|
||||
$VERSION = '0.72';
|
||||
$VERSION = eval $VERSION;
|
||||
|
||||
eval {
|
||||
require XSLoader;
|
||||
XSLoader::load('Crypt::SSLeay', $VERSION);
|
||||
1;
|
||||
}
|
||||
or do {
|
||||
require DynaLoader;
|
||||
use vars '@ISA'; # not really locally scoped, it just looks that way
|
||||
@ISA = qw(DynaLoader);
|
||||
bootstrap Crypt::SSLeay $VERSION;
|
||||
};
|
||||
|
||||
use vars qw(%CIPHERS);
|
||||
%CIPHERS = (
|
||||
'NULL-MD5' => "No encryption with a MD5 MAC",
|
||||
'RC4-MD5' => "128 bit RC4 encryption with a MD5 MAC",
|
||||
'EXP-RC4-MD5' => "40 bit RC4 encryption with a MD5 MAC",
|
||||
'RC2-CBC-MD5' => "128 bit RC2 encryption with a MD5 MAC",
|
||||
'EXP-RC2-CBC-MD5' => "40 bit RC2 encryption with a MD5 MAC",
|
||||
'IDEA-CBC-MD5' => "128 bit IDEA encryption with a MD5 MAC",
|
||||
'DES-CBC-MD5' => "56 bit DES encryption with a MD5 MAC",
|
||||
'DES-CBC-SHA' => "56 bit DES encryption with a SHA MAC",
|
||||
'DES-CBC3-MD5' => "192 bit EDE3 DES encryption with a MD5 MAC",
|
||||
'DES-CBC3-SHA' => "192 bit EDE3 DES encryption with a SHA MAC",
|
||||
'DES-CFB-M1' => "56 bit CFB64 DES encryption with a one byte MD5 MAC",
|
||||
);
|
||||
|
||||
use Crypt::SSLeay::X509;
|
||||
|
||||
# A xsupp bug made this necessary
|
||||
sub Crypt::SSLeay::CTX::DESTROY { shift->free; }
|
||||
sub Crypt::SSLeay::Conn::DESTROY { shift->free; }
|
||||
sub Crypt::SSLeay::X509::DESTROY { shift->free; }
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Crypt::SSLeay - OpenSSL support for LWP
|
||||
|
||||
=head1 HEARTBLEED WARNING
|
||||
|
||||
C<perl Makefile.PL> will display a warning if it thinks your OpenSSL might be vulnerable to the L<Heartbleed Bug|https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160>. You can, of course, go ahead and install the module, but you should be aware that your system might be exposed to an extremely serious vulnerability. This is just a heuristic based on the version reported by OpenSSL. It is entirely possible that your distrbution actually pushed a patched library, so if you have concerns, you should investigate further.
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Net::SSL;
|
||||
use LWP::UserAgent;
|
||||
|
||||
my $ua = LWP::UserAgent->new(
|
||||
ssl_opts => { verify_hostname => 0 },
|
||||
);
|
||||
|
||||
my $response = $ua->get('https://www.example.com/');
|
||||
print $response->content, "\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This Perl module provides support for the HTTPS protocol under L<LWP>, to
|
||||
allow an L<LWP::UserAgent> object to perform GET, HEAD, and POST requests
|
||||
over encrypted socket connections. Please see L<LWP> for more information
|
||||
on POST requests.
|
||||
|
||||
The C<Crypt::SSLeay> package provides C<Net::SSL>, which, if requested, is
|
||||
loaded by C<LWP::Protocol::https> for https requests and provides the
|
||||
necessary SSL glue.
|
||||
|
||||
This distribution also makes following deprecated modules available:
|
||||
|
||||
Crypt::SSLeay::CTX
|
||||
Crypt::SSLeay::Conn
|
||||
Crypt::SSLeay::X509
|
||||
|
||||
=head1 DO YOU NEED Crypt::SSLeay?
|
||||
|
||||
Starting with version 6.02 of L<LWP>, C<https> support was unbundled into
|
||||
L<LWP::Protocol::https>. This module specifies as one of its prerequisites
|
||||
L<IO::Socket::SSL> which is automatically used by L<LWP::UserAgent> unless
|
||||
this preference is overridden separately. C<IO::Socket::SSL> is a more
|
||||
complete implementation, and, crucially, it allows hostname verification.
|
||||
C<Crypt::SSLeay> does not support this. At this point, C<Crypt::SSLeay> is
|
||||
maintained to support existing software that already depends on it.
|
||||
However, it is possible that your software does not really depend on
|
||||
C<Crypt::SSLeay>, only on the ability of C<LWP::UserAgent> class to
|
||||
communicate with sites over SSL/TLS.
|
||||
|
||||
If are using version C<LWP> 6.02 or later, and therefore have installed
|
||||
C<LWP::Protocol::https> and its dependencies, and do not explicitly C<use>
|
||||
C<Net::SSL> before loading C<LWP::UserAgent>, or override the default socket
|
||||
class, you are probably using C<IO::Socket::SSL> and do not really need
|
||||
C<Crypt::SSLeay>.
|
||||
|
||||
If you have both C<Crypt::SSLeay> and C<IO::Socket::SSL> installed, and
|
||||
would like to force C<LWP::UserAgent> to use C<Crypt::SSLeay>, you can
|
||||
use:
|
||||
|
||||
use Net::HTTPS;
|
||||
$Net::HTTPS::SSL_SOCKET_CLASS = 'Net::SSL';
|
||||
use LWP::UserAgent;
|
||||
|
||||
or
|
||||
|
||||
local $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
|
||||
use LWP::UserAgent;
|
||||
|
||||
or
|
||||
|
||||
use Net::SSL;
|
||||
use LWP::UserAgent;
|
||||
|
||||
=head1 ENVIRONMENT VARIABLES
|
||||
|
||||
=over 4
|
||||
|
||||
=item Specify SSL Socket Class
|
||||
|
||||
C<$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS}> can be used to instruct
|
||||
C<LWP::UserAgent> to use C<Net::SSL> for HTTPS support rather than
|
||||
C<IO::Socket::SSL>.
|
||||
|
||||
=item Proxy Support
|
||||
|
||||
$ENV{HTTPS_PROXY} = 'http://proxy_hostname_or_ip:port';
|
||||
|
||||
=item Proxy Basic Authentication
|
||||
|
||||
$ENV{HTTPS_PROXY_USERNAME} = 'username';
|
||||
$ENV{HTTPS_PROXY_PASSWORD} = 'password';
|
||||
|
||||
=item SSL diagnostics and Debugging
|
||||
|
||||
$ENV{HTTPS_DEBUG} = 1;
|
||||
|
||||
=item Default SSL Version
|
||||
|
||||
$ENV{HTTPS_VERSION} = '3';
|
||||
|
||||
=item Client Certificate Support
|
||||
|
||||
$ENV{HTTPS_CERT_FILE} = 'certs/notacacert.pem';
|
||||
$ENV{HTTPS_KEY_FILE} = 'certs/notacakeynopass.pem';
|
||||
|
||||
=item CA cert Peer Verification
|
||||
|
||||
$ENV{HTTPS_CA_FILE} = 'certs/ca-bundle.crt';
|
||||
$ENV{HTTPS_CA_DIR} = 'certs/';
|
||||
|
||||
=item Client PKCS12 cert support
|
||||
|
||||
$ENV{HTTPS_PKCS12_FILE} = 'certs/pkcs12.pkcs12';
|
||||
$ENV{HTTPS_PKCS12_PASSWORD} = 'PKCS12_PASSWORD';
|
||||
|
||||
=back
|
||||
|
||||
=head1 INSTALL
|
||||
|
||||
=head2 OpenSSL
|
||||
|
||||
You must have OpenSSL installed before compiling this module. You can get
|
||||
the latest OpenSSL package from L<https://www.openssl.org/source/>. We no
|
||||
longer support pre-2000 versions of OpenSSL.
|
||||
|
||||
If you are building OpenSSL from source, please follow the directions
|
||||
included in the source package.
|
||||
|
||||
=head2 Crypt::SSLeay via Makefile.PL
|
||||
|
||||
C<Makefile.PL> accepts the following command line arguments:
|
||||
|
||||
=over 4
|
||||
|
||||
=item C<incpath>
|
||||
|
||||
Path to OpenSSL headers. Can also be specified via C<$ENV{OPENSSL_INCLUDE}>.
|
||||
If the command line argument is provided, it overrides any value specified
|
||||
via the environment variable. Of course, you can ignore both the command
|
||||
line argument and the environment variable, and just add the path to your
|
||||
compiler specific environment variable such as C<CPATH> or C<INCLUDE> etc.
|
||||
|
||||
=item C<libpath>
|
||||
|
||||
Path to OpenSSL libraries. Can also be specified via C<$ENV{OPENSSL_LIB}>.
|
||||
If the command line argument is provided, it overrides any value specified
|
||||
by the environment variable. Of course, you can ignore both the command line
|
||||
argument and the environment variable and just add the path to your compiler
|
||||
specific environment variable such as C<LIBRARY_PATH> or C<LIB> etc.
|
||||
|
||||
=item C<live-tests>
|
||||
|
||||
Use C<--live-tests> to request tests that try to connect to an external web
|
||||
site, and C<--no-live_tests> to prevent such tests from running. If you run
|
||||
C<Makefile.PL> interactively, and this argument is not specified on the
|
||||
command line, you will be prompted for a value.
|
||||
|
||||
Default is false.
|
||||
|
||||
=item C<static>
|
||||
|
||||
Boolean. Default is false. B<TODO>: Does it work?
|
||||
|
||||
=item C<verbose>
|
||||
|
||||
Boolean. Default is false. If you pass C<--verbose> on the command line,
|
||||
both C<Devel::CheckLib> and C<ExtUtils::CBuilder> instances will be
|
||||
configured to echo what they are doing.
|
||||
|
||||
=back
|
||||
|
||||
If everything builds OK, but you get failures when during tests, ensure that
|
||||
C<LD_LIBRARY_PATH> points to the location where the correct shared libraries
|
||||
are located.
|
||||
|
||||
If you are using a custom OpenSSL build, please keep in mind that
|
||||
C<Crypt::SSLeay> must be built using the same compiler and build tools used
|
||||
to build C<perl> and OpenSSL. This can be more of an issue on Windows. If
|
||||
you are using Active State Perl, install the MinGW package distributed by
|
||||
them, and build OpenSSL using that before trying to build this module. If
|
||||
you have built your own Perl using Microsoft SDK tools or IDEs, make sure
|
||||
you build OpenSSL using the same tools.
|
||||
|
||||
Depending on your OS, pre-built OpenSSL packages may be available. To get
|
||||
the require headers and import libraries, you may need to install a
|
||||
development version of your operating system's OpenSSL library package. The
|
||||
key is that C<Crypt::SSLeay> makes calls to the OpenSSL library, and how to
|
||||
do so is specified in the C header files that come with the library. Some
|
||||
systems break out the header files into a separate package from that of the
|
||||
libraries. Once the program has been built, you don't need the headers any
|
||||
more.
|
||||
|
||||
=head2 Crypt::SSLeay
|
||||
|
||||
The latest Crypt::SSLeay can be found at your nearest CPAN mirror, as well
|
||||
as L<https://metacpan.org/pod/Crypt::SSLeay>.
|
||||
|
||||
Once you have downloaded it, C<Crypt::SSLeay> installs easily using the
|
||||
standard build process:
|
||||
|
||||
$ perl Makefile.PL
|
||||
$ make
|
||||
$ make test
|
||||
$ make install
|
||||
|
||||
or
|
||||
|
||||
$ cpanm Crypt::SSLeay
|
||||
|
||||
If you have OpenSSL headers and libraries in nonstandard locations, you can
|
||||
use
|
||||
|
||||
$ perl Makefile.PL --incpath=... --libpath=...
|
||||
|
||||
If you would like to use C<cpanm> with such custom locations, you can do
|
||||
|
||||
$ OPENSSL_INCLUDE=... OPENSSL_LIB=... cpanm Crypt::SSLeay
|
||||
|
||||
or, on Windows,
|
||||
|
||||
> set OPENSSL_INCLUDE=...
|
||||
> set OPENSSL_LIB=...
|
||||
> cpanm Crypt::SSLeay
|
||||
|
||||
If you are on Windows, and using a MinGW distribution bundled with
|
||||
ActiveState Perl or Strawberry Perl, you would use C<dmake> rather than
|
||||
C<make>. If you are using Microsoft's build tools, you would use C<nmake>.
|
||||
|
||||
For unattended (batch) installations, to be absolutely certain that
|
||||
F<Makefile.PL> does not prompt for questions on STDIN, set the environment
|
||||
variable C<PERL_MM_USE_DEFAULT=1> as with any CPAN module built using
|
||||
L<ExtUtils::MakeMaker>.
|
||||
|
||||
=head3 VMS
|
||||
|
||||
I do not have any experience with VMS. If OpenSSL headers and libraries are
|
||||
not in standard locations searched by your build system by default, please
|
||||
set things up so that they are. If you have generic instructions on how to
|
||||
do it, please open a ticket on RT with the information so I can add it to
|
||||
this document.
|
||||
|
||||
=head1 PROXY SUPPORT
|
||||
|
||||
L<LWP::UserAgent> and L<Crypt::SSLeay> have their own versions of
|
||||
proxy support. Please read these sections to see which one
|
||||
is appropriate.
|
||||
|
||||
=head2 LWP::UserAgent proxy support
|
||||
|
||||
C<LWP::UserAgent> has its own methods of proxying which may work for you
|
||||
and is likely to be incompatible with C<Crypt::SSLeay> proxy support.
|
||||
To use C<LWP::UserAgent> proxy support, try something like:
|
||||
|
||||
my $ua = LWP::UserAgent->new;
|
||||
$ua->proxy([qw( https http )], "$proxy_ip:$proxy_port");
|
||||
|
||||
At the time of this writing, libwww v5.6 seems to proxy https requests
|
||||
fine with an Apache F<mod_proxy> server. It sends a line like:
|
||||
|
||||
GET https://www.example.com HTTP/1.1
|
||||
|
||||
to the proxy server, which is not the C<CONNECT> request that some
|
||||
proxies would expect, so this may not work with other proxy servers than
|
||||
F<mod_proxy>. The C<CONNECT> method is used by C<Crypt::SSLeay>'s
|
||||
internal proxy support.
|
||||
|
||||
=head2 Crypt::SSLeay proxy support
|
||||
|
||||
For native C<Crypt::SSLeay> proxy support of https requests,
|
||||
you need to set the environment variable C<HTTPS_PROXY> to your
|
||||
proxy server and port, as in:
|
||||
|
||||
# proxy support
|
||||
$ENV{HTTPS_PROXY} = 'http://proxy_hostname_or_ip:port';
|
||||
$ENV{HTTPS_PROXY} = '127.0.0.1:8080';
|
||||
|
||||
Use of the C<HTTPS_PROXY> environment variable in this way
|
||||
is similar to C<LWP::UserAgent->env_proxy()> usage, but calling
|
||||
that method will likely override or break the C<Crypt::SSLeay>
|
||||
support, so do not mix the two.
|
||||
|
||||
Basic auth credentials to the proxy server can be provided
|
||||
this way:
|
||||
|
||||
# proxy_basic_auth
|
||||
$ENV{HTTPS_PROXY_USERNAME} = 'username';
|
||||
$ENV{HTTPS_PROXY_PASSWORD} = 'password';
|
||||
|
||||
For an example of LWP scripting with C<Crypt::SSLeay> native proxy
|
||||
support, please look at the F<eg/lwp-ssl-test> script in the
|
||||
C<Crypt::SSLeay> distribution.
|
||||
|
||||
=head1 CLIENT CERTIFICATE SUPPORT
|
||||
|
||||
Client certificates are supported. PEM encoded certificate and
|
||||
private key files may be used like this:
|
||||
|
||||
$ENV{HTTPS_CERT_FILE} = 'certs/notacacert.pem';
|
||||
$ENV{HTTPS_KEY_FILE} = 'certs/notacakeynopass.pem';
|
||||
|
||||
You may test your files with the F<eg/net-ssl-test> program,
|
||||
bundled with the distribution, by issuing a command like:
|
||||
|
||||
perl eg/net-ssl-test -cert=certs/notacacert.pem \
|
||||
-key=certs/notacakeynopass.pem -d GET $HOST_NAME
|
||||
|
||||
Additionally, if you would like to tell the client where
|
||||
the CA file is, you may set these.
|
||||
|
||||
$ENV{HTTPS_CA_FILE} = "some_file";
|
||||
$ENV{HTTPS_CA_DIR} = "some_dir";
|
||||
|
||||
Note that, if specified, C<$ENV{HTTPS_CA_FILE}> must point to the actual
|
||||
certificate file. That is, C<$ENV{HTTPS_CA_DIR}> is *not* the path were
|
||||
C<$ENV{HTTPS_CA_FILE}> is located.
|
||||
|
||||
For certificates in C<$ENV{HTTPS_CA_DIR}> to be picked up, follow the
|
||||
instructions on
|
||||
L<http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>
|
||||
|
||||
There is no sample CA cert file at this time for testing,
|
||||
but you may configure F<eg/net-ssl-test> to use your CA cert
|
||||
with the -CAfile option.
|
||||
|
||||
(TODO: then what is the F<./certs> directory in the distribution?)
|
||||
|
||||
=head2 Creating a test certificate
|
||||
|
||||
To create simple test certificates with OpenSSL, you may
|
||||
run the following command:
|
||||
|
||||
openssl req -config /usr/local/openssl/openssl.cnf \
|
||||
-new -days 365 -newkey rsa:1024 -x509 \
|
||||
-keyout notacakey.pem -out notacacert.pem
|
||||
|
||||
To remove the pass phrase from the key file, run:
|
||||
|
||||
openssl rsa -in notacakey.pem -out notacakeynopass.pem
|
||||
|
||||
=head2 PKCS12 support
|
||||
|
||||
The directives for enabling use of PKCS12 certificates is:
|
||||
|
||||
$ENV{HTTPS_PKCS12_FILE} = 'certs/pkcs12.pkcs12';
|
||||
$ENV{HTTPS_PKCS12_PASSWORD} = 'PKCS12_PASSWORD';
|
||||
|
||||
Use of this type of certificate takes precedence over previous
|
||||
certificate settings described.
|
||||
|
||||
(TODO: unclear? Meaning "the presence of this type of certificate"?)
|
||||
|
||||
=head1 SSL versions
|
||||
|
||||
C<Crypt::SSLeay> tries very hard to connect to I<any> SSL web server
|
||||
accommodating servers that are buggy, old or simply not standards-compliant.
|
||||
To this effect, this module will try SSL connections in this order:
|
||||
|
||||
=over 4
|
||||
|
||||
=item SSL v23
|
||||
|
||||
should allow v2 and v3 servers to pick their best type
|
||||
|
||||
=item SSL v3
|
||||
|
||||
best connection type
|
||||
|
||||
=item SSL v2
|
||||
|
||||
old connection type
|
||||
|
||||
=back
|
||||
|
||||
Unfortunately, some servers seem not to handle a reconnect to SSL v3 after a
|
||||
failed connect of SSL v23 is tried, so you may set before using LWP or
|
||||
Net::SSL:
|
||||
|
||||
$ENV{HTTPS_VERSION} = 3;
|
||||
|
||||
to force a version 3 SSL connection first. At this time only a version 2 SSL
|
||||
connection will be tried after this, as the connection attempt order remains
|
||||
unchanged by this setting.
|
||||
|
||||
=head1 ACKNOWLEDGEMENTS
|
||||
|
||||
Many thanks to the following individuals who helped improve
|
||||
C<Crypt-SSLeay>:
|
||||
|
||||
I<Gisle Aas> for writing this module and many others including libwww, for
|
||||
perl. The web will never be the same :)
|
||||
|
||||
I<Ben Laurie> deserves kudos for his excellent patches for better error
|
||||
handling, SSL information inspection, and random seeding.
|
||||
|
||||
I<Dongqiang Bai> for host name resolution fix when using a proxy.
|
||||
|
||||
I<Stuart Horner> of Core Communications, Inc. who found the need for
|
||||
building C<--shared> OpenSSL libraries.
|
||||
|
||||
I<Pavel Hlavnicka> for a patch for freeing memory when using a pkcs12
|
||||
file, and for inspiring more robust C<read()> behavior.
|
||||
|
||||
I<James Woodyatt> is a champ for finding a ridiculous memory leak that
|
||||
has been the bane of many a Crypt::SSLeay user.
|
||||
|
||||
I<Bryan Hart> for his patch adding proxy support, and thanks to I<Tobias
|
||||
Manthey> for submitting another approach.
|
||||
|
||||
I<Alex Rhomberg> for Alpha linux ccc patch.
|
||||
|
||||
I<Tobias Manthey> for his patches for client certificate support.
|
||||
|
||||
I<Daisuke Kuroda> for adding PKCS12 certificate support.
|
||||
|
||||
I<Gamid Isayev> for CA cert support and insights into error messaging.
|
||||
|
||||
I<Jeff Long> for working through a tricky CA cert SSLClientVerify issue.
|
||||
|
||||
I<Chip Turner> for a patch to build under perl 5.8.0.
|
||||
|
||||
I<Joshua Chamas> for the time he spent maintaining the module.
|
||||
|
||||
I<Jeff Lavallee> for help with alarms on read failures (CPAN bug #12444).
|
||||
|
||||
I<Guenter Knauf> for significant improvements in configuring things in
|
||||
Win32 and Netware lands and Jan Dubois for various suggestions for
|
||||
improvements.
|
||||
|
||||
and I<many others> who provided bug reports, suggestions, fixes and
|
||||
patches.
|
||||
|
||||
If you have reported a bug or provided feedback, and you would like to be
|
||||
mentioned by name in this section, please file request on
|
||||
L<rt.cpan.org|http://rt.cpan.org/NoAuth/Bugs.html?Dist=Crypt-SSLeay>.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
=over 4
|
||||
|
||||
=item Net::SSL
|
||||
|
||||
If you have downloaded this distribution as of a dependency of another
|
||||
distribution, it's probably due to this module (which is included in
|
||||
this distribution).
|
||||
|
||||
=item Net::SSLeay
|
||||
|
||||
L<Net::SSLeay> provides access to the OpenSSL API directly
|
||||
from Perl. See L<https://metacpan.org/pod/Net::SSLeay/>.
|
||||
|
||||
=item Building OpenSSL on 64-bit Windows 8.1 Pro using SDK tools
|
||||
|
||||
My blog post L<http://blog.nu42.com/2014/04/building-openssl-101g-on-64-bit-windows.html> might be helpful.
|
||||
|
||||
=back
|
||||
|
||||
=head1 SUPPORT
|
||||
|
||||
For issues related to using of C<Crypt::SSLeay> & C<Net::SSL> with Perl's
|
||||
L<LWP>, please send email to C<libwww@perl.org>.
|
||||
|
||||
For OpenSSL or general SSL support, including issues associated with
|
||||
building and installing OpenSSL on your system, please email the OpenSSL
|
||||
users mailing list at C<openssl-users@openssl.org>. See
|
||||
L<http://www.openssl.org/support/community.html> for other mailing lists
|
||||
and archives.
|
||||
|
||||
Please report all bugs using
|
||||
L<rt.cpan.org|http://rt.cpan.org/NoAuth/Bugs.html?Dist=Crypt-SSLeay>.
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
This module was originally written by Gisle Aas, and was subsequently
|
||||
maintained by Joshua Chamas, David Landgren, brian d foy and Sinan Unur.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright (c) 2010-2014 A. Sinan Unur
|
||||
|
||||
Copyright (c) 2006-2007 David Landgren
|
||||
|
||||
Copyright (c) 1999-2003 Joshua Chamas
|
||||
|
||||
Copyright (c) 1998 Gisle Aas
|
||||
|
||||
=head1 LICENSE
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of Artistic License 2.0 (see
|
||||
L<http://www.perlfoundation.org/artistic_license_2_0>).
|
||||
|
||||
=cut
|
||||
Reference in New Issue
Block a user