1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
Description: Fix _update_peer subroutine to work with IPv6
Origin: vendor
Bug: https://rt.cpan.org/Public/Bug/Display.html?id=79916
Forwarded: not-needed
Author: Salvatore Bonaccorso <carnil@debian.org>
Last-Update: 2012-10-05
---
SSL.pm | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
--- a/SSL.pm
+++ b/SSL.pm
@@ -69,11 +69,11 @@
my $ip6 = eval {
require Socket;
Socket->VERSION(1.95);
- Socket->import( 'inet_pton' );
+ Socket->import( qw/inet_pton inet_ntop/ );
1;
} || eval {
require Socket6;
- Socket6->import( 'inet_pton' );
+ Socket6->import( qw/inet_pton inet_ntop/ );
1;
};
@@ -525,9 +525,17 @@
my $self = shift;
my $arg_hash = ${*$self}{'_SSL_arguments'};
eval {
- my ($port,$addr) = sockaddr_in( getpeername( $self ));
- $arg_hash->{PeerAddr} = inet_ntoa( $addr );
- $arg_hash->{PeerPort} = $port;
+ my $sockaddr = getpeername( $self );
+ my $af = sockaddr_family($sockaddr);
+ if( $af == AF_INET6 ) {
+ my ($port, $addr, $scope, $flow ) = unpack_sockaddr_in6( $sockaddr );
+ $arg_hash->{PeerAddr} = inet_ntop( $af, $addr );
+ $arg_hash->{PeerPort} = $port;
+ } else {
+ my ($port,$addr) = sockaddr_in( $sockaddr);
+ $arg_hash->{PeerAddr} = inet_ntoa( $addr );
+ $arg_hash->{PeerPort} = $port;
+ }
}
}
|