]> git.proxmox.com Git - pve-http-server.git/commitdiff
call Net::SSLeay::ERR_clear_error() after auth_handler
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 20 Jan 2017 17:15:21 +0000 (18:15 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 20 Jan 2017 17:17:13 +0000 (18:17 +0100)
Some auth_handlers use Crypt::OpenSSL::RSA, which seems to set the openssl error
variable. We need to clear that here, else AnyEvent::TLS aborts the connection.

PVE/APIServer/AnyEvent.pm

index 6e7d4ad4e4171deeeaad6040e1c16d155d3532f1..06d2e81e204dcc226861a13785ee40c2604d7cc6 100755 (executable)
@@ -1184,6 +1184,11 @@ sub unshift_read_header {
                                                    $reqstate->{peer_host});
                    };
                    if (my $err = $@) {
+                       # HACK!!
+                       # Some auth_handlers use Crypt::OpenSSL::RSA, which seems to set the openssl error
+                       # variable. We need to clear that here, else AnyEvent::TLS aborts the connection.
+                       Net::SSLeay::ERR_clear_error();
+
                        # always delay unauthorized calls by 3 seconds
                        my $delay = 3;
                        if (my $formatter = PVE::APIServer::Formatter::get_login_formatter($format)) {
@@ -1197,7 +1202,7 @@ sub unshift_read_header {
                                $resp->header("Content-Type" => $ct);
                                $resp->content($raw);
                            }
-                           $self->response($reqstate, $resp, undef, $nocomp, 3);
+                           $self->response($reqstate, $resp, undef, $nocomp, $delay);
                        } else {
                            my $resp = HTTP::Response->new(HTTP_UNAUTHORIZED, $err);
                            $self->response($reqstate, $resp, undef, 0, $delay);