Bug#336348: nullmailer: lack of IPv6 support

2005-10-29 Thread Alexander Clouter
Package: nullmailer
Version: 1:1.00-2
Severity: wishlist
Tags: patch

Hi,

There is no support for IPv6 support in nullmailer, which is a shame and
so I rolled out the attached patch.

I actually sent this first to the upstream author but never received a
reply :(  Instead I thought I might aswell send it to the Debian
maintainer :)

I feel my patch is cleaner than the one recently posted on the
nullmailer mailing list (beat me to the patch by two weeks :)

http://lists.untroubled.org/?list=nullmailercmd=showmsgmsgnum=548

Which ever patch is chosen, one needs to go in...fight to the death? :)

Cheers

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (990, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.14-ck1
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)

Versions of packages nullmailer depends on:
ii  debconf [debconf-2.0] 1.4.58 Debian configuration management sy
ii  libc6 2.3.5-7GNU C Library: Shared libraries an
ii  libgcc1   1:4.0.2-3  GCC support library
ii  libstdc++64.0.2-3The GNU Standard C++ Library v3
ii  lsb-base  3.0-10 Linux Standard Base 3.0 init scrip
ii  ucf   2.003  Update Configuration File: preserv

Versions of packages nullmailer recommends:
ii  sysklogd [system-log-daemon]  1.4.1-17   System Logging Daemon

-- debconf information excluded
diff -u -r nullmailer-1.00.orig/configure.in nullmailer-1.00/configure.in
--- nullmailer-1.00.orig/configure.in	2005-10-23 13:05:12.610696760 +0100
+++ nullmailer-1.00/configure.in	2005-10-23 13:05:18.755762568 +0100
@@ -47,6 +47,24 @@
 dnl AC_CHECK_FUNCS(gettimeofday mkdir putenv rmdir socket)
 AC_CHECK_FUNCS(setenv srandom)
 
+AC_MSG_CHECKING(for getaddrinfo)
+AC_TRY_COMPILE([#include sys/types.h
+#include sys/socket.h
+#include netdb.h], [getaddrinfo(NULL, NULL, NULL, NULL)], has_getaddrinfo=yes, has_getaddrinfo=no)
+if test $has_getaddrinfo = yes; then
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+
+if test x-$has_getaddrinfo = x-no ; then
+  AC_MSG_RESULT(disabled: getaddrinfo missing)
+else
+  AC_DEFINE(HAVE_GETADDRINFO,,[getaddrinfo code enabled])
+fi
+
+AC_SUBST(HAVE_GETADDRINFO)
+
 AC_DEFINE(BUFSIZE, 4096, [Generic buffer size])
 AM_CONDITIONAL(FDBUF_NO_MYSTRING, false)
 
diff -u -r nullmailer-1.00.orig/lib/tcpconnect.cc nullmailer-1.00/lib/tcpconnect.cc
--- nullmailer-1.00.orig/lib/tcpconnect.cc	2005-10-23 13:05:12.595699040 +0100
+++ nullmailer-1.00/lib/tcpconnect.cc	2005-10-23 13:05:24.110948456 +0100
@@ -28,7 +28,11 @@
 #include netinet/in.h
 #include errcodes.h
 #include connect.h
+#ifdef HAVE_GETADDRINFO
+#include lib/itoa.h
+#endif
 
+#ifndef HAVE_GETADDRINFO
 static int sethostbyname(const mystring hostname, struct sockaddr_in sa)
 {
   struct hostent *he = gethostbyname(hostname.c_str());
@@ -44,13 +48,46 @@
   memcpy(sa.sin_addr, he-h_addr, he-h_length);
   return 0;
 }
+#endif
 
 int tcpconnect(const mystring hostname, int port)
 {
+#ifdef HAVE_GETADDRINFO
+  struct addrinfo req, *res, *orig_res;
+  const char *service = itoa(port, 6);
+  
+  memset(req, 0, sizeof(req));
+  req.ai_flags = AI_NUMERICSERV;
+  req.ai_socktype = SOCK_STREAM;
+  int e = getaddrinfo(hostname.c_str(), service, req, res);
+#else
   struct sockaddr_in sa;
   memset(sa, 0, sizeof(sa));
   int e = sethostbyname(hostname, sa);
+#endif
   if(e) return e;
+#ifdef HAVE_GETADDRINFO
+  int s;
+  orig_res = res;
+
+  for (; res; res = res-ai_next ) {
+s = socket(res-ai_family, res-ai_socktype, res-ai_protocol);
+
+if(s  0)
+	continue;
+
+if(connect(s, res-ai_addr, res-ai_addrlen) != 0)
+	continue;
+
+/* sucessful connection */
+break;
+  }
+
+  freeaddrinfo(orig_res);
+
+  if(s  0)
+return -ERR_CONN_FAILED;
+#else
   sa.sin_family = AF_INET;
   sa.sin_port = htons(port);
   int s = socket(PF_INET, SOCK_STREAM, 0);
@@ -64,5 +101,6 @@
 default: return -ERR_CONN_FAILED;
 }
   }
+#endif
   return s;
 }


Bug#336348: nullmailer: lack of IPv6 support

2005-10-29 Thread Norbert Tretkowski
* Alexander Clouter wrote:
 There is no support for IPv6 support in nullmailer, which is a shame
 and so I rolled out the attached patch.

Thanks, uploaded 1:1.00-3 with your patch included.

Norbert


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]