File: 0001-Fix-update_peer-subroutine-to-work-with-IPv6.patch

package info (click to toggle)
libio-socket-ssl-perl 1.76-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 532 kB
  • sloc: perl: 3,448; makefile: 2
file content (48 lines) | stat: -rw-r--r-- 1,502 bytes parent folder | download
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;
+                }
 	}
 }