Hi,
I'm not sure if this patch applies correctly against the Toaster, but I 
have been using this patch (was originally against qmail-1.03 and now 
applies against netqmail-1.05) for years.

control/smtproutes has the following format using this patch :-

{domain}:{relay host}:{relay port}:{relay user}:{relay password}

Regards Drew

diff -uPr netqmail-1.05.orig/Makefile netqmail-1.05/Makefile
--- netqmail-1.05.orig/Makefile Fri Jul 30 15:19:27 2004
+++ netqmail-1.05/Makefile      Fri Jul 30 15:22:20 2004
@@ -1445,13 +1445,13 @@
 load qmail-remote.o control.o constmap.o timeoutread.o timeoutwrite.o \
 timeoutconn.o tcpto.o now.o dns.o ip.o ipalloc.o ipme.o quote.o \
 ndelay.a case.a sig.a open.a lock.a seek.a getln.a stralloc.a alloc.a \
-substdio.a error.a str.a fs.a auto_qmail.o dns.lib socket.lib
+substdio.a error.a str.a fs.a auto_qmail.o base64.o dns.lib socket.lib
        ./load qmail-remote control.o constmap.o timeoutread.o \
        timeoutwrite.o timeoutconn.o tcpto.o now.o dns.o ip.o \
        tls.o ssl_timeoutio.o -L/usr/local/ssl/lib -lssl -lcrypto \
        ipalloc.o ipme.o quote.o ndelay.a case.a sig.a open.a \
        lock.a seek.a getln.a stralloc.a alloc.a substdio.a error.a \
-       str.a fs.a auto_qmail.o  `cat dns.lib` `cat socket.lib`
+       str.a fs.a auto_qmail.o base64.o  `cat dns.lib` `cat socket.lib`
 
 qmail-remote.0: \
 qmail-remote.8
diff -uPr netqmail-1.05.orig/conf-cc netqmail-1.05/conf-cc
--- netqmail-1.05.orig/conf-cc  Fri Jul 30 15:19:27 2004
+++ netqmail-1.05/conf-cc       Fri Jul 30 15:21:53 2004
@@ -1,3 +1,3 @@
-cc -O2 -DTLS=20040419 -I/usr/local/ssl/include
+cc -O2 -DAUTH=20040730 -DTLS=20040705 -I/usr/local/ssl/include
 
 This will be used to compile .c files.
diff -uPr netqmail-1.05.orig/qmail-remote.c netqmail-1.05/qmail-remote.c
--- netqmail-1.05.orig/qmail-remote.c   Fri Jul 30 15:19:27 2004
+++ netqmail-1.05/qmail-remote.c        Fri Jul 30 15:22:41 2004
@@ -44,6 +44,15 @@
 stralloc host = {0};
 stralloc sender = {0};
 
+#ifdef AUTH
+stralloc auth_smtp_user = {0};
+stralloc auth_smtp_pass = {0};
+stralloc auth_b64_user = {0};
+stralloc auth_b64_pass = {0};
+
+int auth_init();
+#endif
+
 saa reciplist = {0};
 
 struct ip_address partner;
@@ -503,6 +512,51 @@
   return 1;
 }
 #endif
+#ifdef AUTH
+int auth_init()
+{
+  int i;
+  int authlogin = 0;
+  stralloc *sa = ehlokw.sa;
+  unsigned int len = ehlokw.len;
+
+  /* look for AUTH among EHLO keywords */
+  for ( ; len && case_diffs(sa->s, "AUTH"); ++sa, --len) ;
+  if (!len) return 0;
+
+  /* look for LOGIN among the AUTH parameters */
+  i = str_len(sa->s) + 1;
+  while (i < sa->len) {
+    if (case_diffs(sa->s + i, "LOGIN") == 0) authlogin = 1;
+    i += (str_len(sa->s + i) + 1);
+  }
+
+  /* if we have AUTH LOGIN and a username and password, do it */
+  if (authlogin && auth_smtp_user.len && auth_smtp_pass.len) {
+    if (b64encode(&auth_smtp_user,&auth_b64_user))
+      quit("ZConnected to "," but unable to Base64 encode username");
+    if (b64encode(&auth_smtp_pass,&auth_b64_pass))
+      quit("ZConnected to "," but unable to Base64 encode password");
+
+    substdio_puts(&smtpto, "AUTH LOGIN\r\n");
+    substdio_flush(&smtpto);
+    if (smtpcode() != 334)
+      quit("ZConnected to "," but authentication was rejected (AUTH LOGIN)");
+    substdio_put(&smtpto,auth_b64_user.s,auth_b64_user.len);
+    substdio_puts(&smtpto,"\r\n");
+    substdio_flush(&smtpto);
+    if (smtpcode() != 334)
+      quit("ZConnected to "," but authentication was rejected (username)");
+    substdio_put(&smtpto,auth_b64_pass.s,auth_b64_pass.len);
+    substdio_puts(&smtpto,"\r\n");
+    substdio_flush(&smtpto);
+    if (smtpcode() != 235)
+      quit("ZConnected to "," but authentication was rejected (password)");
+    return 1;
+  }
+  return 0;
+}
+#endif
 
 stralloc recip = {0};
 
