Package: dkimproxy
Version: 1.4.1-3
Severity: normal
Tags: ipv6 patch

Attached is a patch that allows dkimproxy to listen on IPv6, provided
that the installed version of libnet-server-perl supports IPv6, which
version 0.99-3 in Debian does. This patch depends on the package
libio-socket-inet6-perl.

I haven't tested whether it still works with a non-IPv6-patched
libnet-server-perl, but I think it should.

Without this patch, if you have libnet-server-perl 0.99-3 installed,
dkimproxy will open a socket for listening on IPv6, but upon
connection, you will get "Connection closed by foreign host."

-- System Information:
Debian Release: 6.0.3
  APT prefers stable
  APT policy: (990, 'stable'), (500, 'stable-updates')
Architecture: amd64 (x86_64)

Kernel: Linux 3.0.4-x86_64-linode21 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages dkimproxy depends on:
ii  adduser                3.112+nmu2        add and remove users and groups
ii  liberror-perl          0.17-1            Perl module for error/exception ha
ii  libmail-dkim-perl      0.38-1            cryptographically identify the sen
ii  libnet-server-perl     0.99-3~bpo60+1    extensible, general perl server en
ii  libtext-wrapper-perl   1.02-1            Simple word wrapping routine
ii  lsb-base               3.2-23.2squeeze1  Linux Standard Base 3.2 init scrip
ii  openssl                0.9.8o-4squeeze5  Secure Socket Layer (SSL) binary a
ii  perl                   5.10.1-17squeeze2 Larry Wall's Practical Extraction 
ii  ssl-cert               1.0.28            simple debconf wrapper for OpenSSL

Versions of packages dkimproxy recommends:
pn  amavisd-new                   <none>     (no description available)

dkimproxy suggests no packages.

-- Configuration Files:
/etc/default/dkimproxy changed:
RUN_DKIMPROXY_IN=0

/etc/dkimproxy/dkimproxy_in.conf changed:
listen    localhost:10026
relay     localhost:10024

/etc/dkimproxy/dkimproxy_out.conf changed:
listen    localhost:10028
relay     localhost:10029
domain    kenyonralph.com
signature dkim
keyfile   /var/lib/dkimproxy/private.key
selector  postfix


-- no debconf information
--- 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 <b...@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 = $@)
        {

Reply via email to