On Tue, 2011-06-07 at 08:52 -0500, Matt Brookings wrote:
> >> +                  /*
> >> +                          vpopmail 5.4 does not understand IPv6
> >> +                  */
> >> +
> >> +                  if (!(strcmp(host, "::1")))
> >> +                         host = "127.0.0.1";
> > 
> > Does this code really matter? Wouldn't SMTP relay be open from localhost
> > always anyway?
> 
> Unfortunately, the 5.4 branch does not understand "::1" as the loopback,
> and it parses the value incorrectly, leading to an open relay situation.
>  Not all systems allow localhost to relay via SMTP without authentication.

Doesn't it also mean that if someone connects via a remote IPv6 address,
it again leads to open relay? How about the attached patch instead?


diff -r ed05316ed441 src/auth/passdb-vpopmail.c
--- a/src/auth/passdb-vpopmail.c	Tue Jun 07 16:12:13 2011 +0300
+++ b/src/auth/passdb-vpopmail.c	Tue Jun 07 16:57:03 2011 +0300
@@ -136,11 +136,12 @@
 		return;
 	}
 
-#ifdef HAVE_VPOPMAIL_OPEN_SMTP_RELAY
+#ifdef POP_AUTH_OPEN_RELAY
 	if (strcasecmp(request->service, "POP3") == 0 ||
 	    strcasecmp(request->service, "IMAP") == 0) {
 		const char *host = net_ip2addr(&request->remote_ip);
-		if (host != NULL) {
+		/* vpopmail 5.4 does not understand IPv6 */
+		if (host != NULL && IPADDR_IS_V4(&request->remote_ip)) {
 			/* use putenv() directly rather than env_put() which
 			   would leak memory every time we got here. use a
 			   static buffer for putenv() as SUSv2 requirements

Reply via email to