From: Tobias Geerinckx-Rice <me@tobias.gr>
Date: Fri, 01 Mar 2019 20:51:32 +0100
Subject: [PATCH] dkimproxy: Add IPv6 support.
The following patch was copied verbatim from Debian[0].
[0]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=656041
---
--- dkimproxy-1.4.1.orig/lib/MSDW/SMTP/Server.pm
+++ dkimproxy-1.4.1/lib/MSDW/SMTP/Server.pm
@@ -11,7 +11,7 @@
# Written by Bennett Todd <bet@rahul.net>
package MSDW::SMTP::Server;
-use IO::Socket;
+use IO::Socket::INET6;
use IO::File;
=head1 NAME
@@ -88,14 +88,14 @@
=item new(interface => $interface, port => $port);
The interface and port to listen on must be specified. The interface
-must be a valid numeric IP address (0.0.0.0 to listen on all
-interfaces, as usual); the port must be numeric. If this call
-succeeds, it returns a server structure with an open
-IO::Socket::INET in it, ready to listen on. If it fails it dies, so
-if you want anything other than an exit with an explanatory error
-message, wrap the constructor call in an eval block and pull the
-error out of $@ as usual. This is also the case for all other
-methods; they succeed or they die.
+must be a valid numeric IPv4 or IPv6 address (0.0.0.0 or :: to listen
+on all interfaces, as usual); the port must be numeric. If this call
+succeeds, it returns a server structure with an open IO::Socket::INET6
+in it, ready to listen on. If it fails it dies, so if you want
+anything other than an exit with an explanatory error message, wrap
+the constructor call in an eval block and pull the error out of $@ as
+usual. This is also the case for all other methods; they succeed or
+they die.
=item accept([debug => FD]);
@@ -154,7 +154,7 @@
my ($this, @opts) = @_;
my $class = ref($this) || $this;
my $self = bless { @opts }, $class;
- $self->{sock} = IO::Socket::INET->new(
+ $self->{sock} = IO::Socket::INET6->new(
LocalAddr => $self->{interface},
LocalPort => $self->{port},
Proto => 'tcp',
only in patch2:
unchanged:
--- dkimproxy-1.4.1.orig/scripts/dkimproxy.out
+++ dkimproxy-1.4.1/scripts/dkimproxy.out
@@ -314,17 +314,11 @@
{
my $self = shift;
- # try to determine peer's address
- use Socket;
- my $peersockaddr = getpeername(STDOUT);
- my ($port, $iaddr) = sockaddr_in($peersockaddr);
- $ENV{REMOTE_ADDR} = inet_ntoa($iaddr);
-
# initialize syslog
eval
{
openlog("dkimproxy.out", "perror,pid,ndelay", "mail");
- syslog("debug", '%s', "connect from $ENV{REMOTE_ADDR}");
+ syslog("debug", '%s', "connect from $self->{server}->{peeraddr}");
};
if (my $E = $@)
{