[dovecot] tcpserver/mailfront/stunnel with patch (was Re: inetd/xinetd/tcpserver support)

Charlie Brady charlieb-dovecot at e-smith.com
Thu Mar 20 17:20:51 EET 2003


On 20 Mar 2003, Timo Sirainen wrote:

> On Thu, 2003-03-20 at 03:30, Charlie Brady wrote:
> > I have a working tcpserver system, but one using a substantially different 
> > process mix. I haven't used imap-login at all, but have used 
> > imapfront-auth from Bruce Guenter's mailfront package 
> > (http://www.untroubled.org/mailfront/).
> > 
> > 002 login foo xxxxx
> > * PREAUTH [CAPABILITY IMAP4rev1 SORT THREAD=REFERENCES MULTIAPPEND 
> > UNSELECT LITERAL+ IDLE CHILDREN LISTEXT LIST-SUBSCRIBED] Logged in as foo
> 
> There's one problem. Dovecot shouldn't reply with PREAUTH but "002 OK".
> Mailfront gives the 002 in environment variable, so you'd have to modify
> Dovecot to use it.

Done - patch is attached.

Here is the run file for running stunnel/mailfront/dovecot under 
tcpserver:

#!/bin/sh

concurrency=20
ulimitdata=3000000
CVM_SASL_PLAIN=cvm-local:/tmp/.cvm-unix-local
export CVM_SASL_PLAIN
CVM_ACCOUNT_SPLIT_CHARS=
export CVM_ACCOUNT_SPLIT_CHARS

SSLUID=`id -u stunnel`
SSLGID=`id -g stunnel`

exec 2>&1
exec \
  softlimit -m $ulimitdata \
  tcpserver -dHRvX \
  -c "$concurrency" \
  -x tcp.cdb \
  0 imap \
   makesock \
   stunnel -D debug -/ ssl -s "$SSLUID" -g "$SSLGID" \
       -N imap \
       -i -R seed -p imapd.pem -n imap- -f -F 3 \
    -makesock_connect_to \
  /usr/bin/imapfront-auth \
  /usr/libexec/dovecot/imap

This is the chroot jail required by stunnel:

-rw-r-----    1 root     stunnel ... ssl/imapd.pem
-rw-------    1 stunnel  stunnel ... ssl/seed
-rw-r--r--    1 root     root    ... ssl/usr/share/ssl/openssl.cnf

--
Charlie

-------------- next part --------------
--- src/imap/main.c.orig	Thu Mar 20 16:32:48 2003
+++ src/imap/main.c	Thu Mar 20 17:00:37 2003
@@ -70,6 +70,7 @@
 	struct client *client;
 	struct mail_storage *storage;
 	const char *user, *mail, *str;
+	const char *tag;
 	int hin, hout;
 
 	lib_init_signals(sig_quit);
@@ -124,11 +125,16 @@
 
 	client = client_create(hin, hout, storage);
 
-	if (IS_STANDALONE()) {
+	tag = getenv("IMAPLOGINTAG");
+	if (tag == NULL || *tag == '\0') {
 		client_send_line(client, t_strconcat(
 			"* PREAUTH [CAPABILITY "CAPABILITY_STRING"] "
 			"Logged in as ", user, NULL));
-	}
+	} else {
+		    client_send_line(client,
+		    t_strconcat(tag, " OK Logged in.", NULL));
+	 	}
+
 }
 
 static void main_deinit(void)


More information about the dovecot mailing list