Hello community, here is the log from the commit of package perl-Mojolicious for openSUSE:Factory checked in at 2015-09-17 09:20:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Mojolicious (Old) and /work/SRC/openSUSE:Factory/.perl-Mojolicious.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Mojolicious" Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Mojolicious/perl-Mojolicious.changes 2015-09-08 17:42:38.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Mojolicious.new/perl-Mojolicious.changes 2015-09-17 09:20:54.000000000 +0200 @@ -1,0 +2,12 @@ +Mon Sep 14 08:43:10 UTC 2015 - co...@suse.com + +- updated to 6.19 + see /usr/share/doc/packages/perl-Mojolicious/Changes + + 6.19 2015-09-12 + - Added code of conduct to Mojolicious::Guides::Contributing. + - Added ignore attribute to Mojo::UserAgent::CookieJar. + - Added tls_version option to Mojo::IOLoop::Server::listen. + - Added version parameter to Mojo::Server::Daemon::listen. + +------------------------------------------------------------------- Old: ---- Mojolicious-6.18.tar.gz New: ---- Mojolicious-6.19.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Mojolicious.spec ++++++ --- /var/tmp/diff_new_pack.PHubnR/_old 2015-09-17 09:20:55.000000000 +0200 +++ /var/tmp/diff_new_pack.PHubnR/_new 2015-09-17 09:20:55.000000000 +0200 @@ -17,7 +17,7 @@ Name: perl-Mojolicious -Version: 6.18 +Version: 6.19 Release: 0 %define cpan_name Mojolicious Summary: Real-time web framework ++++++ Mojolicious-6.18.tar.gz -> Mojolicious-6.19.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/Changes new/Mojolicious-6.19/Changes --- old/Mojolicious-6.18/Changes 2015-09-02 15:24:42.000000000 +0200 +++ new/Mojolicious-6.19/Changes 2015-09-12 13:55:58.000000000 +0200 @@ -1,4 +1,10 @@ +6.19 2015-09-12 + - Added code of conduct to Mojolicious::Guides::Contributing. + - Added ignore attribute to Mojo::UserAgent::CookieJar. + - Added tls_version option to Mojo::IOLoop::Server::listen. + - Added version parameter to Mojo::Server::Daemon::listen. + 6.18 2015-09-02 - Improved portability of slurp function in Mojo::Util. - Fixed handling of parameters with multiple values in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/META.json new/Mojolicious-6.19/META.json --- old/Mojolicious-6.18/META.json 2015-09-02 19:25:48.000000000 +0200 +++ new/Mojolicious-6.19/META.json 2015-09-13 01:36:18.000000000 +0200 @@ -57,6 +57,6 @@ }, "x_IRC" : "irc://irc.perl.org/#mojo" }, - "version" : "6.18", + "version" : "6.19", "x_serialization_backend" : "JSON::PP version 2.27300" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/META.yml new/Mojolicious-6.19/META.yml --- old/Mojolicious-6.18/META.yml 2015-09-02 19:25:48.000000000 +0200 +++ new/Mojolicious-6.19/META.yml 2015-09-13 01:36:18.000000000 +0200 @@ -30,5 +30,5 @@ homepage: http://mojolicio.us license: http://www.opensource.org/licenses/artistic-license-2.0 repository: https://github.com/kraih/mojo.git -version: '6.18' +version: '6.19' x_serialization_backend: 'CPAN::Meta::YAML version 0.016' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/lib/Mojo/Cookie/Response.pm new/Mojolicious-6.19/lib/Mojo/Cookie/Response.pm --- old/Mojolicious-6.18/lib/Mojo/Cookie/Response.pm 2015-08-29 16:01:44.000000000 +0200 +++ new/Mojolicious-6.19/lib/Mojo/Cookie/Response.pm 2015-09-10 02:29:15.000000000 +0200 @@ -19,6 +19,7 @@ while (my ($name, $value) = splice @$pairs, 0, 2) { next unless $ATTRS{my $attr = lc $name}; + $value =~ s/^\.// if $attr eq 'domain'; $value = Mojo::Date->new($value)->epoch if $attr eq 'expires'; $value = 1 if $attr eq 'secure' || $attr eq 'httponly'; $cookies[-1]{$attr eq 'max-age' ? 'max_age' : $attr} = $value; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/lib/Mojo/IOLoop/Server.pm new/Mojolicious-6.19/lib/Mojo/IOLoop/Server.pm --- old/Mojolicious-6.18/lib/Mojo/IOLoop/Server.pm 2015-08-29 13:17:09.000000000 +0200 +++ new/Mojolicious-6.19/lib/Mojo/IOLoop/Server.pm 2015-09-12 13:56:19.000000000 +0200 @@ -97,6 +97,7 @@ $tls->{SSL_ca_file} = $args->{tls_ca} if $args->{tls_ca} && -T $args->{tls_ca}; $tls->{SSL_cipher_list} = $args->{tls_ciphers} if $args->{tls_ciphers}; + $tls->{SSL_version} = $args->{tls_version} if $args->{tls_version}; } sub port { shift->{handle}->sockport } @@ -287,7 +288,8 @@ tls_ciphers => 'AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH' -Cipher specification string. +TLS cipher specification string. For more information about the format see +L<https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-STRINGS>. =item tls_key @@ -301,6 +303,12 @@ TLS verification mode, defaults to C<0x03>. +=item tls_version + + tls_version => 'TLSv1_2' + +TLS protocol version. + =back =head2 port diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/lib/Mojo/Server/Daemon.pm new/Mojolicious-6.19/lib/Mojo/Server/Daemon.pm --- old/Mojolicious-6.18/lib/Mojo/Server/Daemon.pm 2015-08-29 16:03:51.000000000 +0200 +++ new/Mojolicious-6.19/lib/Mojo/Server/Daemon.pm 2015-09-12 13:56:35.000000000 +0200 @@ -158,7 +158,7 @@ reuse => $query->param('reuse') }; if (my $port = $url->port) { $options->{port} = $port } - $options->{"tls_$_"} = $query->param($_) for qw(ca cert ciphers key); + $options->{"tls_$_"} = $query->param($_) for qw(ca cert ciphers key version); my $verify = $query->param('verify'); $options->{tls_verify} = hex $verify if defined $verify; delete $options->{address} if $options->{address} eq '*'; @@ -380,7 +380,7 @@ ca=/etc/tls/ca.crt -Path to TLS certificate authority file. +Path to TLS certificate authority file used to verify the peer certificate. =item cert @@ -392,7 +392,8 @@ ciphers=AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH -Cipher specification string. +TLS cipher specification string. For more information about the format see +L<https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-STRINGS>. =item key @@ -413,6 +414,12 @@ TLS verification mode, defaults to C<0x03>. +=item version + + version=TLSv1_2 + +TLS protocol version. + =back =head2 max_clients diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/lib/Mojo/UserAgent/CookieJar.pm new/Mojolicious-6.19/lib/Mojo/UserAgent/CookieJar.pm --- old/Mojolicious-6.18/lib/Mojo/UserAgent/CookieJar.pm 2015-08-29 16:04:46.000000000 +0200 +++ new/Mojolicious-6.19/lib/Mojo/UserAgent/CookieJar.pm 2015-09-12 18:34:28.000000000 +0200 @@ -4,7 +4,8 @@ use Mojo::Cookie::Request; use Mojo::Path; -has collecting => 1; +has collecting => 1; +has 'ignore'; has max_cookie_size => 4096; sub add { @@ -22,7 +23,6 @@ # Replace cookie my $origin = $cookie->origin // ''; next unless my $domain = lc($cookie->domain // $origin); - $domain =~ s/^\.//; next unless my $path = $cookie->path; next if (my $name = $cookie->name // '') eq ''; my $jar = $self->{jar}{$domain} ||= []; @@ -48,7 +48,7 @@ # Validate domain my $host = $url->ihost; my $domain = lc($cookie->domain // $cookie->origin($host)->origin); - $domain =~ s/^\.//; + if (my $cb = $self->ignore) { next if $cb->($cookie) } next if $host ne $domain && ($host !~ /\Q.$domain\E$/ || $host =~ /\.\d+$/); # Validate path @@ -67,7 +67,7 @@ my @found; return \@found unless my $domain = my $host = $url->ihost; my $path = $url->path->to_abs_string; - while ($domain =~ /[^.]+\.[^.]+|localhost$/) { + while ($domain) { next unless my $old = $self->{jar}{$domain}; # Grab cookies @@ -155,6 +155,18 @@ Allow L</"collect"> to L</"add"> new cookies to the jar, defaults to a true value. +=head2 ignore + + my $ignore = $jar->ignore; + $jar = $jar->ignore(sub {...}); + +A callback used to decide if a cookie should be ignored. + + $jar->ignore(sub { + my $cookie = shift; + return $cookie->domain =~ /^\.?com$/; + }); + =head2 max_cookie_size my $size = $jar->max_cookie_size; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/lib/Mojo/UserAgent.pm new/Mojolicious-6.19/lib/Mojo/UserAgent.pm --- old/Mojolicious-6.18/lib/Mojo/UserAgent.pm 2015-08-29 13:17:09.000000000 +0200 +++ new/Mojolicious-6.19/lib/Mojo/UserAgent.pm 2015-09-10 15:37:51.000000000 +0200 @@ -477,8 +477,9 @@ my $ca = $ua->ca; $ua = $ua->ca('/etc/tls/ca.crt'); -Path to TLS certificate authority file, defaults to the value of the -C<MOJO_CA_FILE> environment variable. Also activates hostname verification. +Path to TLS certificate authority file used to verify the peer certificate, +defaults to the value of the C<MOJO_CA_FILE> environment variable. Also +activates hostname verification. # Show certificate authorities for debugging IO::Socket::SSL::set_defaults( @@ -512,6 +513,14 @@ # Disable collecting cookies from responses $ua->cookie_jar->collecting(0); + # Ignore cookies for public suffixes + my $ps = IO::Socket::SSL::PublicSuffix->default; + $ua->cookie_jar->ignore(sub { + my $cookie = shift; + return undef unless my $domain = $cookie->domain; + return ($ps->public_suffix($domain))[0] eq ''; + }); + # Add custom cookie to the jar $ua->cookie_jar->add( Mojo::Cookie::Response->new( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/lib/Mojolicious/Guides/Contributing.pod new/Mojolicious-6.19/lib/Mojolicious/Guides/Contributing.pod --- old/Mojolicious-6.18/lib/Mojolicious/Guides/Contributing.pod 2015-08-13 03:31:46.000000000 +0200 +++ new/Mojolicious-6.19/lib/Mojolicious/Guides/Contributing.pod 2015-09-06 01:56:47.000000000 +0200 @@ -169,10 +169,100 @@ No names outside of C<Mojolicious.pm>. -Be nice to each other. +=back + +=head1 CODE OF CONDUCT + +Like the technical community as a whole, the Mojolicious team and community is +made up of a mixture of professionals and volunteers from all over the world, +working on every aspect of the mission - including mentorship, teaching, and +connecting people. + +Diversity is one of our huge strengths, but it can also lead to communication +issues and unhappiness. To that end, we have a few ground rules that we ask +people to adhere to. This code applies equally to founders, mentors and those +seeking help and guidance. + +This isn’t an exhaustive list of things that you can’t do. Rather, take it in +the spirit in which it’s intended - a guide to make it easier to enrich all of +us and the technical communities in which we participate. + +This code of conduct applies to all spaces managed by the Mojolicious project. +This includes IRC, the mailing lists, the issue tracker, and any other forums +created by the project team which the community uses for communication. In +addition, violations of this code outside these spaces may affect a person's +ability to participate within them. + +If you believe someone is violating the code of conduct, we ask that you report +it by emailing C<jber...@cpan.org> or other members of +L<the team|Mojolicious/"CORE DEVELOPERS">. + +=over 2 + +=item * B<Be friendly and patient.> + +=item * B<Be welcoming.> We strive to be a community that welcomes and supports +people of all backgrounds and identities. This includes, but is not limited to +members of any race, ethnicity, culture, national origin, colour, immigration +status, social and economic class, educational level, sex, sexual orientation, +gender identity and expression, age, size, family status, political belief, +religion, and mental and physical ability. + +=item * B<Be considerate.> Your work will be used by other people, and you in +turn will depend on the work of others. Any decision you take will affect users +and colleagues, and you should take those consequences into account when making +decisions. Remember that we're a world-wide community, so you might not be +communicating in someone else's primary language. + +=item * B<Be respectful.> Not all of us will agree all the time, but +disagreement is no excuse for poor behavior and poor manners. We might all +experience some frustration now and then, but we cannot allow that frustration +to turn into a personal attack. It’s important to remember that a community +where people feel uncomfortable or threatened is not a productive one. Members +of the Mojolicious community should be respectful when dealing with other +members as well as with people outside the Mojolicious community. + +=item * B<Be careful in the words that you choose.> We are a community of +professionals, and we conduct ourselves professionally. Be kind to others. Do +not insult or put down other participants. Harassment and other exclusionary +behavior aren't acceptable. This includes, but is not limited to: + +=over 2 + +=item * Violent threats or language directed against another person. + +=item * Discriminatory jokes and language. + +=item * Posting sexually explicit or violent material. + +=item * Posting (or threatening to post) other people's personally identifying +information ("doxing"). + +=item * Personal insults, especially those using racist or sexist terms. + +=item * Unwelcome sexual attention. + +=item * Advocating for, or encouraging, any of the above behavior. + +=item * Repeated harassment of others. In general, if someone asks you to stop, +then stop. + +=back + +=item * B<When we disagree, try to understand why.> Disagreements, both social +and technical, happen all the time and Mojolicious is no exception. It is +important that we resolve disagreements and differing views constructively. +Remember that we’re different. The strength of Mojolicious comes from its varied +community, people from a wide range of backgrounds. Different people have +different perspectives on issues. Being unable to understand why someone holds a +viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to err +and blaming each other doesn’t get us anywhere. Instead, focus on helping to +resolve issues and learning from mistakes. =back +Original text courtesy of the L<Speak Up! project|http://speakup.io/coc.html>. + =head1 MORE You can continue with L<Mojolicious::Guides> now or take a look at the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/lib/Mojolicious.pm new/Mojolicious-6.19/lib/Mojolicious.pm --- old/Mojolicious-6.18/lib/Mojolicious.pm 2015-09-02 17:00:50.000000000 +0200 +++ new/Mojolicious-6.19/lib/Mojolicious.pm 2015-09-02 19:26:12.000000000 +0200 @@ -43,7 +43,7 @@ has validator => sub { Mojolicious::Validator->new }; our $CODENAME = 'Clinking Beer Mugs'; -our $VERSION = '6.18'; +our $VERSION = '6.19'; sub AUTOLOAD { my $self = shift; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/t/mojo/cookie.t new/Mojolicious-6.19/t/mojo/cookie.t --- old/Mojolicious-6.18/t/mojo/cookie.t 2015-08-29 01:31:10.000000000 +0200 +++ new/Mojolicious-6.19/t/mojo/cookie.t 2015-09-10 02:48:49.000000000 +0200 @@ -209,7 +209,7 @@ # Parse response cookie with invalid flag (RFC 6265) $cookies = Mojo::Cookie::Response->parse( - 'foo="ba r"; Domain=example.com; Path=/test; Max-Age=60;' + 'foo="ba r"; Domain=.example.com; Path=/test; Max-Age=60;' . ' Expires=Thu, 07 Aug 2008 07:07:59 GMT; InSecure;'); is $cookies->[0]->name, 'foo', 'right name'; is $cookies->[0]->value, 'ba r', 'right value'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/t/mojo/cookiejar.t new/Mojolicious-6.19/t/mojo/cookiejar.t --- old/Mojolicious-6.18/t/mojo/cookiejar.t 2015-08-29 01:31:11.000000000 +0200 +++ new/Mojolicious-6.19/t/mojo/cookiejar.t 2015-09-12 18:32:24.000000000 +0200 @@ -100,41 +100,6 @@ is $cookies->[1]->value, 'bar', 'right value'; is $cookies->[2], undef, 'no third cookie'; -# Random top-level domain and IDNA -$jar = Mojo::UserAgent::CookieJar->new; -$jar->add( - Mojo::Cookie::Response->new( - domain => 'com', - path => '/foo', - name => 'foo', - value => 'bar' - ), - Mojo::Cookie::Response->new( - domain => 'xn--bcher-kva.com', - path => '/foo', - name => 'bar', - value => 'baz' - ) -); -$cookies = $jar->find(Mojo::URL->new('http://bücher.com/foo')); -is $cookies->[0]->name, 'bar', 'right name'; -is $cookies->[0]->value, 'baz', 'right value'; -is $cookies->[1], undef, 'no second cookie'; -$cookies = $jar->find(Mojo::URL->new('http://bücher.com/foo')); -is $cookies->[0]->name, 'bar', 'right name'; -is $cookies->[0]->value, 'baz', 'right value'; -is $cookies->[1], undef, 'no second cookie'; -$cookies = $jar->all; -is $cookies->[0]->domain, 'com', 'right domain'; -is $cookies->[0]->path, '/foo', 'right path'; -is $cookies->[0]->name, 'foo', 'right name'; -is $cookies->[0]->value, 'bar', 'right value'; -is $cookies->[1]->domain, 'xn--bcher-kva.com', 'right domain'; -is $cookies->[1]->path, '/foo', 'right path'; -is $cookies->[1]->name, 'bar', 'right name'; -is $cookies->[1]->value, 'baz', 'right value'; -is $cookies->[2], undef, 'no third cookie'; - # Huge cookie $jar = Mojo::UserAgent::CookieJar->new->max_cookie_size(1024); $jar->add( @@ -246,43 +211,6 @@ is $cookies->[0]->value, 'bar', 'right value'; is $cookies->[1], undef, 'no second cookie'; -# Ignore leading dot -$jar = Mojo::UserAgent::CookieJar->new; -$jar->add( - Mojo::Cookie::Response->new( - domain => '.example.com', - path => '/foo', - name => 'foo', - value => 'bar' - ), - Mojo::Cookie::Response->new( - domain => 'example.com', - path => '/foo', - name => 'bar', - value => 'baz' - ) -); -$cookies = $jar->find(Mojo::URL->new('http://www.labs.example.com/foo')); -is $cookies->[0]->name, 'foo', 'right name'; -is $cookies->[0]->value, 'bar', 'right value'; -is $cookies->[1]->name, 'bar', 'right name'; -is $cookies->[1]->value, 'baz', 'right value'; -is $cookies->[2], undef, 'no third cookie'; -$cookies = $jar->find(Mojo::URL->new('http://labs.example.com/foo')); -is $cookies->[0]->name, 'foo', 'right name'; -is $cookies->[0]->value, 'bar', 'right value'; -is $cookies->[1]->name, 'bar', 'right name'; -is $cookies->[1]->value, 'baz', 'right value'; -is $cookies->[2], undef, 'no third cookie'; -$cookies = $jar->find(Mojo::URL->new('http://example.com/foo/bar')); -is $cookies->[0]->name, 'foo', 'right name'; -is $cookies->[0]->value, 'bar', 'right value'; -is $cookies->[1]->name, 'bar', 'right name'; -is $cookies->[1]->value, 'baz', 'right value'; -is $cookies->[2], undef, 'no third cookie'; -$cookies = $jar->find(Mojo::URL->new('http://example.com/foobar')); -is $cookies->[0], undef, 'no cookies'; - # "(" in path $jar = Mojo::UserAgent::CookieJar->new; $jar->add( @@ -382,6 +310,59 @@ is $tx->req->cookie('foo')->value, 'local', 'right value'; is $tx->req->cookie('bar'), undef, 'no cookie'; +# Gather and prepare cookies for unknown public suffix (with IDNA) +$jar = Mojo::UserAgent::CookieJar->new; +$tx = Mojo::Transaction::HTTP->new; +$tx->req->url->parse('http://bücher.com/foo'); +$tx->res->cookies( + Mojo::Cookie::Response->new( + domain => 'com', + path => '/foo', + name => 'foo', + value => 'bar' + ), + Mojo::Cookie::Response->new( + domain => 'xn--bcher-kva.com', + path => '/foo', + name => 'bar', + value => 'baz' + ) +); +$jar->collect($tx); +$tx = Mojo::Transaction::HTTP->new; +$tx->req->url->parse('http://bücher.com/foo'); +$jar->prepare($tx); +is $tx->req->cookie('foo')->name, 'foo', 'right name'; +is $tx->req->cookie('foo')->value, 'bar', 'right value'; +is $tx->req->cookie('bar')->name, 'bar', 'right name'; +is $tx->req->cookie('bar')->value, 'baz', 'right value'; + +# Gather and prepare cookies for public suffix (with IDNA) +$jar = Mojo::UserAgent::CookieJar->new; +$tx = Mojo::Transaction::HTTP->new; +$tx->req->url->parse('http://bücher.com/foo'); +$tx->res->cookies( + Mojo::Cookie::Response->new( + domain => 'com', + path => '/foo', + name => 'foo', + value => 'bar' + ), + Mojo::Cookie::Response->new( + domain => 'xn--bcher-kva.com', + path => '/foo', + name => 'bar', + value => 'baz' + ) +); +$jar->ignore(sub { shift->domain eq 'com' })->collect($tx); +$tx = Mojo::Transaction::HTTP->new; +$tx->req->url->parse('http://bücher.com/foo'); +$jar->prepare($tx); +is $tx->req->cookie('foo'), undef, 'no cookie'; +is $tx->req->cookie('bar')->name, 'bar', 'right name'; +is $tx->req->cookie('bar')->value, 'baz', 'right value'; + # Gather and prepare cookies with domain and path $jar = Mojo::UserAgent::CookieJar->new; $tx = Mojo::Transaction::HTTP->new; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.18/t/mojo/user_agent_tls.t new/Mojolicious-6.19/t/mojo/user_agent_tls.t --- old/Mojolicious-6.18/t/mojo/user_agent_tls.t 2015-08-29 01:31:32.000000000 +0200 +++ new/Mojolicious-6.19/t/mojo/user_agent_tls.t 2015-09-12 13:54:15.000000000 +0200 @@ -85,17 +85,21 @@ . '&key=t/mojo/certs/server.key' . '&ca=t/mojo/certs/ca.crt' . '&ciphers=RC4-SHA:ALL' - . '&verify=0x00'; + . '&verify=0x00' + . '&version=SSLv3'; $daemon->listen([$listen])->start; $port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; # Invalid certificate $ua = Mojo::UserAgent->new(ioloop => $ua->ioloop); $ua->cert('t/mojo/certs/bad.crt')->key('t/mojo/certs/bad.key'); +IO::Socket::SSL::set_defaults(SSL_version => 'SSLv3'); $tx = $ua->get("https://127.0.0.1:$port"); ok $tx->success, 'successful'; ok !$tx->error, 'no error'; is $ua->ioloop->stream($tx->connection)->handle->get_cipher, 'RC4-SHA', 'RC4-SHA has been negotiatied'; +is $ua->ioloop->stream($tx->connection)->handle->get_sslversion, 'SSLv3', + 'SSLv3 has been negotiatied'; done_testing();