@@ -558,11 +612,23 @@
 #ifdef EHLO
   }
 #endif
- 
+#ifdef AUTH
+  if (auth_init()) {
+    substdio_puts(&smtpto,"MAIL FROM:<");
+    substdio_put(&smtpto,sender.s,sender.len);
+    substdio_puts(&smtpto,"> AUTH=<");
+    substdio_put(&smtpto,sender.s,sender.len);
+    substdio_puts(&smtpto,">\r\n");
+    substdio_flush(&smtpto);
+  } else {
+#endif
   substdio_puts(&smtpto,"MAIL FROM:<");
   substdio_put(&smtpto,sender.s,sender.len);
   substdio_puts(&smtpto,">\r\n");
   substdio_flush(&smtpto);
+#ifdef AUTH
+  }
+#endif
   code = smtpcode();
   if (code >= 500) quit("DConnected to "," but sender was rejected");
   if (code >= 400) quit("ZConnected to "," but sender was rejected");
@@ -667,6 +733,11 @@
   int flagallaliases;
   int flagalias;
   char *relayhost;
+  char *relayport;
+#ifdef AUTH
+  char *relayuser;
+  char *relaypass;
+#endif
  
   sig_pipeignore();
   if (argc < 4) perm_usage();
@@ -675,6 +746,10 @@
  
  
   if (!stralloc_copys(&host,argv[1])) temp_nomem();
+#ifdef AUTH
+    if (!stralloc_copys(&auth_smtp_user,"")) temp_nomem();
+    if (!stralloc_copys(&auth_smtp_pass,"")) temp_nomem();
+#endif
  
   relayhost = 0;
   for (i = 0;i <= host.len;++i)
@@ -686,8 +761,25 @@
   if (relayhost) {
     i = str_chr(relayhost,':');
     if (relayhost[i]) {
-      scan_ulong(relayhost + i + 1,&port);
       relayhost[i] = 0;
+      relayport = relayhost + i + 1;
+#ifdef AUTH
+      i = str_chr(relayport,':');
+      if (relayport[i]) {
+        relayport[i] = 0;
+       relayuser = relayport + i + 1;
+       i = str_chr(relayuser,':');
+       if (relayuser[i]) {
+         relayuser[i] = 0;
+         relaypass = relayuser + i + 1;
+         if (str_len(relayuser) && str_len(relaypass)) {
+           if (!stralloc_copys(&auth_smtp_user,relayuser)) temp_nomem();
+           if (!stralloc_copys(&auth_smtp_pass,relaypass)) temp_nomem();
+         }
+       }
+      }
+#endif
+      if (str_len(relayport)) scan_ulong(relayport,&port);
     }
     if (!stralloc_copys(&host,relayhost)) temp_nomem();
   }

On Wed, 31 Aug 2005, Nicholas Moline wrote:

> Glen wrote:
> 
> > Hi,
> >  
> > I want to add the qmail-authentication-0.6.4 patch to the toaster. 
> > because i want to relay mail to authenticated server. Just now its 
> > with the  qmail-smtpd-auth-0.5.7 patch
> > Is there any way we can include this toaster
> >  
> > Thanks in advance 
> 
> I too would like this feature, The Machine I have setup here at the 
> office I am running both qmail and postfix to do this but it's a kludged 
> system, I have qmail processing all mail, and external mail I have qmail 
> forwarding to postfix (running on another port) and then I have postfix 
> forwarding to our ISP since they block port 25 to send out to 
> destinations directly.  It sure would be nice to be able to have qmail 
> forward it straight without having to use postfix.
> 

Reply via email to